class Role(db.Document): name = db.StringField(max_length=50, unique=True) default = db.BooleanField(default=False, index=True) permissions = db.IntField(default=0) @staticmethod def insert_roles(): roles = { 'User': [Permission.FOLLOW, Permission.COMMENT, Permission.WRITE_RECIPES], 'Admin': [ Permission.FOLLOW, Permission.COMMENT, Permission.WRITE_RECIPES, Permission.MOD_COMMENT, Permission.ADMIN ], } for r in roles: role = Role.objects(name=r).first() if role is None: role = Role(name=r) role.set_permission(roles.get(r)) role.default = (role.name == 'User') role.save() def set_permission(self, perms): for p in perms: self.permissions += p def remove_permission(self, perms): for p in perms: self.permission -= p def is_permitted(self, p): return (self.permissions & p == p)
class Payment(db.Document): payer_id = db.ReferenceField(User, required=True) transaction_id = db.LongField(required=True, unique=True) amount = db.IntField(required=True, min_value=1, max_value=100000) currency = db.StringField(required=True) confirm = db.BooleanField(required=True) create_time = db.DateTimeField(default=datetime.datetime.utcnow())
class Cart(db.Document): user_id = db.IntField(required=True) products = db.ListField(db.EmbeddedDocumentField(Product)) meta = {'collection': 'products_in_cart', 'indexes': ['user_id']} @classmethod def add_document(cls, user_id, product_id, count): cart = Cart.objects(user_id=user_id).first() if cart is None: cart = cls(user_id=user_id) product = Product(product_id=product_id, count=count) if product in cart.products: index = cart.products.index(product) existing_product = cart.products[index] existing_product.count += product.count return cart products = [product] if len(cart.products) == 0: cart.products = products else: cart.products.extend(products) return cart
class Course(db.Document): modality_choice = ( ('Virtual', 'Virtual'), ('Presencial', 'Presencial'), ) state_choice = ( ('Terminado', 'Terminado'), ('Cursando', 'Cursando'), ('Por empezar', 'Por empezar'), ) type_choice = ( ('Docente', 'Docente'), ('Profesional', 'Profesional'), ) # Inscription Data courseName = db.StringField(required=True, unique=True) teacherRFC = db.StringField(required=True) modality = db.StringField(choices=modality_choice) dateStart = db.DateTimeField() dateEnd = db.DateTimeField() # 2019-04-08 13:21:08.456998 --> formato a ingresar para las fechas timetable = db.StringField() place = db.StringField() # Courses List Data teachersInCourse = db.ListField(db.StringField()) description = db.StringField() totalHours = db.IntField() courseTo = db.StringField() typeCourse = db.StringField(choices=type_choice) # Assistant List Data serial = db.StringField() # Status state = db.StringField(choices=state_choice, default='Por empezar')
class Job(db.DynamicDocument): task_information = db.StringField() model_file = db.StringField() model_meta_file = db.StringField() vocabulary = db.StringField() num_training_examples_in_model = db.IntField() checkpoints = db.DictField() current_hit_ids = db.ListField() status = db.StringField() control_strategy = db.StringField() experiment_id = db.StringField() mturk_connection = db.StringField() exceptions = db.ListField() control_data = db.StringField() logging_data = db.StringField()
class Account(db.Document): # 用户id account_id = db.IntField() # 手机号 username = db.StringField(unique=True, required=True) # 手机号 phone = db.StringField() # email email = db.StringField() # 区域 phone_area = db.StringField() # 密码, md5后的密码 password = db.StringField(max_length=50, min_length=8, required=True) # 用户名 nickname = db.StringField() # 登录类型 loginType = db.StringField() # 用户id user_id = db.StringField() # 会话 sessionid = db.StringField() # 创建时间 create_time = db.FloatField( default=time.mktime(datetime.now().timetuple())) # 更新时间 update_time = db.FloatField( default=time.mktime(datetime.now().timetuple())) # 账号列表,当前用户拥有的wky账号列表 devices = db.ListField(db.ReferenceField(Device)) income = db.EmbeddedDocumentField('Income') device_info = db.EmbeddedDocumentField('DeviceInfo') def __str__(self): pass
class Beacons(db.Document): beaconId = db.StringField(max_length=150, required=True, unique=True) beaconTag = db.StringField(max_length=15, required=True) beaconProject = db.StringField(max_length=50, required=True) beaconPlatform = db.StringField(max_length=25, required=True) beaconTimer = db.IntField(default=300) beaconData = db.DictField()
class FavorAction(object): """ """ # fields num_favors = db.IntField(default=0, min_value=0) favor_items = db.ListField(db.StringField()) def mark_favored(self, item): if item.id not in self.favor_items: item.update(inc__num_favors=1, push__favor_items=item.id) mark_favor.send(self, item_id=str(item.id)) def unmark_favored(self, item): if item.id in self.favor_items: item.update(dec__num_favors=1) self.update(dec__num_favors=1, pull__favor_items=item.id) def mark_like(self, post): post.update(inc__num_favors=1) self.update(inc__num_post_likes=1) def mark_unlike(self, post): post.update(dec__num_likes=1) self.update(dec__num_post_likes=1)
class UserBookListLove(db.Document): """ 用户书单点赞 """ book_list = db.ReferenceField(BookList) time = db.IntField(required=True, default=time_int) user = db.ReferenceField(User, required=True)
class User(db.DynamicDocument, db.EmbeddedDocument): user_id = db.IntField(required=True, unique=True) # user-friendly identificator email = db.StringField(required=True, unique=True) # user-friendly name username = db.StringField(required=True, unique=True) password_hash = db.StringField(required=True) registered_at = db.DateTimeField(default=datetime.now, required=True) # store of subscribed channels and last viewed time unread_channels = db.DictField() # __init__ can't be function in inherited class from db.Document # def __init__(self, email, username, password): # self.email = email # self.username = username # self.set_password(password) def __str__(self): return self.username def is_authenticated(self): return True def is_active(self): return True def is_anonymous(self): return False def get_id(self): return self.user_id def __repr__(self): return self.__str__()
class Admin(db.Document): """后台管理员模型""" name = db.StringField(max_length=60) password_hash = db.StringField(max_length=155) last_time = db.DateTimeField( default=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), required=True) login_number = db.IntField(default=0) def get_id(self): try: return self.name except AttributeError: raise NotImplementedError( 'No `username` attribute - override `get_id`') @property def password(self): raise AttributeError("password is not a readable attribute") @password.setter def password(self, password): self.password_hash = generate_password_hash(password) def verify_password(self, password): return check_password_hash(self.password_hash, password) def __unicode__(self): return self.name
class Device(db.Document): operator = db.StringField(max_length=64, required=True) imei = db.StringField(required=True) productId = db.StringField(required=True) productName = db.StringField() deviceName = db.StringField(max_length=128, required=True) deviceId = db.StringField() apiKey = db.StringField() autoObserver = db.BooleanField(default=0, required=True) createTime = db.DateTimeField(required=True) updateTime = db.DateTimeField() # 和心跳周期有关 company = db.StringField(max_length=255) location = db.StringField(max_length=255) state = db.StringField(default='offline') batteryValue = db.IntField(default=100) heartbeat_time = db.IntField(default=0)
class UploadHistory(db.Document): ''' 上传历史记录 ''' upload_date = db.DateTimeField(default=date.today) # date = db.DatetimeField(default=datetime.now) patent_count = db.IntField(default=0) cnki_count = db.IntField(default=0) publicnet_count = db.IntField(default=0) def to_dict(self): d = {} d['upload_date'] = self.upload_date.strptime(str, '%Y-%m-%d') d['patent_count'] = self.patent_count d['cnki_count'] = self.cnki_count d['publicnet_count'] = self.publicnet_count return d
class BillingStatus(db.EmbeddedDocument): status = db.StringField() time = db.IntField(required=True, default=time_int) content = db.StringField() backend_operator = db.BooleanField(default=False) def __unicode__(self): return u'{}|{}|{}'.format(self.status, self.content, self.time)
class UserBookListCommentLove(db.Document): """ 用户评论点赞表 """ user = db.ReferenceField(User, required=True) comment = db.ReferenceField(BookListComment, required=True) type = db.StringField(required=True, default=u'none') time = db.IntField(required=True, default=time_int)
class Todo(db.Document): content = db.StringField(required=True, max_length=20) time = db.DateTimeField(default=datetime.now()) status = db.IntField(default=0) def __str__(self): return 'content:{},time:{},status:{}'.format(self.content, self.time, self.status)
class Worker(db.Document): email = db.EmailField(required=True) first_name = db.StringField(max_length=50) last_name = db.StringField(max_length=50) dob = db.StringField() identification = db.StringField() phone = db.IntField() availibility = db.BooleanField()
class User(db.Document): login = db.StringField(required=True, max_length=50) password = db.StringField(required=True, max_length=255) email = db.EmailField(required=True, max_length=50) bitcoin_wallet = db.StringField(max_length=50) avatar = db.StringField() date = db.DateTimeField(default=datetime.now) balance = db.IntField(default=0)
class Zone(db.Document): siteName = db.StringField() siteID = db.StringField() rows = db.IntField() zoneID = db.StringField() firmwareVersion = db.StringField() position = db.EmbeddedDocumentField(Position) meta = {'collection': 'Zone'}
class Product(db.Document): seller_id = db.ReferenceField(User, required=True) name = db.StringField(required=True, max_length=30) price = db.IntField(required=True, min_value=1, max_value=100000) bid = db.EmbeddedDocumentField(Bid, null=True) discount = db.FloatField(required=True, min_value=0., max_value=1., default=1.) detail = db.StringField(required=True, max_length=40000) image = db.StringField(required=True) view = db.IntField(required=True, default=0) categories = db.ListField(db.ReferenceField(Category), default=list) bidding = db.BooleanField(requried=True) status = db.IntField(requried=True, default=0) create_time = db.DateTimeField(default=datetime.datetime.utcnow() + datetime.timedelta(hours=8))
class Routine(db.Document): """ 考虑将每天拆为5块,分别对应课表早上两节课,下午两节课和晚上一节课, 那么一周的事件可以用长度为固定35的表来表示, 所以signtime设计为0~34\n signtime:\n 为0~34的整数,表示值班时间段,只在时间段内允许签到\n shift:\n 自主换班时间段,默认和signtime相同,也允许在这个段签到,签完重置为signtime\n """ user = db.ReferenceField(User,reverse_delete_rule=2) signtime = db.IntField() shift = db.IntField() shift_week = db.IntField() def init_routine(user:User,signtime:int): # 只在初次用户创建时允许设置signtime if Routine.objects(user=user): return None r = Routine( user = user, signtime = int(signtime), shift = int(signtime) ) return r.save() def change_signtime(self,signtime:int): # 不允许低权限用户自主设置 self.signtime = int(signtime) self.shift = self.signtime return self.save() def recover_shift(self): # 每次换班签到执行后调用,当shift与signtime相等时视为没换班 self.shift = self.signtime return self.save() def change_shift(self,shift:int,shift_week:int): # 允许用户自主设置 self.shift = int(shift) self.shift_week = int(shift_week) return self.save() def get_base_info(self): return { "user":self.user, "signtime":self.signtime, "shift":self.shift, "shift_week":self.shift_week }
class Ad(db.Document): title = db.StringField(max_length=100) price = db.IntField() description = db.StringField(max_length=1000) imageURL = db.StringField(max_length=2083) thumbnailURL = db.StringField(max_length=2083) postedDate = db.DateTimeField(default=datetime.now) category = db.StringField(max_length=1000) phone = db.StringField(max_length=12)
class User(UserMixin, db.Document): meta = {"collection": "ubi_user"} first_name = db.StringField(max_length=32, required=True) last_name = db.StringField(max_length=32) # email = db.StringField(max_length=32, required=True, unique=True) username = db.StringField(max_length=32, required=True, unique=True) password = db.StringField(required=True) admin = db.BooleanField(default=False) free_points = db.IntField(min_value=0) purchased_points = db.IntField(min_value=0) inventory_list = db.ListField(db.ReferenceField('Inventory')) def save(self, *args, **kwargs): if not self.free_points: self.free_points = 0 if not self.purchased_points: self.purchased_points = 0 return super(User, self).save(*args, **kwargs)
class Shop(db.Document): name = db.StringField(required=True) slug = db.StringField() nit = db.StringField(required=True, unique=True) email = db.EmailField(required=True, unique=True) phone = db.IntField(required=True, unique=True) address = db.DictField() shipping = db.DictField() categories = db.ReferenceField(Category)
class User(db.Document): """ User Model Class """ user_id = db.StringField() pin = db.IntField() user_name = db.StringField() password = db.StringField() create_date = db.DateTimeField(default=datetime.utcnow)
class User(db.Document): nickname = db.StringField(max_length=10,unique=True) firstname = db.StringField(max_length=10) lastname = db.StringField(max_length=10) pwdhash = db.StringField(max_length=54) email = db.StringField(max_length=25, required=True,unique=True) role = db.IntField(default = ROLE_USER) about_me = db.StringField(max_length=50) last_seen = db.DateTimeField(default=datetime.datetime.now, required=True)
class PrimaryCategory(db.Document): category_id = db.IntField(required=True) name = db.StringField(required=True) child_category_ids = db.ListField(db.IntField()) meta = {'collection': 'primary_categories', 'indexes': ['category_id']} def __repr__(self): return f'PrimaryCategory(id={self.category_id}, name={self.name})' @classmethod def add_document(cls, name, child_category_ids=[]): next_id = Counter.get_next_sequence_value('primary_categories') category = cls(category_id=next_id, name=name, child_category_ids=child_category_ids) return category
class Application(db.Document): """ API调用者信息 """ name = db.StringField(required=True) key = db.StringField(required=True, unique=True) secret_key = db.StringField(required=True) status = db.IntField(required=True, default=1)
class EventSeries(db.Document): """""" date_created = db.DateTimeField(required=True, default=now) date_modified = db.DateTimeField(required=True, default=now) slug = db.StringField(required=True, max_length=255) events = db.ListField(db.ReferenceField("Event")) frequency = db.StringField(default="weekly") every = db.IntField(min_value=1, max_value=30) ends_after = db.BooleanField(default=True) ends_on = db.BooleanField(default=False) num_occurances = db.IntField(default=1) recurrence_end_date = DateField() recurrence_summary = db.StringField() gcal_id = db.StringField() # ID of the first event in the series def delete_one(self, event): """""" self.events.remove(event) event.delete() self.save() def delete_all_except(self, event): """""" for e in self.events[:]: if e != event: e.delete() event.parent_series = None self.delete() def delete_all(self): """""" for e in self.events: e.delete() self.delete() def clean(self): """Update date_modified, and ensure that exactly one of `ends_after` and `ends_on` is True at a time. """ self.date_modified = now() if self.ends_after == self.ends_on: raise ValidationError("ends_on and ends_after should not share a " "value.")
class JobInstance(db.Document): instanceId = db.StringField() jobName = db.StringField() jobDisplayName = db.StringField() jobJson = db.StringField() # 来自哪个job实例 jobJsonPath = db.StringField() result = db.IntField() executeOutput = db.StringField() # 输出结果 executeTime = db.DecimalField(default=time.time, required=True) # 执行时间 endTime = db.DecimalField(default=time.time, required=True) #执行结束时间