Advertisement
Guest User

Untitled

a guest
Feb 13th, 2018
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.74 KB | None | 0 0
  1. # https://speakerdeck.com/lig/your-own-orm-in-python-how-and-why
  2. # https://github.com/cyanife/Pyanife/blob/master/orm.py
  3. # https://github.com/mongodb/pymodm/blob/master/pymodm/base/models.py
  4. # https://gist.github.com/fernandojunior/a468b5d7726e978a3e80
  5. # https://github.com/zzzsochi/yadm/tree/master/yadm
  6. # https://docs.mongodb.com/manual/core/index-unique/
  7. from bson import ObjectId
  8. from collections import OrderedDict
  9.  
  10. """
  11. user = User.get_queryset(db).order_by('-username').find()
  12.  
  13. user = User(username='tester', password='test123')
  14. User.save(db, user)
  15. """
  16.  
  17.  
  18. class AttrDict(dict):
  19.   __getattr__ = dict.get
  20.   __setattr__ = dict.__setitem__
  21.   __delattr__ = dict.__delitem__
  22.  
  23.  
  24. class MetaDict(AttrDict):
  25.   pass
  26.  
  27.  
  28. class Field:
  29.   # [-]<field_name> - минус в начале означает, что поле сортируется в порядке
  30.   # убывания
  31.   # TODO: add unique with
  32.  
  33.   def __init__(
  34.     self,
  35.     name=None,
  36.     required=False,
  37.     default=None,
  38.     choices=None,
  39.     unique=False,
  40.     unique_with=None,
  41.     primary_key=False,
  42.     null=True,
  43.     **kwargs
  44.   ):
  45.     self.name = name
  46.     self.required = required
  47.     self.default = default
  48.     self.choices = choices
  49.     self.unique = unique
  50.     self.unique_with = unique_with
  51.     self.primary_key = primary_key
  52.     self.null = null
  53.  
  54.   def __get__(self, instance, owner):
  55.     if instance is None:
  56.       return self
  57.     return instance._data[self.name]
  58.  
  59.   def __set__(self, instance, value):
  60.     instance._data[self.name] = value
  61.     instance._mark_as_changed(self.name)
  62.  
  63.   def has_default(self):
  64.     return self.default is not None
  65.  
  66.   def get_default(self):
  67.     if self.has_default():
  68.       if callable(self.default):
  69.         return self.default()
  70.       return self.default
  71.     return None
  72.  
  73.   def validate(self, value):
  74.     pass
  75.  
  76.   def to_python(self, value):
  77.     return value
  78.  
  79.  
  80. class ModelMeta(type):
  81.  
  82.   def __new__(cls, name, bases, attrs):
  83.     fields = OrderedDict()
  84.     for k, v in attrs.items():
  85.       if isinstance(v, Field):
  86.         if v.name is None:
  87.           v.name = k
  88.         fields[k] = v
  89.     attrs['_fields'] = fields
  90.     attrs['_db_fields_map'] = {field.name: field for field in fields.values()}
  91.     return type.__new__(cls, name, bases, attrs)
  92.  
  93.  
  94. class QuerySet:
  95.   pass
  96.  
  97.  
  98. class Model(metaclass=ModelMeta):
  99.  
  100.   def __init__(self, *args, **kwargs):
  101.     self._changed = {}
  102.  
  103.   def _mark_as_changed(self, name):
  104.     self._changed[name] = True
  105.  
  106.   @classmethod
  107.   def get_queryset(cls, db):
  108.     pass
  109.  
  110.   @classmethod
  111.   def insert(cls, db, model):
  112.     pass
  113.  
  114.   @classmethod
  115.   def update(cls, db, model):
  116.     pass
  117.  
  118.   @classmethod
  119.   def remove(cls, db, model):
  120.     pass
  121.  
  122.  
  123. class Test(Model):
  124.   qwe = Field()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement