code: def _id_handler(self, f):
          
  
          # If id_spec is a string, convert to iterable for later
          if isinstance(self.id_spec, six.string_types):
              id_key = [self.id_spec]
  
          elif hasattr(self.id_spec, '__call__'):
              id_key = [self.id_spec]
  
          # If dict, then assume it's a feature -> attribute mapping, e.g.,
          # {'gene': 'gene_id'} for GTF
          elif isinstance(self.id_spec, dict):
              try:
                  id_key = self.id_spec[f.featuretype]
                  if isinstance(id_key, six.string_types):
                      id_key = [id_key]
  
              # Otherwise, use default auto-increment.
              except KeyError:
                  return self._increment_featuretype_autoid(f.featuretype)
  
          # Otherwise assume it's an iterable.
          else:
              id_key = self.id_spec
  
          # Then try them in order, returning the first one that works:
          for k in id_key:
  
              if hasattr(k, '__call__'):
                  _id = k(f)
                  if _id:
                      if _id.startswith('autoincrement:'):
                          return self._increment_featuretype_autoid(_id[14:])
                      return _id
              else:
                  # use GFF fields rather than attributes for cases like :seqid:
                  # or :strand:
                  if (len(k) > 3) and (k[0] == ':') and (k[-1] == ':'):
                      # No [0] here -- only attributes key/vals are forced into
                      # lists, not standard GFF fields.
                      return getattr(f, k[1:-1])
                  else:
                      try:
                          return f.attributes[k][0]
                      except (KeyError, IndexError):
                          pass
          # If we get here, then default autoincrement
          return self._increment_featuretype_autoid(f.featuretype)
docs: Given a Feature from self.iterator, figure out what the ID should be.
  
          This uses `self.id_spec` identify the ID.