-
-
Save gvangool/129963 to your computer and use it in GitHub Desktop.
Revisions
-
leah renamed this gist
Jun 11, 2009 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
leah created this gist
Jun 11, 2009 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal 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]