docs: def populate(self, fields=None, **fields_kwargs):
          """take the passed in fields, combine them with missing fields that should
          be there and then run all those through appropriate methods to hydrate this
          orm.
  
          The method replaces cls.hydrate() since it was becoming hard to understand
          what was going on with all these methods that did things just a little bit
          different.
  
          This is used to completely set all the fields of self. If you just want
          to set certain fields, you can use the submethod _populate
  
          :param fields: dict, the fields in a dict
          :param **fields_kwargs: dict, if you would like to pass the fields as key=val
              this picks those up and combines them with fields
          """
  
          # this will run all the fields of the Orm, not just the fields in fields
          # dict, another name would be hydrate
          pop_fields = {}
          fields = self.make_dict(fields, fields_kwargs)
          for k in self.schema.fields.keys():
              pop_fields[k] = fields.get(k, None)
  
          self._populate(pop_fields)