class MenloCourse(me.Document): '''MenloCourse objects are sourced from another website As such, they only have professor reviews. The course review EmbeddedDocument will always be the default CourseReview ''' meta = { 'indexes': [ 'course_id', 'professor_id', ], } # id = me.ObjectIdField(primary_key=True) course_id = me.StringField(required=True) professor_id = me.StringField() course_review = me.EmbeddedDocumentField(review.CourseReview) professor_review = me.EmbeddedDocumentField(review.ProfessorReview) @classmethod def get_publicly_visible(cls, min_num_ucs=0, num_days=None): """Filter out stale MenloCourses that we don't want to display.""" return util.publicly_visible_ratings_and_reviews_filter( cls.objects, get_user_course_modified_date, min_num_ucs, num_days)
class ComplexExclusionModel(CheckObj, Dictable, gj.Document): emb_docs_ex_to_json = db.ListField( db.EmbeddedDocumentField(EmbDoc), exclude_to_json=True) emb_docs_ex_from_json = db.ListField( db.EmbeddedDocumentField(EmbDoc), exclude_from_json=True) emb_docs_ex_json = db.ListField(db.EmbeddedDocumentField(EmbDoc), exclude_json=True) emb_doc = db.EmbeddedDocumentField(EmbDoc) @classmethod def generate_test_data(cls, prefix="", suffix=""): return cls( emb_docs_ex_to_json=[ EmbDoc.generate_test_data(prefix=( "{} (emb_docs_ex_to_json) ").format(prefix), suffix=("{} {}").format( suffix, counter)) for counter in range(3) ], emb_docs_ex_from_json=[ EmbDoc.generate_test_data(prefix=( "{} (emb_docs_ex_from_json) ").format(prefix), suffix=("{} {}").format( suffix, counter)) for counter in range(3) ], emb_docs_ex_json=[ EmbDoc.generate_test_data( prefix=("{} (emb_docs_ex_json) ").format(prefix), suffix=("{} {}").format(suffix, counter)) for counter in range(3) ], emb_doc=EmbDoc.generate_test_data( prefix=("{} (emb_dos) ").format(prefix), suffix=("{}").format(suffix)))
class Object(me.Document): '''In-world objects.''' name = me.StringField(default="") resource = me.StringField(default="") loc = me.EmbeddedDocumentField( IntVector) # FIXME: Make this a floatvector. rot = me.EmbeddedDocumentField(FloatVector) scale = me.EmbeddedDocumentField(FloatVector) vel = me.EmbeddedDocumentField(FloatVector) states = me.ListField(me.StringField()) physical = me.BooleanField(default=True) last_modified = me.DateTimeField(default=datetime.datetime.now) meta = { 'indexes': ['last_modified', 'loc.x', 'loc.y', 'loc.z', 'states', 'physical'], 'allow_inheritance': True, } def set_modified(self, date_time=None): if date_time is None: date_time = datetime.datetime.now() self.last_modified = date_time self.save()
class EmbeddedInteraccion(mongoengine.EmbeddedDocument): idInteraccion = mongoengine.IntField(null=False) user = mongoengine.EmbeddedDocumentField(EmbeddedUser, default=EmbeddedUser()) producto = mongoengine.EmbeddedDocumentField(EmbeddedProducto, default=EmbeddedProducto()) fecha = mongoengine.DateTimeField(default=timezone.now)
class Role(mongoengine.Document): """角色的信息 """ openid = mongoengine.StringField(verbose_name="openID") nickname = mongoengine.StringField(verbose_name="用户昵称",default="") sex = mongoengine.IntField(verbose_name="性别,1m2f0u",default=1) profession = mongoengine.IntField(verbose_name="职业",default=0) level = mongoengine.IntField(verbose_name="等级",default=1) coin = mongoengine.IntField(verbose_name="铜钱",default=0) energy = mongoengine.IntField(verbose_name="体力",default=0) gold = mongoengine.IntField(verbose_name="元宝",default=0) exp = mongoengine.IntField(verbose_name="经验",default=0) energy_add_time = mongoengine.DateTimeField(verbose_name="上一次增加体力时间") energy_buytime = mongoengine.IntField(verbose_name="体力购买次数",default=1) plot = mongoengine.StringField(verbose_name="当前剧情",default="") scene = mongoengine.StringField(verbose_name="当前场景",default="") fam = mongoengine.StringField(verbose_name="当前副本",default="") famnode = mongoengine.StringField(verbose_name="当前节点",default="") clearance = mongoengine.ListField(mongoengine.EmbeddedDocumentField(Fam),verbose_name="副本记录") message = mongoengine.ListField(mongoengine.StringField(),verbose_name="消息记录") partners = mongoengine.ListField(mongoengine.IntField(),verbose_name="角色伙伴") formation = mongoengine.EmbeddedDocumentField(Formation,verbose_name="角色阵法") sign = mongoengine.EmbeddedDocumentField(Sign,verbose_name="签到") friendships = mongoengine.ListField(mongoengine.EmbeddedDocumentField(Friendship),verbose_name="伙伴友情") materials = mongoengine.ListField(mongoengine.EmbeddedDocumentField(Material),verbose_name="材料") subscribe_time = mongoengine.DateTimeField(verbose_name="入世时间") next_command = mongoengine.StringField(verbose_name="必要请求") prev_command = mongoengine.StringField(verbose_name="前一个状态") prev_objectid = mongoengine.IntField(verbose_name="操作对象的序号") prev_objectid2 = mongoengine.IntField(verbose_name="操作对象的序号")
class Topic(me.Document): meta = {'collection': 'topics'} title = me.StringField(required=True) description = me.StringField(required=True) created_date = me.DateTimeField(required=True, default=datetime.datetime.now) updated_date = me.DateTimeField(required=True, default=datetime.datetime.now) published_date = me.DateTimeField() status = me.StringField(required=True, default='draft') """ status: draft, publish, delete """ ip_address = me.StringField(max_length=100, required=True, default='0.0.0.0') author = me.ReferenceField("User", dbref=True, required=True) comments = me.ListField(me.EmbeddedDocumentField(Comment)) tags = me.ListField(me.StringField(required=True), required=True) page = me.BooleanField(default=False, required=True) comments_disabled = me.BooleanField(default=False, required=True) histories = me.ListField(me.EmbeddedDocumentField(TopicHistory))
class Contrato(mongoengine.Document): fechaCreacion = mongoengine.DateTimeField(default=datetime.now) activo = mongoengine.BooleanField(default=True) tipo = mongoengine.StringField() clienteId = mongoengine.StringField() productoId = mongoengine.StringField() correoVendedor = mongoengine.StringField() diasValidez = mongoengine.IntField() observaciones = mongoengine.StringField() pagosProgramados = mongoengine.ListField(mongoengine.EmbeddedDocumentField(PagoProgramado)) pagosReales = mongoengine.ListField(mongoengine.EmbeddedDocumentField(PagoReal)) def to_dict(self): return mongo_utils.mongo_to_dict_1(self) @mongoengine.queryset_manager def objects(doc_cls, queryset): return queryset.order_by('-fechaCreacion') meta = { 'db_alias': 'core', 'collection': 'contrato' }
class Estabelecimento(db.Document): nome = db.StringField(max_length=50, required=True) telefone = db.StringField(max_length=20, required=True, unique=True) perfil_origem = StringEnumField(PerfilOrigemEnum) perfil_movimento = StringEnumField(PerfilMovimentacaoEnum) perfil_tipo = StringEnumField(PerfilTipoEnum) latitude = db.IntField(max_length=50, required=True, unique=True) longitude = db.IntField(max_length=50, required=True, unique=True) endereco = db.StringField(max_length=50, required=True) cnpj = db.StringField(max_length=50, required=True, unique=True) consumidores_visitados = db.IntField() google_rating = db.IntField() google_rating_total = db.IntField() regra_fumante = StringEnumField(RegraFumanteEnum) level_preco = db.IntField() qrcode_token = db.StringField(max_length=30, unique=True) vendas = db.IntField() create_at = db.DateTimeField() modified_at = db.DateTimeField(default=datetime.now) lista_consumidores = db.ListField(db.ReferenceField("Consumidor")) itens_vendidos = db.ListField(db.ReferenceField("Pagamento")) cupom = db.ListField(db.EmbeddedDocumentField("Cupom")) estoque = db.ListField(db.EmbeddedDocumentField("Estoque")) meta = {'ordering': ['create_at'], 'collection': 'estabelecimento'}
class ReconConfModel(mongo.EmbeddedDocument): # { # "do":true, # "method":["subdomain", "dns", "path", "port", "crawl_target"], # "subdomain":{ # "method":["search", "bruteforce"], # "search":{ # "method":["name", "url"], # "engine":["bing", "google"] # }, # }, # "path":{ # "method":["bruteforce"], # }, # "port":{ # "method":["syn"], # "scanport":["80-82", 8000, "100-103"] # }, # "crawl_target":{ # "medthod":["path", "subdomain", "image", "script_src", "script_inline"] # } # } do = mongo.BooleanField(default=True, required=True) method = mongo.ListField(mongo.StringField(), default=["subdomain", "dns"]) subdomain = mongo.EmbeddedDocumentField(ReconConf_SubdomainModel, default=ReconConf_SubdomainModel()) path = mongo.EmbeddedDocumentField(ReconConf_PathModel, default=ReconConf_PathModel()) port = mongo.EmbeddedDocumentField(ReconConf_PortModel, default=ReconConf_PortModel()) crawl_target = mongo.EmbeddedDocumentField( ReconConf_CrawlTargetModel, default=ReconConf_CrawlTargetModel())
class Event(me.Document): meta = {'collection': 'events'} topic = me.ReferenceField(Topic, required=True, dbref=True) status = me.StringField(required=True, default='draft') """ status: draft, publish, delete """ started_date = me.DateTimeField(required=True, default=datetime.datetime.now) ended_date = me.DateTimeField(required=True, default=datetime.datetime.now) venue = me.StringField() all_day = me.BooleanField(required=True, default=False) repeat = me.EmbeddedDocumentField(RepeatableEvent) ip_address = me.StringField(max_length=100, required=True, default='0.0.0.0') author = me.ReferenceField("User", dbref=True, required=True) tags = me.ListField(me.StringField(required=True), required=True) event_type = me.StringField(required=True, default='department', choices=EVENT_TYPES) conference = me.EmbeddedDocumentField(ConferenceEvent) def is_repeatable(self): repeat = False if self.repeat is not None: repeat = True return repeat
class Reporter(mongoengine.Document): meta = {'collection': 'test_reporter'} id = mongoengine.StringField(primary_key=True) first_name = mongoengine.StringField(required=True) last_name = mongoengine.StringField(required=True) email = mongoengine.EmailField() awards = mongoengine.ListField(mongoengine.StringField()) articles = mongoengine.ListField(mongoengine.ReferenceField(Article)) embedded_articles = mongoengine.ListField( mongoengine.EmbeddedDocumentField(EmbeddedArticle)) embedded_list_articles = mongoengine.EmbeddedDocumentListField( EmbeddedArticle) id = mongoengine.StringField(primary_key=True) first_name = mongoengine.StringField(required=True) last_name = mongoengine.StringField(required=True) email = mongoengine.EmailField() awards = mongoengine.ListField(mongoengine.StringField()) articles = mongoengine.ListField(mongoengine.ReferenceField(Article)) embedded_articles = mongoengine.ListField( mongoengine.EmbeddedDocumentField(EmbeddedArticle)) embedded_list_articles = mongoengine.EmbeddedDocumentListField( EmbeddedArticle) generic_reference = mongoengine.GenericReferenceField(choices=[ Article, Editor, ])
class Equipment(mongoengine.Document): """装备信息 """ openid = mongoengine.StringField(verbose_name="openID") weapon = mongoengine.EmbeddedDocumentField(EquipAttr, verbose_name="武器") jacket = mongoengine.EmbeddedDocumentField(EquipAttr, verbose_name="上衣") belt = mongoengine.EmbeddedDocumentField(EquipAttr, verbose_name="腰带")
class RideOffer(mdb.Document): ''' RideOffer models an offer for a ride from a Driver, looking for Passengers. ''' driver = mdb.ReferenceField(UserProfile) passengers = mdb.ListField(mdb.ReferenceField('UserProfile')) start = mdb.EmbeddedDocumentField(Location) end = mdb.EmbeddedDocumentField(Location) message = mdb.StringField() date = mdb.DateTimeField() fuzziness = mdb.StringField( default="1-hours" ) # N.B.: This is unused. Could be a feature in the future repeat = mdb.StringField() # Holds those who are asking for rides (but have not yet been accepted/declined) askers = mdb.ListField( mdb.ReferenceField('RideRequest') ) # Whether or not this trip has taken place already completed = mdb.BooleanField(default=False) # Stores the polygon over the driver's route from start --> end polygon = mdb.ListField(mdb.GeoPointField()) meta = { "indexes" : ["*start.position", "*end.position"] } def time( self ): return self.date.strftime("%m/%d/%Y at %I:%M %p") def __unicode__( self ): return "from {} to {} on {}".format( self.start, self.end, self.time() )
class RideRequest(mdb.Document): ''' RideRequest models a request for a ride from a Passenger, looking for a Driver. ''' passenger = mdb.ReferenceField('UserProfile') start = mdb.EmbeddedDocumentField( Location ) end = mdb.EmbeddedDocumentField( Location ) message = mdb.StringField() date = mdb.DateTimeField() # Holds those who are proposing rides (but have not yet been accepted/declined) askers = mdb.ListField( mdb.ReferenceField('RideOffer') ) # Possible values for fuzziness: # 1. +/- an hour (default) "1-hours" # 2. +/- 2 hours "2-hours" # 3. +/- 3 hours "3-hours" # 4. +/- 4 hours ... # 5. +/- 5 hours # 6. +/- a day "day" # 7. +/- a week "week" # 8. anytime "anytime" fuzziness = mdb.StringField( default="1-hours" ) # N.B.: This is unused. Could be a feature in the future repeat = mdb.StringField() ride_offer = mdb.ReferenceField('RideOffer') meta = { "indexes" : ["*start.position", "*end.position"] } def time( self ): return self.date.strftime("%m/%d/%Y at %I:%M %p") def __unicode__( self ): return "from {} to {} on {}".format( self.start, self.end, self.time() )
class ServicePlansDoc(me.Document): name = me.StringField() description = me.StringField() codeMangagement = me.EmbeddedDocumentField(CodeManagement) collabration = me.EmbeddedDocumentField(Collabration) priceTag = me.EmbeddedDocumentField(PriceTag) paymentPlan = me.EmbeddedDocumentField(PaymentPlan) reachoutPlan = me.EmbeddedDocumentField(ReachoutPlan)
class Source(mongoengine.Document): source_name = mongoengine.StringField() source_uri = mongoengine.EmbeddedDocumentField(SourceUri) country_available = mongoengine.ListField() conditions = mongoengine.EmbeddedDocumentField(Conditions) update_at = mongoengine.DateTimeField(default=datetime.datetime.now) meta = {'db_alias': 'core', 'collection': 'sources'}
class PhotoAlbum(me.Document): meta = {'collection': 'photo_albums'} name = me.StringField(required=True) description = me.StringField(default='') event_date = me.DateTimeField() shared = me.BooleanField(required=True, default=False) photos = me.ListField(me.EmbeddedDocumentField(Photo)) status = me.StringField(required=True, default='draft') """ status: draft, publish, delete """ created_date = me.DateTimeField(required=True, default=datetime.datetime.now) published_date = me.DateTimeField(required=True, default=datetime.datetime.now) updated_date = me.DateTimeField(required=True, default=datetime.datetime.now) comments = me.ListField(me.EmbeddedDocumentField(forums.Comment)) user = me.ReferenceField("User", dbref=True, required=True) def get_photo(self, photo_id): for photo in self.photos: image = photo.image if photo.image.get( ) is not None else photo.vimage if image.filename == photo_id: return photo if str(photo.id) == photo_id: return photo def get_photo_index(self, photo_id): this_photo = None for i in range(0, len(self.photos)): photo = self.photos[i] image = photo.image if photo.image.get( ) is not None else photo.vimage try: if image.filename == photo_id: this_photo = photo except: pass if str(photo.id) == photo_id: this_photo = photo if this_photo is not None: previous_ = None next_ = None if i - 1 >= 0: previous_ = self.photos[i - 1] if i + 1 < len(self.photos): next_ = self.photos[i + 1] return this_photo, previous_, next_
class ComputeNode(me.Document): meta = {'collection': 'compute_nodes'} name = me.StringField(max_length=100, required=True) ip = me.StringField(max_length=100, required=True, index=True) mac = me.StringField(max_length=100, required=True, index=True) machine_specification = me.EmbeddedDocumentField(MachineSpecification) resource_records = me.ListField(me.EmbeddedDocumentField(ResourceUsage)) created_date = me.DateTimeField(required=True, default=datetime.datetime.now) updated_date = me.DateTimeField(required=True, default=datetime.datetime.now) updated_resource_date = me.DateTimeField(required=True, default=datetime.datetime.now) extra = me.DictField() def is_online(self): delta = datetime.timedelta(minutes=1) now = datetime.datetime.now() if self.updated_resource_date > now - delta: resource = self.get_current_resources() if resource is None: return False if resource.cpu.used > 0 or resource.memory.used > 0: return True return False def get_current_resources(self): if len(self.resource_records) == 0: return None return self.resource_records[-1] def push_resource(self, resource_usage): while len(self.resource_records) > MAX_RECORD: self.resource_records.pop(0) self.resource_records.append(resource_usage) def push_responsed_date(self, added_date=None): if 'responsed_date' not in self.extra: self.extra['responsed_date'] = list() while (len(self.extra['responsed_date']) > MAX_RECORD): self.extra['responsed_date'].pop(0) if added_date is None: added_date = datetime.datetime.now() self.extra['responsed_date'].append(added_date)
class ProjectDoc(me.Document): createdDate = me.DateField() updatedDate = me.DateField() status = me.IntField() headline = me.StringField() payStatus = me.EmbeddedDocumentField(PayStatus) trackStatus = me.EmbeddedDocumentField(TrackStatus) contract = me.EmbeddedDocumentField(Contract) workSite = me.EmbeddedDocumentField(WorkSite)
class RequestPostDoc(me.Document): posterId = me.StringField() status = me.IntField() # 0 -- draft 1 -- published createdDate = me.DateTimeField() updatedDate = me.DateTimeField() statueUpdatedDate = me.DateTimeField() description = me.EmbeddedDocumentField(RequestDescription) notes = me.EmbeddedDocumentField(RequestNotes) quotes = me.ListField(StringField())
class Project(mongo.Document): """ A class used to represent an EDA project """ name = mongo.StringField(required=True, primary_key=True) description = mongo.StringField(max_length=100) technology = mongo.EmbeddedDocumentField(Technology) design = mongo.EmbeddedDocumentField(Design) flows = mongo.ListField(mongo.EmbeddedDocumentField(Flow))
class TraceDB(stormbase.StormFoundationDB): """ Trace is a collection of all TriggerInstances, Rules and ActionExecutions that represent an activity which begins with the introduction of a TriggerInstance or request of an ActionExecution and ends with the completion of an ActionExecution. Given the closed feedback look sort of nature of StackStorm this implies a Trace can comprise of multiple TriggerInstances, Rules and ActionExecutions. :param trace_tag: A user specified reference to the trace. :param trigger_instances: TriggerInstances associated with this trace. :param rules: Rules associated with this trace. :param action_executions: ActionExecutions associated with this trace. """ trace_tag = me.StringField( required=True, help_text='A user specified reference to the trace.') trigger_instances = me.ListField( field=me.EmbeddedDocumentField(TraceComponentDB), required=False, help_text='Associated TriggerInstances.') rules = me.ListField(field=me.EmbeddedDocumentField(TraceComponentDB), required=False, help_text='Associated Rules.') action_executions = me.ListField( field=me.EmbeddedDocumentField(TraceComponentDB), required=False, help_text='Associated ActionExecutions.') start_timestamp = ComplexDateTimeField( default=date_utils.get_datetime_utc_now, help_text='The timestamp when the Trace was created.') meta = { 'indexes': [ { 'fields': ['trace_tag'] }, { 'fields': ['start_timestamp'] }, { 'fields': ['action_executions.object_id'] }, { 'fields': ['trigger_instances.object_id'] }, { 'fields': ['rules.object_id'] }, { 'fields': ['-start_timestamp', 'trace_tag'] }, ] }
class Pokemon(me.Document): base_experience = me.IntField(required=True) height = me.IntField(required=True) id = me.IntField(me_field='id', primary_key=True) name = me.StringField(unique=True, required=True) sprites = me.EmbeddedDocumentField(Sprite) weight = me.IntField(required=True) encounters = me.ListField(me.EmbeddedDocumentField(Encounter)) meta = {"db_alias": "pokemon_api", 'collection': 'pokemon'}
class Streamer(mongodb.Document): name = mongodb.StringField(required=True) channel_id = mongodb.StringField(required=True, unique=True) first_bonus = mongodb.IntField(default=1) points = mongodb.IntField(default=1) commands = mongodb.ListField(mongodb.EmbeddedDocumentField(Command)) participants = mongodb.ListField(mongodb.EmbeddedDocumentField(Participant)) whitelist = mongodb.ListField(mongodb.EmbeddedDocumentField(WhitelistUser)) blacklist = mongodb.ListField(mongodb.EmbeddedDocumentField(BlacklistUser)) sessions = mongodb.ListField(mongodb.EmbeddedDocumentField(Session))
class User(BaseDocument): role = mongoengine.StringField(choices=USER_ROLE, default='user') username = mongoengine.StringField(unique=True) password = mongoengine.StringField(min_length=8, validation=validate_password) data = mongoengine.EmbeddedDocumentField(UserData) settings = mongoengine.EmbeddedDocumentField(UserSettings) parameters = mongoengine.EmbeddedDocumentField(UserParameters) def save(self, new_password_check: bool = False, *args, **kwargs): errors = validate_new_password(self, new_password_check) super().save(errors=errors) @staticmethod def get_unique_fields(): return ['username', 'data__phone', 'data__email'] # Generate hash from password by encryption using sha256 @staticmethod def generate_hash(password): return sha256.hash(password) # Verify hash and password @staticmethod def verify_hash(password, hash_): return sha256.verify(password, hash_) @classmethod def generate_random_user(cls): random_name = requests.get( "https://randomuser.me/api/?nat=gb&inc=name") login = f'user{random.randint(100000, 999999)}' user_data = UserData( phone=f'{random.randint(100000000, 999999999)}', fname=json.loads(random_name.text)['results'][0]['name']['first'], lname=json.loads(random_name.text)['results'][0]['name']['last'], email=f'{login}@email.com', age=f'{random.randint(20, 70)}', ) user_settings = UserSettings(newsletter=False) user_parameters = UserParameters( email_verified=True, email_verification_string='emailverificationstring', ) user = cls( role='user', username=login, password='******', data=user_data, settings=user_settings, parameters=user_parameters, ) return user
class RuleDB(stormbase.StormFoundationDB, stormbase.TagsMixin, stormbase.ContentPackResourceMixin, stormbase.UIDFieldMixin): """Specifies the action to invoke on the occurrence of a Trigger. It also includes the transformation to perform to match the impedance between the payload of a TriggerInstance and input of a action. Attribute: trigger: Trigger that trips this rule. criteria: action: Action to execute when the rule is tripped. status: enabled or disabled. If disabled occurrence of the trigger does not lead to execution of a action and vice-versa. """ RESOURCE_TYPE = ResourceType.RULE UID_FIELDS = ['pack', 'name'] name = me.StringField(required=True) ref = me.StringField(required=True) description = me.StringField() pack = me.StringField(required=False, help_text='Name of the content pack.', unique_with='name') type = me.EmbeddedDocumentField(RuleTypeSpecDB, default=RuleTypeSpecDB()) trigger = me.StringField() criteria = stormbase.EscapedDictField() action = me.EmbeddedDocumentField(ActionExecutionSpecDB) context = me.DictField(default={}, help_text='Contextual info on the rule') enabled = me.BooleanField( required=True, default=True, help_text=u'Flag indicating whether the rule is enabled.') meta = { 'indexes': [ { 'fields': ['enabled'] }, { 'fields': ['action.ref'] }, { 'fields': ['trigger'] }, { 'fields': ['context.user'] }, ] + (stormbase.ContentPackResourceMixin.get_indexes() + stormbase.TagsMixin.get_indexes() + stormbase.UIDFieldMixin.get_indexes()) } def __init__(self, *args, **values): super(RuleDB, self).__init__(*args, **values) self.ref = self.get_reference().ref self.uid = self.get_uid()
class PortfolioItem(me.EmbeddedDocument): _id = me.ObjectIdField(required=True, default=ObjectId) item_type = me.StringField(choices=const.item_types) title = me.StringField() description = me.StringField() file = me.EmbeddedDocumentField(File) # The given portfolio item types should only have 1 present, and the type will be loaded based on the item_type repo = me.EmbeddedDocumentField(Repo) image = me.EmbeddedDocumentField(File) youtube = me.URLField()
class User(gj.Document): meta = {'queryset_class': fm.BaseQuerySet} uid = db.StringField() nick_name = db.StringField() sex = db.StringField() birthed_at = db.LongField() height = db.IntField() body_id = db.IntField() occupation = db.StringField() education = db.StringField() religion_id = db.IntField() drink_id = db.IntField() smoking_id = db.IntField() blood_id = db.IntField() r_token = db.StringField() location = db.PointField() introduction = db.StringField() joined_at = db.LongField() last_login_at = db.LongField() job = db.StringField() area = db.StringField() phone = db.StringField() user_images = db.SortedListField(db.EmbeddedDocumentField(UserImage), ordering="index") user_images_temp = db.SortedListField(db.EmbeddedDocumentField(UserImage), ordering="index") charm_ids = db.ListField(db.IntField()) ideal_type_ids = db.ListField(db.IntField()) interest_ids = db.ListField(db.IntField()) available = db.BooleanField(default=False) status = db.IntField(default=0) # -10, 0, 10 @property def posts(self): posts = Post.objects(author=self).order_by("-created_at").all() for post in posts: post.favorite_users = [] post.comments.sort(key=lambda x: x.created_at, reverse=True) return posts def list_requests_like_me(self, response=None): return Request.objects(user_to=self, response=response).all() def list_requests_i_like(self, response=None): return Request.objects(user_from=self, response=response).all() def list_chat_rooms(self): return ChatRoom.objects(members=self).all() def list_users_rated_me_high(self): star_ratings = StarRating.objects(user_to=self, score__gte=4).all() return [star_rating.user_from for star_rating in star_ratings]
class UserBusinessModel(me.Document): # Owner user = me.ReferenceField(Users) business_type_choices = ['laundries', 'self_machines'] business_type = me.StringField(choices=business_type_choices) # laundries: Branches information. branches = me.ListField(me.EmbeddedDocumentField(LaundryBranchesEmbedded)) # self_machines: Washing machine information self_machines = me.ListField( me.EmbeddedDocumentField(SelfMachinesEmbedded))
class Driver(me.Document): name = me.StringField(required=True, max_length=20) surname = me.StringField(required=True) patronymic = me.StringField(required=False, max_length=20) phone = me.StringField(required=True, max_length=20, unique=True) status = me.EmbeddedDocumentField(DriverStatus) tg = me.EmbeddedDocumentField(DriverTG) lunch_count = me.IntField(default=0, min_value=0, max_value=5) last_lunch_request_time = me.DateTimeField() def __str__(self): return f'{self.name} {self.surname}' def add_tg_info(self, tg_name: str, tg_id: int): self.tg = DriverTG(name=tg_name, id=tg_id) self.save() @property def tg_id(self): return self.tg.id if self.tg else None @property def tg_name(self): return self.tg.name if self.tg else None @property def busy(self): return self.status.value.lower() in ("занят", "busy") @classmethod def from_driver_info(cls, driver_info: dict) -> "Driver": result = cls.objects.filter( **{k: v for k, v in driver_info.items() if k != "status"}) if result: result = result[0] status = driver_info["status"] result.status = DriverStatus( **status) if status else DriverStatus() return result result = cls(**driver_info) return result def to_dict(self): return { "name": self.name, "surname": self.surname, "phone": self.phone, "patronymic": self.patronymic, "tg_id": self.tg.id if self.tg else None, "tg_name": self.tg.name if self.tg else None, }