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_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"
示例#9
0
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')
示例#10
0
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)
示例#11
0
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')
示例#12
0
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
示例#13
0
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)
示例#14
0
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)
示例#15
0
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
示例#16
0
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)
示例#18
0
class Schedule(Document):
    days = ListField(EmbeddedDocumentField(DayTimetable()))
    user = ReferenceField(reference_document_type=User)
    group = ReferenceField('scheduler.model.Group')
    pass
示例#19
0
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)
示例#21
0
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()
示例#23
0
class Comment(Document):
    user = ReferenceField(reference_document_type=User)
    lesson = ReferenceField('Lesson')
    #user_picture_url
    text = StringField(required=True)
    time = DateTimeField()
示例#24
0
 class Test(Document):
     __collection__ = "EmbeddedExistsTestParent"
     test = ReferenceField(Test2)
示例#25
0
 class Parent(Document):
     __collection__ = "EmbeddedIsNullTestParent"
     child = ReferenceField(Child)
示例#26
0
class CommentNotLazy(Document):
    __lazy__ = False

    text = StringField(required=True)
    user = ReferenceField(User, required=True)
示例#27
0
 class ReferenceFieldClass(Document):
     __collection__ = "TestFindAllReferenceField"
     ref1 = ReferenceField(User)
     num = IntField(default=10)
示例#28
0
 class ReferenceFieldClass(Document):
     ref1 = ReferenceField(User)
     ref2 = ReferenceField(User)
     ref3 = ReferenceField(User)
示例#29
0
    def test_item_reference_type(self):
        class OtherType(Document):
            pass

        field = ListField(ReferenceField(OtherType))
        expect(field.item_type).to_equal(OtherType)
示例#30
0
 class Base(Document):
     __collection__ = 'base'
     __lazy__ = False
     list_val = ListField(ReferenceField(reference_document_type=Ref))