def test_from_son(self): field = ReferenceField(db_field="test", reference_document_type=User) data = ObjectId("123456789012123456789012") result = field.from_son(data) expect(result).to_equal(ObjectId("123456789012123456789012"))
def test_to_son(self): field = ReferenceField(db_field="test", reference_document_type=User) u = User(name="test") u._id = ObjectId("123456789012123456789012") result = field.to_son(u) expect(str(result)).to_equal(str(u._id))
def test_to_son(self): field = ReferenceField(db_field="test", reference_document_type=User) u = User(name="test") u._id = ObjectId("123456789012123456789012") result = field.to_son(u) expect(result['__module__']).to_equal('tests.fields.test_reference_field') expect(result['__class__']).to_equal('User') expect(str(result['__id__'])).to_equal(str(u._id))
class Post(Document): __collection__ = 'posts' title = StringField(required=True) text = StringField(required=True, db_field='content') category = ReferenceField(reference_document_type=Category) comments = ListField(EmbeddedDocumentField(embedded_document_type=Comment))
class User(Document): __collection__ = 'users' index = IntField(required=True) email = StringField(required=True) first_name = StringField( db_field="whatever", max_length=50, default=lambda: "Bernardo" ) last_name = StringField(max_length=50, default="Heynemann") is_admin = BooleanField(default=True) website = URLField(default="http://google.com/") updated_at = DateTimeField( required=True, auto_now_on_insert=True, auto_now_on_update=True ) embedded = EmbeddedDocumentField( EmbeddedDocument, db_field="embedded_document" ) nullable = EmbeddedDocumentField( EmbeddedDocument, db_field="nullable_embedded_document" ) numbers = ListField(IntField()) posts = ListField(ReferenceField(reference_document_type=Post)) def __repr__(self): return "%s %s <%s>" % (self.first_name, self.last_name, self.email)
def test_from_son(self): field = ReferenceField(db_field="test", reference_document_type=User) data = { '__module__': 'tests.fields.test_reference_field', '__class__': 'User', '__id__': ObjectId("123456789012123456789012") } result = field.from_son(data) expect(result).to_equal({ '__module__': 'tests.fields.test_reference_field', '__class__': 'User', '__id__': ObjectId("123456789012123456789012"), '__loaded__': False })
def test_cant_create_reference_field_of_the_wrong_type(self): try: ReferenceField(reference_document_type=int) except ValueError: err = sys.exc_info()[1] expect(err).to_have_an_error_message_of("The field 'reference_document_type' argument must be a subclass of Document, not '<type 'int'>'.") else: assert False, "Should not have gotten this far"
class Lesson(Document): id = IntField() name = StringField(required=True) audience = StringField() teacher_name = StringField() lesson_type = StringField() start_time = StringField() color = StringField() comments = ListField(EmbeddedDocumentField(embedded_document_type=Comment)) day = ReferenceField('DayTimetable')
class Issue(Document): __collection__ = 'issues' id = UUIDField() title = StringField(required=True) content = StringField(required=True) level = StringField(required=True) date_added = DateTimeField(required=True, auto_now_on_insert=True) date_updated = DateTimeField(required=True, auto_now_on_update=True) user = ReferenceField(User)
class User(Document): def __init__(self, **kwargs): super(User, self).__init__(**kwargs) id = IntField(unique=True) email = EmailField() _salt = BinaryField(12) # 64 is the length of the SHA-256 encoded string length _password = StringField(64) group = ReferenceField('scheduler.model.Group') timetable = EmbeddedDocumentField('scheduler.model.Schedule')
class BoardDocument(BaseDocument): """Доска на которой размещены списки с карточками. Доска может быть доступна для нескольких пользователей. :type title: str Заголовок доски; :type listsCards: list Набор списков карточек для конкретной доски; :type users: list Список пользователей имеющий доступ к доске; """ __collection__ = "board" title = StringField(required=True) users = ListField(ReferenceField(UserDocument)) def check_permission(self, document_user: UserDocument): """Проверка прав доступа к текущему документу у определенного пользователя.""" return document_user._id in self.users
class CardDocument(BaseDocument): """Данные по карточке. :type message: str Текст сообщения карточки; :type position: int Порядковый номер позиции в списке карточек; """ __collection__ = "card" __lazy__ = False message = StringField(required=True) position = IntField(required=True) listCards = ReferenceField(ListCardsDocument) async def check_permission(self, document_user: UserDocument): """Проверка прав доступа к текущему документу у определенного пользователя.""" collection_list_cards = await ListCardsDocument().objects.filter({"_id": self.listCards._id}).find_all() if not collection_list_cards: return False document_list_cards = collection_list_cards[-1] return document_list_cards.check_permission(document_user)
class ListCardsDocument(BaseDocument): """Список с карточками. :type title: str Заголовок списка; :type cards: list Набор карточек актуальных для списка; :type position: int Порядковый номер позиции в ряде списков; """ __collection__ = "listCards" __lazy__ = False title = StringField(required=True) position = IntField(required=True) board = ReferenceField(BoardDocument) async def check_permission(self, document_user: UserDocument): """Проверка прав доступа к текущему документу у определенного пользователя.""" collection_board = await BoardDocument().objects.filter({"_id": self.board._id}).find_all() if not collection_board: return False document_board = collection_board[-1] return document_board.check_permission(document_user)
class User(BaseDocument): mobile = StringField(required=True) password = StringField(required=True) nickname = StringField(required=True) gender = IntField(required=True, default=1) description = StringField() avatar_url = StringField() school_id = ReferenceField(reference_document_type=School) like_count = IntField(required=True, default=0) follower_count = IntField(required=True, default=0) following_count = IntField(required=True, default=0) create_time = DateTimeField(required=True, auto_now_on_insert=True, auto_now_on_update=False) def to_dict(self): data = super(User, self).to_dict() del data['password'] return data
class Comment(Document): text = StringField(required=True) user = ReferenceField(User, required=True)
def test_create_reference_field(self): field = ReferenceField(db_field="test", reference_document_type=User) expect(field.db_field).to_equal("test") expect(field.reference_type).to_equal(User)
class Schedule(Document): days = ListField(EmbeddedDocumentField(DayTimetable())) user = ReferenceField(reference_document_type=User) group = ReferenceField('scheduler.model.Group') pass
class Group(Document): id = IntField() name = StringField(required=True) users = ListField(ReferenceField('User')) university = ReferenceField('University') timetable = EmbeddedDocumentField(Schedule())
def test_create_reference_field_with_string_class(self): field = ReferenceField( db_field="test", reference_document_type="tests.fields.test_reference_field.User") expect(field.reference_type).to_equal(User)
class DayTimetable(Document): name = StringField(required=True) lessons = ListField(EmbeddedDocumentField(Lesson())) schedule = ReferenceField('scheduler.model.Schedule')
def test_validate(self): field = ReferenceField(db_field="test", reference_document_type=User) expect(field.validate(None)).to_be_true() expect(field.validate("String")).to_be_false() expect(field.validate( ObjectId("123456789012123456789012"))).to_be_true()
class Comment(Document): user = ReferenceField(reference_document_type=User) lesson = ReferenceField('Lesson') #user_picture_url text = StringField(required=True) time = DateTimeField()
class Test(Document): __collection__ = "EmbeddedExistsTestParent" test = ReferenceField(Test2)
class Parent(Document): __collection__ = "EmbeddedIsNullTestParent" child = ReferenceField(Child)
class CommentNotLazy(Document): __lazy__ = False text = StringField(required=True) user = ReferenceField(User, required=True)
class ReferenceFieldClass(Document): __collection__ = "TestFindAllReferenceField" ref1 = ReferenceField(User) num = IntField(default=10)
class ReferenceFieldClass(Document): ref1 = ReferenceField(User) ref2 = ReferenceField(User) ref3 = ReferenceField(User)
def test_item_reference_type(self): class OtherType(Document): pass field = ListField(ReferenceField(OtherType)) expect(field.item_type).to_equal(OtherType)
class Base(Document): __collection__ = 'base' __lazy__ = False list_val = ListField(ReferenceField(reference_document_type=Ref))