Skip to content

Instantly share code, notes, and snippets.

@gvangool
Forked from leah/CouchObject.py
Created June 15, 2009 06:12
Show Gist options
  • Select an option

  • Save gvangool/129963 to your computer and use it in GitHub Desktop.

Select an option

Save gvangool/129963 to your computer and use it in GitHub Desktop.

Revisions

  1. @leah leah renamed this gist Jun 11, 2009. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. @leah leah created this gist Jun 11, 2009.
    50 changes: 50 additions & 0 deletions CouchObject
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    class CouchObject(object):
    '''
    Convert between a CouchDB document and Python object.
    Create Python objects while maintaining a schema-free database.
    Define object properties without storing null fields.
    '''

    @property
    def id(self):
    return self._id

    @property
    def rev(self):
    return self._rev

    def all_fields(self):
    # return a list of expected fields
    raise NotImplementedError("all_fields must return a list of all fields for %s" % self.__class__)

    def __init__(self, **kwargs):
    self.server, self.db = get_server_db()

    # create object properties for all desired fields
    for field_name in self.all_fields():
    # check if field exists in document
    if field_name in kwargs and kwargs[field_name] is not None:
    value = kwargs[field_name]
    else:
    value = None
    setattr(self, field_name, value)

    def to_dict(self):
    # dictionary from properties
    data_dict = {}
    for field_name in self.all_fields():
    value = getattr(self, field_name)
    if value is not None: # don't store null fields!
    data_dict[field_name] = value
    return data_dict

    def save(self):
    self.db.update([self.to_dict()])

    @staticmethod
    def save_batch(docs):
    server, db = get_server_db()
    db.update([doc.to_dict() for doc in docs])

    def delete(self):
    del self.db[self._id]