Advertisement
Guest User

Untitled

a guest
Feb 14th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.72 KB | None | 0 0
  1. from collections import OrderedDict
  2.  
  3.  
  4. class Field:
  5.   def __init__(self, name=None):
  6.     self.name = name
  7.  
  8.   def __get__(self, instance, owner):
  9.     # Вызываем объект как свойство класса
  10.     if instance is None:
  11.       return self
  12.     return instance._data[self.name]
  13.  
  14.   def __set__(self, instance, value):
  15.     instance._data[self.name] = value
  16.  
  17.  
  18. class BooleanField(Field):
  19.   pass
  20.  
  21.  
  22. class FloatField(Field):
  23.   pass
  24.  
  25.  
  26. class IntField(Field):
  27.   pass
  28.  
  29.  
  30. class ObjectIdField(Field):
  31.   pass
  32.  
  33.  
  34. class StringField(Field):
  35.   pass
  36.  
  37.  
  38. class DocumentMetaclass(type):
  39.   def __new__(cls, name, bases, namespace):
  40.     klass = super().__new__(cls, name, bases, namespace)
  41.     parents = [b for b in bases if isinstance(b, cls)]
  42.     # current class is Document
  43.     # if not parents:
  44.     #   return klass
  45.     print(klass, parents)
  46.     fields = OrderedDict()
  47.     for p in parents:
  48.       fields.update(p._fields)
  49.     klass._fields = fields
  50.     for k, v in namespace.items():
  51.       if isinstance(v, Field):
  52.         if v.name is None:
  53.           v.name = k
  54.         fields[k] = v
  55.     klass._fields = fields
  56.     meta = klass.Meta
  57.     for p in parents:
  58.       meta
  59.     return klass
  60.  
  61.  
  62. class Document(metaclass=DocumentMetaclass):
  63.   def __init__(self, **kw):
  64.     self._data = {}
  65.     self._data.update(kw)
  66.  
  67.   class Meta:
  68.     collection = None
  69.     indexes = ()
  70.  
  71.   @classmethod
  72.   def find(self, db, *args, **kw):
  73.     pass
  74.  
  75.   @classmethod
  76.   def insert(self, db, document):
  77.     pass
  78.  
  79.   @classmethod
  80.   def update(self, db, document):
  81.     pass
  82.  
  83.   @classmethod
  84.   def delete(self, db, document):
  85.     pass
  86.  
  87.  
  88. class User(Document):
  89.   username = StringField()
  90.   password = StringField()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement