Created
May 28, 2012 05:17
-
-
Save alejandrobernardis/2817380 to your computer and use it in GitHub Desktop.
Python, MongoDB, Mongoengine, Abstract
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 characters
| 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