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)
class EventStatus(BaseDocument): class Meta: fields_map = dict() verbose_name = 'eventStatus' code = StringField(required=True, max_length=16) name = StringField(required=True, max_length=64)
class RaceStatisticInfo(BaseModel): race_cid = StringField(required=True) # 竞赛活动cid信息 daily_code = StringField(required=True) # 日期 total_member_count = IntegerField(default=0) # 总会员人数 total_answer_times = IntegerField(default=0) # 总答题数 total_red_packet_count = IntegerField(default=0) # 总红包数 total_red_packet_amount = FloatField(default=0.0) # 总红包金额
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' id = UUIDField() name = StringField() email = EmailField(required=True, unique=True) password = StringField(required=True) date_added = DateTimeField(required=True, auto_now_on_insert=True)
class User(Document): email = StringField(required=True) first_name = StringField(max_length=50) last_name = StringField(max_length=50) is_admin = BooleanField(default=True) def __repr__(self): return "%s %s <%s>" % (self.first_name, self.last_name, self.email)
class User(Document): __collection__ = "users" # optional. if no collection is specified, class name is used. first_name = StringField(required=True) last_name = StringField(required=True) @property def full_name(self): return "%s, %s" % (self.last_name, self.first_name)
class FakeUserDocument(Document): __collection__ = "fakeUser" fake_id = StringField() info = EmbeddedDocumentField(FakeUserInfoDocument) critic = BaseField() cluster = StringField() def get_user_name(self) -> str: return self.info.name
class Event(BaseDocument): name = StringField(required=True, max_length=255) status = StringField(required=True, max_length=16) level = StringField(required=True, max_length=16) started_at = DateTimeField(required=True) ended_at = DateTimeField(required=True) # created_by = ReferenceField(reference_document_type=User) created_at = DateTimeField(required=True, auto_now_on_insert=True) participants = ListField(JsonField(required=True))
class Alteration(BaseDocument): title = StringField(max_length=64) product = StringField(max_length=32) execute_at = DateTimeField() reason = StringField(max_length=128) effect = StringField(max_length=128) sent_at = DateTimeField() sent_by = ListField(StringField()) sent_to = ListField(JsonField())
class UserDocument(BaseDocument): """Пользовательская информация. :type name: str Имя для идентификации пользователя; :type password: str Пароль для авторизации пользователя; """ __collection__ = "user" username = StringField(required=True, unique=True) password = StringField(required=True)
class User(BaseDocument): email = EmailField(required=False) mobile = MobileField(required=False) nickname = StringField(required=True, max_length=32) auth_uid = StringField(required=True) is_active = BooleanField(default=True) @classmethod def get_by_natural_key(cls, auth_uid): return cls.object(auth_uid=auth_uid)
class User(Document): email = StringField(required=True) first_name = StringField(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) def __repr__(self): return "%s %s <%s>" % (self.first_name, self.last_name, self.email)
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): __collection__ = "AggregationUser" email = StringField(required=True) first_name = StringField(max_length=50, default=lambda: "Bernardo") last_name = StringField(max_length=50, default="Heynemann") is_admin = BooleanField(default=True) updated_at = DateTimeField(required=True, auto_now_on_insert=True, auto_now_on_update=True) number_of_documents = IntField() list_items = ListField(IntField())
class EmailQueue(BaseDocument): message = StringField(required=True) to = StringField(required=True) sended = BooleanField(default=False) @staticmethod def add(username, to, subject, msg, type="text"): message = MIMEMultipart('alternative') message['From'] = username message['To'] = to message['Subject'] = subject if type == "text": msg = MIMEText(msg, 'plain', 'utf-8') elif type == "html": msg = MIMEText(msg, 'html', 'utf-8') message.attach(msg) message = message.as_string() EmailQueue(message=message, to=to).save() @staticmethod def send(application): emails = EmailQueue.objects(sended=False) for email in emails: email._send_mail(application) email.delete() def _send_mail(self, app): settings = app.settings.get('email', {}) host = settings.get("host") port = settings.get("port") username = settings.get("username") password = settings.get("password") smtpserver = smtplib.SMTP(host, port) smtpserver.ehlo() if settings.get('use_tls'): smtpserver.starttls() if password: smtpserver.login(username, password) smtpserver.sendmail(username, self.to, self.message) smtpserver.close()
def test_to_query(self): field = ListField(StringField()) field.from_son(["1", "2", "3"]) expect(field.to_query(["1", "2", "3"])).to_equal({ "$all": ["1", "2", "3"] }) expect(field.to_query("string")).to_equal("string")
class Message(BaseDocument): # 消息内容 title = StringField(max_length=64) content = StringField(max_length=500) comment = StringField(max_length=200) # 发送信息 sent_from = JsonField() sent_at = DateTimeField() sent_by = ListField(StringField()) sent_to = ListField(JsonField()) next_sent_at = DateTimeField() # 管理信息 created_at = DateTimeField(auto_now_on_insert=True) # created_by = ReferenceField() updated_at = DateTimeField(auto_now_on_insert=True, auto_now_on_update=True) status = StringField(max_length=32, default=MessageStatusEnum('未发送').name) configure = JsonField() log = ListField(JsonField()) is_active = BooleanField(default=True) @classmethod def validate_values(cls, dic, allow_cover=True): validated = super(Message, cls).validate_values(dic, allow_cover) schedule = validated['configure'].get('schedule', DefaultMessageSchedule) customized = validated['configure'].get('customized', []) if schedule == 'once': pass elif schedule == 'customized' and customized: sent_at = validated.get('sent_at') validated['next_sent_at'] = get_next_day(sent_at, customized, schedule) else: sent_at = validated.get('sent_at') validated['next_sent_at'] = get_next_day(sent_at, 1, schedule) return validated @staticmethod async def ir_cron(): with open('/tmp/wodeshijie', 'a+') as f: for m in await Message.objects.find_all(): f.write('%s \n' % m.title) return True
class ThirdPartyPlatform(BaseDocument): """ authentication: [{ 'type': 'text', 'label': '账户', 'name': 'account', 'required': true }, { 'type': text, 'label':'密码', 'name': 'password', 'required': true }] """ name = StringField(max_length=32) code = StringField(max_length=32) authentication = ListField(JsonField())
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 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 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 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 Account(BaseDocument): name = StringField(max_length=64) platform = StringField(max_length=32) account = StringField(max_length=32) password = StringField(max_length=128) access = JsonField() url = StringField(max_length=65535) parent = ReferenceField(reference_document_type='models.account.Account') adaptor = StringField(max_length=32) @property def children(self): return self.objects.find_all(parent=self._id)
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)
def test_validate_enforces_strings(self): field = StringField(max_length=5) expect(field.validate(1)).to_be_false()
def test_can_create_query_operator(self): query = QueryOperator() expect(query).not_to_be_null() expect(query.get_value(StringField(), "some value")).to_equal("some value")
def test_validate_enforces_maxlength(self): field = StringField(max_length=5) expect(field.validate("-----")).to_be_true() expect(field.validate("-----" * 2)).to_be_false()
def test_is_empty(self): field = StringField() expect(field.is_empty(None)).to_be_true() expect(field.is_empty("")).to_be_true() expect(field.is_empty("123")).to_be_false()
class Comment(Document): title = StringField(required=True) text = StringField(required=True)
class Category(Document): __collection__ = 'categories' name = StringField(required=True) descr = StringField(required=True)
class EmbeddedDocument(Document): test = StringField(db_field="other", required=True) embedded2 = EmbeddedDocumentField(EmbeddedDocument2)