code: def parse_feature_param(feature):
      
      # can request upstream sequence only from the following valid sites
      valid_upstream_sites = ["TSS", "TrSS"]
  
      upstream_site, upstream_len = None, None
      flag, error_msg = None, None
      parents, children = None, None
      if re.match(r'upstream', feature):
          parents, children = "mRNA", "CDS"
          feature, upstream_site, upstream_len = re.search(r'([A-z]+):([A-z]+):(\S+)', \
                  feature).groups()
  
          if not is_number(upstream_len):
              flag, error_msg = 1, "Error: upstream len `" + upstream_len + "` should be an integer"
  
          upstream_len = int(upstream_len)
          if(upstream_len < 0):
              flag, error_msg = 1, "Error: upstream len `" + str(upstream_len) + "` should be > 0"
  
          if not upstream_site in valid_upstream_sites:
              flag, error_msg = 1, "Error: upstream site `" + upstream_site + "` not valid." + \
                      " Please choose from " + valid_upstream_sites
      elif feature == "CDS":
          parents, children = "mRNA", "CDS"
      else:
          flag, error_msg = 1, "Error: unrecognized option --feature=" + feature
  
      return feature, parents, children, upstream_site, upstream_len, flag, error_msg
docs: Take the --feature param (coming from gff.load() and parse it.
      Returns feature, parents and children terms.
  
      Also returns length of upstream sequence (and start site) requested
  
      If erroneous, returns a flag and error message to be displayed on exit