docs: def list_versions(self, symbol=None, snapshot=None, latest_only=False):
          """
          Return a list of versions filtered by the passed in parameters.
  
          Parameters
          ----------
          symbol : `str`
              Symbol to return versions for.  If None returns versions across all
              symbols in the library.
          snapshot : `str`
              Return the versions contained in the named snapshot
          latest_only : `bool`
              Only include the latest version for a specific symbol
  
          Returns
          -------
          List of dictionaries describing the discovered versions in the library
          """
          if symbol is None:
              symbols = self.list_symbols(snapshot=snapshot)
          else:
              symbols = [symbol]
  
          query = {}
  
          if snapshot is not None:
              try:
                  query['parent'] = self._snapshots.find_one({'name': snapshot})['_id']
              except TypeError:
                  raise NoDataFoundException('No snapshot %s in library %s' % (snapshot, self._arctic_lib.get_name()))
  
          versions = []
          snapshots = {ss.get('_id'): ss.get('name') for ss in self._snapshots.find()}
          for symbol in symbols:
              query['symbol'] = symbol
              seen_symbols = set()
              for version in self._versions.find(query, projection=['symbol', 'version', 'parent', 'metadata.deleted'], sort=[('version', -1)]):
                  if latest_only and version['symbol'] in seen_symbols:
                      continue
                  seen_symbols.add(version['symbol'])
                  meta = version.get('metadata')
                  versions.append({'symbol': version['symbol'], 'version': version['version'],
                                   'deleted': meta.get('deleted', False) if meta else False,
                                   # We return offset-aware datetimes in Local Time.
                                   'date': ms_to_datetime(datetime_to_ms(version['_id'].generation_time)),
                                   'snapshots': [snapshots[s] for s in version.get('parent', []) if s in snapshots]})
          return versions