class ResultORM(BaseResultORM): """ Hold the result of an atomic single calculation """ # uniquely identifying a result program = db.StringField(required=True) # example "rdkit", is it the same as program in keywords? driver = db.StringField(required=True) # example "gradient" method = db.StringField(required=True) # example "uff" basis = db.StringField() molecule = db.LazyReferenceField(MoleculeORM, required=True) # This is a special case where KeywordsORM are denormalized intentionally as they are part of the # lookup for a single result and querying a result will not often request the keywords (LazyReference) keywords = db.LazyReferenceField(KeywordsORM) # output related properties = db.DynamicField() # accept any, no validation return_result = db.DynamicField() # better performance than db.ListField(db.FloatField()) provenance = db.DynamicField() # or an Embedded Documents with a structure? schema_name = db.StringField() # default="qc_ret_data_output"?? schema_version = db.IntField() # or String? meta = { 'collection': 'result', 'indexes': [ { 'fields': ('program', 'driver', 'method', 'basis', 'molecule', 'keywords'), 'unique': True }, ] }
class feedbackParticipance(models.Document): webapp_user_id = models.LongField(default=0) #参与者id member_id = models.LongField(default=0) #参与者id tel = models.StringField(default="", max_length=100) termite_data = models.DynamicField(default="") #termite数据 prize = models.DynamicField(default="") #反馈奖励 created_at = models.DateTimeField() #创建时间 meta = {'collection': 'feedback_feedback_participance', 'db_alias': 'apps'}
class FormData(mongo.Document): id = mongo.UUIDField(required=False) location = mongo.ReferenceField("Location", required=False) user = mongo.ReferenceField("User", required=False) form_schema = mongo.DynamicField(required=False) data = mongo.DynamicField(required=False) created = mongo.DateTimeField(default=datetime.datetime.today().date(), required=False) last_updated = mongo.DateTimeField( default=datetime.datetime.today().date(), required=False)
class eventParticipance(models.Document): webapp_user_id = models.LongField(default=0) #参与者id member_id = models.LongField(default=0) #参与者id belong_to = models.StringField(default="", max_length=100) #对应的活动id tel = models.StringField(default="", max_length=100) termite_data = models.DynamicField(default="") #termite数据 prize = models.DynamicField(default="") #活动奖励 created_at = models.DateTimeField() #创建时间 meta = {'collection': 'event_event_participance', 'db_alias': 'apps'}
class housekeep(meng.Document): start = meng.DynamicField(primary_key=True) end = meng.DynamicField() total = meng.IntField() # total # of entries to do good = meng.IntField(default=0) # entries successfully processed bad = meng.IntField( default=0) # entries we failed to process to completion log = meng.ListField( ) # log of misery -- each item a failed processing incident state = StringEnumField(hkstate, default='open') git = meng.StringField( ) # git commit of this version of source_destination tstart = meng.DateTimeField() # Time when job started time = meng.DateTimeField() # Time when job finished meta = {'indexes': ['state', 'time']}
class housekeep(meng.Document): start = meng.DynamicField(primary_key = True) end = meng.DynamicField() total = meng.IntField() # total # of entries to do good = meng.IntField(default = 0) # entries successfully processed # bad = meng.IntField(default = 0) # entries we failed to process to completion # log = meng.ListField() # log of misery -- each item a failed processing incident state = meng.StringField(default = 'open') # Globally unique identifier for the process, if any, that is working on # this chunk, to know if something else is working on it procname = meng.StringField(default = 'none') # git = meng.StringField() # git commit of this version of source_destination tstart = meng.DateTimeField() # Time when job started time = meng.DateTimeField() # Time when job finished meta = {'indexes': ['state', 'time']}
class CrashReportRequest(me.EmbeddedDocument): """ Represents a request made to the API. """ # cookies = me.DictField(default=None) # hooks = me.DictField(default=None) # auth = me.DynamicField(default=None) # data = me.DynamicField(default=None, null=True) # files = me.DictField(default=None, null=True) # json = me.DynamicField(default=None, null=True) headers = me.DictField(default=None, null=True) """Headers of the request""" method = me.StringField(default=None) """HTTP method of the request""" params = me.DynamicField(default=None, null=True) """URL parameters of the request""" url = me.StringField(default=None) """URL of the request""" def to_dict(self) -> dict: """ Returns a dict representation """ return { "headers": self.headers, "method": self.method, "params": self.params, "url": self.url, }
class QueryFilter(me.EmbeddedDocument): """A selector used to further filter a dataset. This type of selector/filter may be used by any non-arbitrary rule type. However, a QueryFilter is not the same as a resource condition, found in mist.api.conditions.models. For instance, trying to use a QueryFilter in order to apply filtering based on tags might give weird results. Instead, use a QueryFilter in order to filter data, such as time series, based on the dataset's own metadata. For example, `QueryFilter(key='name', value='sda', operator='eq')` could return the time series corresponding to a specific disk partition. """ key = me.StringField(required=True) value = me.StringField(required=True) operator = me.DynamicField(required=True, choices=OPERATORS) def as_dict(self): return { 'key': self.key, 'value': self.value, 'operator': self.operator } def __str__(self): return '%s %s %s' % (self.key, self.get_operator_display(), self.value)
class ProcedureORM(BaseResultORM): """ A procedure is a group of related results applied to a list of molecules. """ procedure = db.StringField(required=True) program = db.StringField(required=True) # example: 'Geometric' hash_index = db.StringField(required=True) # Unlike ResultORMs KeywordsORM are not denormalized here as a ProcedureORM query will always want the # keywords and the keywords are not part of the index. keywords = db.DynamicField() meta = { 'collection': 'procedure', 'allow_inheritance': True, 'indexes': [ # TODO: needs a unique index, + molecule? { 'fields': ('procedure', 'program'), 'unique': False }, # TODO: check { 'fields': ('hash_index', ), 'unique': False } # used in queries ] }
class Task(db.DynamicDocument): spec = db.DynamicField() # others tag = db.StringField(default=None) program = db.StringField(default=None) procedure = db.StringField(default=None) created_on = db.DateTimeField(required=True) status = db.StringField(default=None) priority = db.IntField(default=None) def save(self, *args, **kwargs): """Override save to update modified_on""" if not self.created_on: self.created_on = datetime.datetime.utcnow() return super(Task, self).save(*args, **kwargs) meta = { "collection": "task_queue", "indexes": [ "created_on", "status", "priority", "tag", "program", "procedure", {"fields": ("program", "procedure"), "unique": False}, ], }
class FieldCondition(BaseCondition): """Generic condition for any field which is supported by specific collection.""" ctype = 'field' field = me.StringField(required=True) value = me.DynamicField(required=True) operator = me.StringField(required=True, default='eq', choices=('eq', 'ne', 'gt', 'lt')) @property def q(self): if self.operator == 'eq': return me.Q(**{self.field: self.value}) return me.Q(**{'%s__%s' % (self.field, self.operator): self.value}) def as_dict(self): return { 'type': self.ctype, 'field': self.field, 'value': self.value, 'operator': self.operator }
class Task(db.DynamicDocument): spec = db.DynamicField() # others tag = db.StringField(default=None) program = db.StringField(default=None) procedure = db.StringField(default=None) created_on = db.DateTimeField(required=True) status = db.StringField(default=None) priority = db.IntField(default=None) def save(self, *args, **kwargs): """Override save to update modified_on""" if not self.created_on: self.created_on = datetime.datetime.utcnow() return super(Task, self).save(*args, **kwargs) meta = { 'collection': 'task_queue', 'indexes': [ 'created_on', 'status', 'priority', 'tag', 'program', 'procedure', { 'fields': ("program", "procedure"), 'unique': False }, ] }
class Identity(me.DynamicEmbeddedDocument): """Represents an identity the user connects with in the database.""" user_id = me.DynamicField(required=True, unique=True) provider = me.StringField(required=True, choices=['github', 'facebook', 'google-oauth2']) isSocial = me.BooleanField(required=True, default=False) connection = me.StringField( required=True, choices=['github', 'facebook', 'google-oauth2'])
class TaskQueueORM(CustomDynamicDocument): """A queue of tasks corresponding to a procedure. Notes: Don't sort query results without having the index sorted or it will impact the performance. """ spec = db.DynamicField() parser = db.StringField() status = db.StringField( default='WAITING', choices=['RUNNING', 'WAITING', 'ERROR', 'COMPLETE']) program = db.StringField() procedure = db.StringField() manager = db.StringField() # others priority: db.IntField(default=1) tag = db.StringField(default=None) # can reference ResultORMs or any ProcedureORM base_result = db.GenericLazyReferenceField( dbref=True) # use res.id and res.document_type (class) created_on = db.DateTimeField(required=True) modified_on = db.DateTimeField(required=True) meta = { 'collection': 'task_queue', 'indexes': [ 'created_on', 'status', # Specification fields { 'fields': ('program', 'procedure'), }, # new 'manager', # order effects 'tag', 'priority', { 'fields': ('base_result', ), 'unique': True }, # new ] } def save(self, *args, **kwargs): """Override save to update modified_on.""" self.modified_on = datetime.datetime.utcnow() if not self.created_on: self.created_on = datetime.datetime.utcnow() return super(TaskQueueORM, self).save(*args, **kwargs)
class PowerMeParticipance(models.Document): member_id = models.LongField(default=0) #参与者id belong_to = models.StringField(default="", max_length=100) #对应的活动id created_at = models.DateTimeField() #创建时间 has_join = models.BooleanField(default=False) #是否已参与微助力 power = models.IntField(default=0) #助力值 powered_member_id = models.DynamicField() #已助力的会员id list meta = {'collection': 'powerme_powerme_participance', 'db_alias': 'apps'}
class UserappHasTemplateMessages(mongo_models.Document): """ 各百宝箱活动所配置的模板消息 """ owner_id = mongo_models.LongField() #所属商家 apps_type = mongo_models.StringField(max_length=64) #活动类型 data_control = mongo_models.DynamicField( ) #模板选择选择控制 e.g {"success": "template_id1", "fail": "template_id2"} meta = {'collection': 'apps_Userapp_has_template', 'db_alias': 'apps'}
class RatingManager(mongoconnector.Document): rating=mongoconnector.FloatField() rating_history=mongoconnector.ListField(mongoconnector.IntField(choices=[1,2,3,4,5])) dynamic_review=mongoconnector.ListField(mongoconnector.DynamicField()) sorting_rating=mongoconnector.SortedListField(mongoconnector.IntField()) #multi dimensional array## multi_rating=mongoconnector.ListField(mongoconnector.ListField(mongoconnector.IntField())) def calc_rating(self): self.rating=mean([n for n in self.rating_history if n is not None])
class KeywordsORM(CustomDynamicDocument): """ KeywordsORM are unique for a specific program and name. """ # TODO: pull choices from const config hash_index = db.StringField(required=True) values = db.DynamicField() meta = {'indexes': [{'fields': ('hash_index', ), 'unique': True}]}
class exSignDetails(models.Document): """ 签到详情记录表 """ member_id = models.LongField(default=0) #参与者id belong_to = models.StringField(default="", max_length=100) #对应的活动id created_at = models.DateTimeField() #创建时间 prize = models.DynamicField() #奖励信息 type = models.StringField(default=u"页面签到", max_length=20) #页面签到 or 自动签到 meta = {'collection': 'exsign_exsign_details', 'db_alias': 'apps'}
class TransactionLog(me.Document): """Capped Collection to Log transactions.""" timestamp = me.DateTimeField( required=True, default=datetime.utcnow() ) collection = me.StringField(required=True) doc_id = me.DynamicField() ts = me.SequenceField() meta = {"max_documents": 100000}
class RedPacket(models.Document): owner_id = models.LongField() #创建人id name = models.StringField(default="", max_length=100) #名称 start_time = models.DateTimeField() #开始时间 end_time = models.DateTimeField() #结束时间 status = models.IntField(default=0) #状态 related_page_id = models.StringField(default="", max_length=100) #termite page的id timing = models.BooleanField(default=True) #是否显示倒计时 red_packet_type = models.StringField(default="random", max_length=10) #红包方式,默认为拼手气红包 random_total_money = models.StringField(default="", max_length=10) #拼手气红包总金额 random_packets_number = models.StringField(default="", max_length=10) #拼手气红包红包个数 random_random_number_list = models.ListField() #随机正负金额List regular_packets_number = models.StringField(default="", max_length=10) #普通红包红包个数 regular_per_money = models.StringField(default="", max_length=10) #普通红包单个金额 money_range = models.StringField(default="", max_length=50) #好友贡献金额区间 reply_content = models.StringField(default="", max_length=50) #参与活动回复语 material_image = models.StringField(default="", max_length=1024) #分享的图片链接 share_description = models.StringField(default="", max_length=1024) #分享描述 wishing = models.StringField(default="", max_length=50) #开现金红包文字 qrcode = models.DynamicField() #带参数二维码ticket,name red_packet_remain_amount = models.IntField(default=0) #剩余可领取的红包总量 created_at = models.DateTimeField() #创建时间 meta = {'collection': 'red_packet_red_packet', 'db_alias': 'apps'} @property def status_text(self): if self.status == STATUS_NOT_START: return u'未开始' elif self.status == STATUS_RUNNING: now = datetime.today() if now >= self.end_time: return u'已结束' else: return u'进行中' elif self.status == STATUS_STOPED: return u'已结束' else: return u'未知' @property def is_finished(self): status_text = self.status_text if status_text == u'已结束': return True else: return False
class QueueManagerORM(CustomDynamicDocument): """ """ name = db.StringField(unique=True) cluster = db.StringField() hostname = db.StringField() uuid = db.StringField() username = db.StringField() qcengine_version = db.StringField() manager_version = db.StringField() tag = db.StringField() programs = db.DynamicField() procedures = db.DynamicField() # counts completed = db.IntField(default=0) submitted = db.IntField(default=0) failures = db.IntField(default=0) returned = db.IntField(default=0) status = db.StringField(default='INACTIVE', choices=['ACTIVE', 'INACTIVE']) created_on = db.DateTimeField(required=True) modified_on = db.DateTimeField(required=True) meta = { 'collection': 'queue_manager', 'indexes': ['status', 'name', 'modified_on'] } def save(self, *args, **kwargs): """Override save to update modified_on.""" self.modified_on = datetime.datetime.utcnow() if not self.created_on: self.created_on = datetime.datetime.utcnow() return super(QueueManagerORM, self).save(*args, **kwargs)
class Exlottery(models.Document): owner_id = models.LongField() #创建人id name = models.StringField(default="", max_length=100) #名称 lottery_type = models.StringField(default="roulette", max_length=100) #抽奖类型 start_time = models.DateTimeField() #开始时间 end_time = models.DateTimeField() #结束时间 status = models.IntField(default=0) #状态 participant_count = models.IntField(default=0) #参与者数量 winner_count = models.IntField(default=0) #中奖人数 related_page_id = models.StringField(default="", max_length=100) #termite page的id created_at = models.DateTimeField() #创建时间 # expend = models.IntField(default=0) #消耗积分 # delivery = models.IntField(default=0) #参与送积分 chance = models.IntField(default=0) #中奖几率 allow_repeat = models.StringField(default="true", max_length=10) #是否允许重复中奖 prize = models.DynamicField() #每个奖项的奖品数量 share_description = models.StringField(default="", max_length=30) #分享说明 lottery_code_count = models.IntField(default=0) #抽奖码数量 homepage_image = models.StringField(default="", max_length=256) #首页背景图 exlottery_bg_image = models.StringField(default="", max_length=256) # 抽奖背景图 #证书文存放件路径 cert_pem_path = models.StringField(default="", max_length=256) #证书 key_pem_path = models.StringField(default="", max_length=256) #证书密钥 meta = {'collection': 'exlottery_exlottery', 'db_alias': 'apps'} @property def status_text(self): if self.status == STATUS_NOT_START: return u'未开始' elif self.status == STATUS_RUNNING: now = datetime.today() if now >= self.end_time: return u'已结束' else: return u'进行中' elif self.status == STATUS_STOPED: return u'已结束' else: return u'未知' @property def is_finished(self): status_text = self.status_text if status_text == u'已结束': return True else: return False
class Group(models.Document): owner_id = models.LongField() #创建人id related_page_id = models.StringField(default="", max_length=100) #termite page的id name = models.StringField(default="", max_length=100) #名称 start_time = models.DateTimeField() #开始时间 end_time = models.DateTimeField() #结束时间 status = models.IntField(default=0) #状态 is_use = models.IntField(default=1) #删除状态 1未删除,0删除 handle_status = models.IntField(default=0) #手动状态 0关闭,1开启 created_at = models.DateTimeField() #创建时间 group_dict = models.DynamicField( ) #团购活动字典{'0':{'group_type':'5','group_days':'10','group_price':'100.00'},...} # product_dict = models.DynamicField() #活动商品 product_id = models.IntField() #商品id product_img = models.StringField() #商品图片 product_name = models.StringField() #商品名称 product_price = models.StringField() #商品价格 product_socks = models.StringField() #商品库存 product_sales = models.StringField() #商品销量 product_usercode = models.StringField() #商品编码 product_create_at = models.StringField() #商品创建时间 rules = models.StringField() #团购说明 material_image = models.StringField() #分享图片 share_description = models.StringField() #分享描述 visited_member = models.ListField() #浏览过的member_list meta = {'collection': 'group_group', 'db_alias': 'apps'} @property def status_text(self): if self.status == STATUS_NOT_START: return u'未开启' elif self.status == STATUS_RUNNING: now = datetime.today() if now >= self.end_time: return u'已结束' else: return u'进行中' elif self.status == STATUS_STOPED: return u'已结束' else: return u'未知' @property def is_finished(self): status_text = self.status_text if status_text == u'已结束': return True else: return False
class Rebate(models.Document): owner_id = models.LongField() #创建人id name = models.StringField(default="", max_length=100) #名称 start_time = models.DateTimeField() #开始时间 end_time = models.DateTimeField() #结束时间 status = models.IntField(default=0) #状态 permission = models.BooleanField() #已关注会员可参与 is_limit_first_buy = models.BooleanField() #订单返利条件是否限制首单 is_limit_cash = models.BooleanField() #订单金额是否为现金 rebate_order_price = models.FloatField() #订单返利需满多少元 rebate_money = models.FloatField() #返利返多少元 weizoom_card_file_path = models.StringField() #文件路径 # weizoom_card_id_from = models.StringField() #发放微众卡号段 # weizoom_card_id_to = models.StringField() #发放微众卡号段 reply_type = models.IntField() #扫码后回复:1/文字,2/图文消息 reply_detail = models.DynamicField() #扫码后回复文字 reply_material_id = models.StringField() #扫码后回复图文id ticket_id = models.IntField() #唯一的字段,用于创建ticket时使用 ticket = models.StringField(default="", max_length=256) is_deleted = models.BooleanField(default=False) #是否被删除 created_at = models.DateTimeField() #创建时间 meta = {'collection': 'rebate_rebate', 'db_alias': 'apps'} @property def status_text(self): if self.status == STATUS_NOT_START: return u'未开始' elif self.status == STATUS_RUNNING: now = datetime.today() if now >= self.end_time: return u'已结束' else: return u'进行中' elif self.status == STATUS_STOPED: return u'已结束' else: return u'未知' @property def is_finished(self): status_text = self.status_text if status_text == u'已结束': return True else: return False
class BasicEvent(me.Document): topic = me.StringField() hostname = me.StringField() service = me.StringField() status = me.StringField() output = me.StringField() timestampt = me.LongField() tags = me.DynamicField() meta = {'allow_inheritance': True} @staticmethod def from_dict(data: dict): return BasicEvent(**data) def to_dict(self) -> dict: pass
class Scanlottery(models.Document): owner_id = models.LongField() #创建人id name = models.StringField(default="", max_length=100) #名称 lottery_type = models.StringField(default="roulette", max_length=100) #抽奖类型 start_time = models.DateTimeField() #开始时间 end_time = models.DateTimeField() #结束时间 status = models.IntField(default=0) #状态 participant_count = models.IntField(default=0) #参与者数量 winner_count = models.IntField(default=0) #中奖人数 related_page_id = models.StringField(default="", max_length=100) #termite page的id created_at = models.DateTimeField() #创建时间 chance = models.IntField(default=0) #中奖几率 prize = models.DynamicField() #每个奖项的奖品数量 #证书文存放件路径 cert_pem_path = models.StringField(default="", max_length=256) #证书 key_pem_path = models.StringField(default="", max_length=256) #证书密钥 meta = { 'collection': 'scanlottery_scanlottery', 'db_alias': 'apps' } @property def status_text(self): if self.status == STATUS_NOT_START: return u'未开始' elif self.status == STATUS_RUNNING: now = datetime.today() if now >= self.end_time: return u'已结束' else: return u'进行中' elif self.status == STATUS_STOPED: return u'已结束' else: return u'未知' @property def is_finished(self): status_text = self.status_text if status_text == u'已结束': return True else: return False
class QueryCondition(me.EmbeddedDocument): """The main condition of a Rule. The QueryCondition is the main condition type required in order to setup a Rule. A QueryCondition allows users to specify the query to be executed by providing the metric's name, an aggregation function, as well as threshold type and value. Additional filters may also be specified in order to limit down a query's results. In case of arbitrary rules the `target` has to store the entire query as a single string, aggregation function and selectors included. """ target = me.StringField(required=True) operator = me.StringField(required=True, choices=OPERATORS) threshold = me.DynamicField(required=True) filters = me.EmbeddedDocumentListField(QueryFilter, default=lambda: []) aggregation = me.StringField(default='all', choices=('all', 'any', 'avg', 'count')) meta = {'allow_inheritance': True} @property def filters_string(self): """Return `self.filters` as a string.""" return ', '.join([str(f) for f in self.filters]) def as_dict(self): return { 'target': self.target, 'operator': self.operator, 'threshold': self.threshold, 'aggregation': self.aggregation, 'filters': [f.as_dict() for f in self.filters], } def __str__(self): return '%s(%s){%s} %s %s' % ( self.aggregation.upper(), self.target or '', self.filters_string, self.get_operator_display(), self.threshold)
class FormSchema(mongo.Document): id = mongo.UUIDField(required=False) field_groups = mongo.DynamicField(required=False) created = mongo.DateTimeField(default=datetime.datetime.today().date(), required=False) last_updated = mongo.DateTimeField( default=datetime.datetime.today().date(), required=False) @property def permission_type(self): return "forms" def convert_to_json(self): return { 'id': str(self.id), 'field_groups': self.field_groups, 'created': self.created, 'last_updated': self.last_updated }
class WorkflowExecutionDB(stormbase.StormFoundationDB, stormbase.ChangeRevisionFieldMixin): RESOURCE_TYPE = types.ResourceType.EXECUTION action_execution = me.StringField(required=True) spec = me.DictField() graph = me.DictField() input = stormbase.EscapedDictField() notify = me.DictField() context = me.DictField() state = stormbase.EscapedDictField() status = me.StringField(required=True) output = stormbase.EscapedDictField() errors = me.DynamicField() start_timestamp = db_field_types.ComplexDateTimeField( default=date_utils.get_datetime_utc_now) end_timestamp = db_field_types.ComplexDateTimeField() meta = {'indexes': [{'fields': ['action_execution']}]}