Skip to content

Instantly share code, notes, and snippets.

@alejandrobernardis
Created May 28, 2012 05:17
Show Gist options
  • Select an option

  • Save alejandrobernardis/2817380 to your computer and use it in GitHub Desktop.

Select an option

Save alejandrobernardis/2817380 to your computer and use it in GitHub Desktop.
Python, MongoDB, Mongoengine, Abstract
class ControlDocument(Document):
meta = {
"abstract": True
}
#: fields
availabled = BooleanField(default=False)
enabled = BooleanField(default=False)
created = DateTimeField(default=datetime.datetime.now())
modified = DateTimeField(default=datetime.datetime.now())
#: methods
def get_date_compare(self, date=None, date_min=-1, date_max=1):
return DateCompare(date, date_min, date_max)
def _datetime_update(self, key, value=None, update_data=None):
try:
if not value:
value = datetime.datetime.now()
if not update_data:
update_data = dict()
update_data["set__"+key] = value
self.update(**update_data)
self.reload()
return True
except:
return False
def set_modified(self, value=None):
return self._datetime_update("modified", value)
def set_modified_with_data(self, update_data, value=None):
return self._datetime_update("modified", value, update_data)
def _status_update(self, key, value=False):
try:
update_data = dict()
update_data["set__"+key] = value
return self.set_modified_with_data(update_data)
except:
return False
def set_availabled(self, value=False):
return self._status_update("availabled", value)
def set_enabled(self, value=False):
return self._status_update("enabled", value)
def to_object(self, ignore=[]):
data = {}
for field_name, _ in self._fields.items():
value = getattr(self, field_name, None)
try:
if not value:
raise
elif is_primitive(value):
value = value
elif isinstance(value, ObjectId):
value = value.__str__()
elif isinstance(value, datetime.datetime) or \
isinstance(value, datetime.date):
value = datetime_to_str(value)
else:
value = value.to_object()
except Exception:
value = None
if not field_name in ignore:
data[field_name] = value
return data
def _get_status_query(self, enabled=True, availabled=True):
return Q(enabled=enabled)&Q(availabled=availabled)
@staticmethod
def get_status_query(enabled=True, availabled=True):
return ControlDocument()._get_status_query(enabled, availabled)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment