Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # https://speakerdeck.com/lig/your-own-orm-in-python-how-and-why
- # https://github.com/cyanife/Pyanife/blob/master/orm.py
- # https://github.com/mongodb/pymodm/blob/master/pymodm/base/models.py
- # https://gist.github.com/fernandojunior/a468b5d7726e978a3e80
- # https://github.com/zzzsochi/yadm/tree/master/yadm
- # https://docs.mongodb.com/manual/core/index-unique/
- from bson import ObjectId
- from collections import OrderedDict
- """
- user = User.get_queryset(db).order_by('-username').find()
- user = User(username='tester', password='test123')
- User.save(db, user)
- """
- class AttrDict(dict):
- __getattr__ = dict.get
- __setattr__ = dict.__setitem__
- __delattr__ = dict.__delitem__
- class MetaDict(AttrDict):
- pass
- class Field:
- # [-]<field_name> - минус в начале означает, что поле сортируется в порядке
- # убывания
- # TODO: add unique with
- def __init__(
- self,
- name=None,
- required=False,
- default=None,
- choices=None,
- unique=False,
- unique_with=None,
- primary_key=False,
- null=True,
- **kwargs
- ):
- self.name = name
- self.required = required
- self.default = default
- self.choices = choices
- self.unique = unique
- self.unique_with = unique_with
- self.primary_key = primary_key
- self.null = null
- def __get__(self, instance, owner):
- if instance is None:
- return self
- return instance._data[self.name]
- def __set__(self, instance, value):
- instance._data[self.name] = value
- instance._mark_as_changed(self.name)
- def has_default(self):
- return self.default is not None
- def get_default(self):
- if self.has_default():
- if callable(self.default):
- return self.default()
- return self.default
- return None
- def validate(self, value):
- pass
- def to_python(self, value):
- return value
- class ModelMeta(type):
- def __new__(cls, name, bases, attrs):
- fields = OrderedDict()
- for k, v in attrs.items():
- if isinstance(v, Field):
- if v.name is None:
- v.name = k
- fields[k] = v
- attrs['_fields'] = fields
- attrs['_db_fields_map'] = {field.name: field for field in fields.values()}
- return type.__new__(cls, name, bases, attrs)
- class QuerySet:
- pass
- class Model(metaclass=ModelMeta):
- def __init__(self, *args, **kwargs):
- self._changed = {}
- def _mark_as_changed(self, name):
- self._changed[name] = True
- @classmethod
- def get_queryset(cls, db):
- pass
- @classmethod
- def insert(cls, db, model):
- pass
- @classmethod
- def update(cls, db, model):
- pass
- @classmethod
- def remove(cls, db, model):
- pass
- class Test(Model):
- qwe = Field()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement