docs: def parse(self, limit=None):
          """
          We process each of the postgres tables in turn.
          The order of processing is important here, as we build up a hashmap of
          internal vs external identifers (unique keys by type to FB id).
          These include allele, marker (gene), publication, strain, genotype,
          annotation (association), and descriptive notes.
          :param limit: Only parse this many lines of each table
          :return:
  
          """
          if limit is not None:
              LOG.info("Only parsing first %d rows of each file", limit)
          LOG.info("Parsing files...")
  
          if self.test_only:
              self.test_mode = True
  
          # the following will provide us the hash-lookups
          self._process_dbxref()
          self._process_cvterm()
          self._process_genotypes(limit)
          self._process_pubs(limit)
  
          # do this before environments to get the external ids
          self._process_environment_cvterm()
          self._process_environments()
          self._process_organisms(limit)  # must be done before features
          self._process_organism_dbxref(limit)
          self._process_features(limit)
          self._process_phenotype(limit)
          self._process_phenotype_cvterm()
          # gets external mappings for features (genes, variants, etc)
          self._process_feature_dbxref(limit)
          # do this after organisms to get the right taxonomy
          self._process_stocks(limit)
          # figures out types of some of the features
          self._get_derived_feature_types(limit)
  
          # These are the associations amongst the objects above
          self._process_stockprop(limit)
          self._process_pub_dbxref(limit)
          self._process_phendesc(limit)
          self._process_feature_genotype(limit)
          self._process_feature_pub(limit)
          self._process_stock_genotype(limit)
          self._process_phenstatement(limit)   # these are G2P associations
  
          self._process_feature_relationship(limit)
  
          self._process_disease_models(limit)
          # TODO add version info from file somehow
          # (in parser rather than during fetching)
  
          LOG.info("Finished parsing.")
          LOG.info("Loaded %d nodes", len(self.graph))
          return