docs: def update_resource_properties(r, orig_columns={}, force=False):
      """Get descriptions and other properties from this, or upstream, packages, and add them to the schema. """
  
      added = []
  
      schema_term = r.schema_term
  
      if not schema_term:
          warn("No schema term for ", r.name)
          return
  
      rg = r.raw_row_generator
  
      # Get columns information from the schema, or, if it is a package reference,
      # from the upstream schema
  
      upstream_columns = {e['name'].lower() if e['name'] else '': e for e in r.columns() or {}}
  
      # Just from the local schema
      schema_columns = {e['name'].lower() if e['name'] else '': e for e in r.schema_columns or {}}
  
      # Ask the generator if it can provide column descriptions and types
      generator_columns = {e['name'].lower() if e['name'] else '': e for e in rg.columns or {}}
  
      def get_col_value(col_name, value_name):
  
          v = None
  
          if not col_name:
              return None
  
          for d in [generator_columns, upstream_columns, orig_columns, schema_columns]:
              v_ = d.get(col_name.lower(), {}).get(value_name)
              if v_:
                  v = v_
  
          return v
  
  
  
      # Look for new properties
      extra_properties = set()
      for d in [generator_columns, upstream_columns, orig_columns, schema_columns]:
          for k, v in d.items():
              for kk, vv in v.items():
                  extra_properties.add(kk)
  
      # Remove the properties that are already accounted for
      extra_properties = extra_properties - {'pos', 'header', 'name', ''}
  
      # Add any extra properties, such as from upstream packages, to the schema.
  
      for ep in extra_properties:
          r.doc['Schema'].add_arg(ep)
  
      for c in schema_term.find('Table.Column'):
  
          for ep in extra_properties:
              t = c.get_or_new_child(ep)
              v = get_col_value(c.name, ep)
              if v:
                  t.value = v
                  added.append((c.name, ep, v))
  
      prt('Updated schema for {}. Set {} properties'.format(r.name, len(added)))