예제 #1
0
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
            },
        ]
    }
예제 #2
0
class OptimizationProcedureORM(ProcedureORM):
    """
        An Optimization procedure.
    """

    procedure = db.StringField(default='optimization', required=True)

    initial_molecule = db.LazyReferenceField(MoleculeORM)
    final_molecule = db.LazyReferenceField(MoleculeORM)
예제 #3
0
class Training(me.Document):
    meta = {
        'indexes': [[('text_id', 1), ('user_id', 1)]],
        'cascade': True
    }
    text_id = me.LazyReferenceField('Text', required=True)
    user_id = me.LazyReferenceField('User', required=True)
    created_at = me.DateTimeField(default=datetime.now(), required=True)
    document = me.EmbeddedDocumentField(SpacyDocument, required=True)
예제 #4
0
class SampleGoat(SampleSpecies):
    # try to model relationship between samples
    father_id = mongoengine.LazyReferenceField(
        'SampleGoat',
        passthrough=True,
        reverse_delete_rule=mongoengine.NULLIFY)

    mother_id = mongoengine.LazyReferenceField(
        'SampleGoat',
        passthrough=True,
        reverse_delete_rule=mongoengine.NULLIFY)

    meta = {'db_alias': DB_ALIAS, 'collection': 'sampleGoat'}
예제 #5
0
파일: order.py 프로젝트: ray1980/leaf
class Order(mongoengine.Document):
    """
    订单类数据库模型:
        amount: 订单总金额 - float
        goods: 购买商品列表 - List[CacheedRef]
        status: 当前状态JSON字串 - str
        instance: 订单状态管理器的 pickle 对象 - bytes
    """
    amount = mongoengine.FloatField(min_value=0, required=True)
    goods = mongoengine.ListField(mongoengine.LazyReferenceField(stock.Stock))
    status = mongoengine.StringField(default=str)
    instance = mongoengine.BinaryField(default=bytes)
예제 #6
0
class Editor(mongoengine.Document):
    """
    An Editor of a publication.
    """

    meta = {'collection': 'test_editor'}
    id = mongoengine.StringField(primary_key=True)
    first_name = mongoengine.StringField(required=True, help_text="Editor's first name.", db_field='fname')
    last_name = mongoengine.StringField(required=True, help_text="Editor's last name.")
    metadata = mongoengine.MapField(field=mongoengine.StringField(), help_text="Arbitrary metadata.")
    company = mongoengine.LazyReferenceField(Publisher)
    avatar = mongoengine.FileField()
    seq = mongoengine.SequenceField()
예제 #7
0
파일: accesspoint.py 프로젝트: laik/leaf
class AccessPoint(mongoengine.Document):
    """
    权限访问点的数据库模型:
        pointname: 权限点名称(e.g. leaf.plugins.wxtoken.get)
        required: 需求的最小权限值
        strict: 是否要求仅仅指定权限值的用户可访问
        description: 当前权限点的描述
        exceptions: 针对某些用户的特例
    """

    pointname = mongoengine.StringField(primary_key=True)
    required = mongoengine.IntField(required=True)
    strict = mongoengine.BooleanField(default=False)
    description = mongoengine.StringField(default=str)
    exceptions = mongoengine.ListField(
        field=mongoengine.LazyReferenceField(User), default=list)
예제 #8
0
class User(me.Document):
    email = me.EmailField(unique=True, required=True)
    name = me.StringField(required=True)
    password = me.StringField(required=True)
    roles = me.ListField(me.StringField(),
                         required=True,
                         default=[Role.USER.value])
    plain_password = me.StringField(default=None)
    trainings = me.ListField(me.LazyReferenceField(Training))

    @classmethod
    def pre_save(cls, sender, document, **kwargs):
        if document.plain_password is not None:
            document.password = generate_password_hash(document.plain_password)
            document.plain_password = None

    def password_matches(self, plain_password):
        return check_password_hash(self.password, plain_password)
예제 #9
0
class Authentication(mongoengine.Document):
    """
    身份验证文档模型:
        user: 被建立登陆方式的用户id
        index: 用户索引(账户名-主键)
        salt: 用户密码盐
        token: 用户密码加盐之后的哈希值
        status: 验证方式是否可用
        description: 身份验证方式描述
    """

    index = mongoengine.StringField(primary_key=True)
    user = mongoengine.LazyReferenceField(
        User, reverse_delete_rule=mongoengine.CASCADE)
    salt = mongoengine.StringField(required=True)
    token = mongoengine.StringField(required=True)
    status = mongoengine.BooleanField(default=True)
    description = mongoengine.StringField(default=str)
예제 #10
0
class ServiceQueueORM(CustomDynamicDocument):

    status = db.StringField(default='WAITING', choices=['RUNNING', 'WAITING', 'ERROR', 'COMPLETE'])
    tag = db.StringField(default=None)
    hash_index = db.StringField(required=True)
    procedure_id = db.LazyReferenceField(ProcedureORM)

    # created_on = db.DateTimeField(required=True)
    # modified_on = db.DateTimeField(required=True)

    meta = {
        'collection':
        'service_queue',
        'indexes': [
            'status',
            {
                'fields': ("status", "tag", "hash_index"),
                'unique': False
            },
            # {'fields': ('procedure',), 'unique': True}
        ]
    }
예제 #11
0
 class Doc(me.Document):
     id = me.StringField(primary_key=True, default='main')
     ref = me.LazyReferenceField(ReferenceDoc)
예제 #12
0
class Text(me.Document):
    value = me.StringField(unique=True, required=True)
    created_at = me.DateTimeField(default=datetime.now(), required=True)
    # This is a mapping between user_id and document
    trainings = me.ListField(me.LazyReferenceField('Training'))