docs: def DBObject(table_name, versioning=VersioningTypes.NONE):
      """Classes annotated with DBObject gain persistence methods."""
      def wrapped(cls):
          field_names = set()
          all_fields = []
  
          for name in dir(cls):
              fld = getattr(cls, name)
              if fld and isinstance(fld, Field):
                  fld.name = name
                  all_fields.append(fld)
                  field_names.add(name)
  
          def add_missing_field(name, default='', insert_pos=None):
              if name not in field_names:
                  fld = Field(default=default)
                  fld.name = name
                  all_fields.insert(
                      len(all_fields) if insert_pos is None else insert_pos,
                      fld
                  )
  
          add_missing_field('id', insert_pos=0)
          add_missing_field('_create_date')
          add_missing_field('_last_update')
          if versioning == VersioningTypes.DELTA_HISTORY:
              add_missing_field('_version_hist', default=list)
  
          # Things we count on as part of our processing
          cls.__table_name__ = table_name
          cls.__versioning__ = versioning
          cls.__fields__ = all_fields
  
          # Give them a ctor for free - but make sure we aren't clobbering one
          if not ctor_overridable(cls):
              raise TypeError(
                  'Classes with user-supplied __init__ should not be decorated '
                  'with DBObject. Use the setup method'
              )
          cls.__init__ = _auto_init
  
          # Duck-type the class for our data methods
          cls.get_table_name = classmethod(_get_table_name)
          cls.get_id = _get_id
          cls.set_id = _set_id
          cls.to_data = _to_data
          cls.from_data = classmethod(_from_data)
          cls.index_names = classmethod(_index_names)
          cls.indexes = _indexes
          # Bonus methods they get for using gludb.simple
          cls.get_version_hist = _get_version_hist
  
          # Register with our abc since we actually implement all necessary
          # functionality
          Storable.register(cls)
  
          # And now that we're registered, we can also get the database
          # read/write functionality for free
          cls = DatabaseEnabled(cls)
  
          if versioning == VersioningTypes.DELTA_HISTORY:
              cls.save = _delta_save(cls.save)
  
          return cls
  
      return wrapped