class Task(Document): schema_version = StringField(validate=validate.Length(max=10), default='1') test = ReferenceField('Test') test_suite = StringField( validate=validate.Length(max=100)) # embedded document from Test testcases = ListField(StringField()) schedule_date = DateTimeField(default=datetime.datetime.utcnow) run_date = DateTimeField() status = StringField(validate=validate.Length(max=50), default='waiting') comment = StringField(validate=validate.Length(max=1000)) kickedoff = IntField(validate=validate.Range(min=0), default=0) endpoint_list = ListField(UUIDField()) parallelization = BooleanField(default=False) endpoint_run = ReferenceField('Endpoint') priority = IntField(validate=validate.Range(min=QUEUE_PRIORITY_MIN, max=QUEUE_PRIORITY_MAX), default=QUEUE_PRIORITY_DEFAULT) variables = DictField() tester = ReferenceField('User') upload_dir = StringField(validate=validate.Length(max=100)) test_results = ListField(ReferenceField('TestResult')) organization = ReferenceField( 'Organization') # embedded document from Test team = ReferenceField('Team') # embedded document from Test class Meta: collection_name = 'tasks'
class Predicted(Document): predicted = fields.StringField(required=True) # dataset name department = fields.StringField(required=True) # assign the dataset to department team = fields.StringField(required=True) # assign the dateset to team createDate = fields.DateTimeField(validate=validate.Range(min=pd.Timestamp(1990, 1, 1)), required=True) updateDate = fields.DateTimeField(validate=validate.Range(min=pd.Timestamp(1990, 1, 1)), required=True) class Meta(): collection = db.predicted
class MySchema(Schema): dict = fields.DictField(attribute='in_mongo_dict', allow_none=True) kdict = fields.DictField(keys=fields.StringField( validate=validate.Length(0, 1))) vdict = fields.DictField(values=fields.IntField( validate=validate.Range(max=5))) kvdict = fields.DictField( keys=fields.StringField(validate=validate.Length(0, 1)), values=fields.IntField(validate=validate.Range(max=5))) dtdict = fields.DictField(values=fields.DateTimeField)
class Account(Document): # username = fields.StringField(required=True) password = fields.StringField(required=True) createDate = fields.DateTimeField( validate=validate.Range(min=datetime(1990, 1, 1)), required=True) updateDate = fields.DateTimeField( validate=validate.Range(min=datetime(1990, 1, 1)), required=True) class Meta(): collection = db.account
class User(Document): # name = fields.StringField(required=True) department = fields.StringField(required=True) team = fields.StringField(required=True) createDate = fields.DateTimeField( validate=validate.Range(min=pd.Timestamp(1990, 1, 1)), required=True) updateDate = fields.DateTimeField( validate=validate.Range(min=pd.Timestamp(1990, 1, 1)), required=True) accountRef = fields.StringField(required=True) class Meta(): collection = db.user
class MLmodel(Document): # description = fields.StringField(required=True) # to remember the functionality of the pkl file filename = fields.StringField(required=True) # plk file name path = fields.StringField(required=True) # path of the plk file version = fields.StringField(required=True) # plk file version department = fields.StringField(required=True) # assign the model to department team = fields.StringField(required=True) # assign the model to team features = fields.StringField(required=True) # features have to be assigned name = fields.StringField(required=True) # model name isDeployed = fields.BooleanField(required=True,default=False) createDate = fields.DateTimeField(validate=validate.Range(min=pd.Timestamp(1990,1,1)),required=True) updateDate = fields.DateTimeField(validate=validate.Range(min=pd.Timestamp(1990,1,1)),required=True) class Meta(): collection = db.mlmodel
class FormField(EmbeddedDocument): # pylint: disable=abstract-method """ A field in a form to fill out. Taken from fenetre/db.py. """ # This should be a substring of the nearest label text to the control we're filling in. # Optional _not automatically set_ expected_label_segment = fields.StrField(required=False, default=None) # Index on page (includes headings) index_on_page = fields.IntField(required=True, validate=validate.Range(min=0)) # Value to fill in. # The grammar for this field is in fieldexpr.py in lockbox. target_value = fields.StrField(required=True) # Type of field kind = fields.StrField(required=True, validate=validate.OneOf( [x.value for x in FormFieldType])) # Is this field critical? as in; if we don't fill it in do we still submit the form? critical = fields.BoolField(default=True)
class Rate(Document): from_user = fields.ReferenceField('User', required=True) to_user = fields.ReferenceField('User', required=True) rate = fields.IntField(required=True, validate=validate.Range(min=1, max=5)) description = fields.StrField() date = fields.DateTimeField()
class ClinicalSample(Document): clinicalSampleCode = fields.StringField(required=True) sampleCounter = fields.IntegerField(required=True) name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) workflowTag = fields.StrField(required=False) quality = fields.StrField(required=False) description = fields.StrField() processingPerson = fields.StrField() createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "clinicalSample"
class User(Document): username = fields.StrField(required=True, unique=True) email = fields.EmailField(required=True, unique=True) firstname = fields.StrField() lastname = fields.StrField() # birthday = fields.DateTimeField() birthday = fields.DateTimeField(validate=validate.Range(min=datetime.datetime(1900, 1, 1))) password = fields.StrField(required=True) # Don't store it in clear in real life ! date_created = fields.DateTimeField(default=datetime.datetime.now()) date_modified = fields.DateTimeField(default=datetime.datetime.now()) # authored_docs = fields.ListField(fields.ReferenceField("Paper")) def update(self, *args, **kwargs): if not self.date_created: self.date_created = datetime.datetime.now() self.date_modified = datetime.datetime.now() return super(User, self).update(*args, **kwargs) class Meta: # collection = db.users collection_name = 'users' def get_thread_karma(self): """ fetch the number of votes this user has had on his/her threads 1.) Get id's of all threads by this user 2.) See how many of those threads also were upvoted but not by the person him/her self. """ # thread_ids = [t.id for t in self.threads] # select = thread_upvotes.select(db.and_( # thread_upvotes.c.thread_id.in_(thread_ids), # thread_upvotes.c.user_id != self.id # ) # ) # rs = db.engine.execute(select) # return rs.rowcount # TODO return Thread.find({"user_id":self.id}).count() def get_comment_karma(self): """ fetch the number of votes this user has had on his/her comments """ # TODO return Comment.find({'user_id': self.id}).count() def threads(self): app.logger.debug(Thread.find({"user_id":self.id})[:]) return list(Thread.find({"user_id":self.id})) def comments(self): app.logger.debug(list(Comment.find({"user_id":self.id}))) return list(Comment.find({"user_id":self.id}))
class IntermediateSample(Document): name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) parentSamples = fields.ListField(fields.ObjectIdField, required=False) protocolName = fields.StrField(required=True) workflowTag = fields.StrField(required=False) sopFileName = fields.StrField(required=False) description = fields.StrField() processingPerson = fields.StrField() createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "intermediateSample"
class User(Document): email = fields.EmailField(required=True, unique=True) birthday = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) friends = fields.ListField(fields.ReferenceField("User")) class Meta: collection = db.user
class Artefact(Document): name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=False) # SOP sopFileName = fields.StrField(required=False) encodedFileId = fields.ObjectIdField(required=False) artefactClass = fields.StrField(required=False) description = fields.StrField(required=False) owner = fields.StrField(required=False) revision = fields.StrField(required=False) processingPerson = fields.StrField() createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "Artefacts"
class InviteGroup(Document): code = fields.StrField(unique=True, required=True, validate=validate.Length(equal=INVITE_CODE_LENGTH)) limit = fields.IntField(required=True, validate=validate.Range(min=1)) available_uses = fields.IntField(required=True, validate=validate.Range(min=0)) # expiration_date = fields.DateTimeField() async def create_new_code(self, limit, code=None): from models.utils import create_new_invite_code self.code = code if code is not None else await create_new_invite_code( ) self.limit = limit self.available_uses = limit await self.commit() return self
class MyDoc(Document): dk = fields.IntField(marshmallow_data_key='dkdk') at = fields.IntField(marshmallow_attribute='atat') re = fields.IntField(marshmallow_required=True) an = fields.IntField(marshmallow_allow_none=True) lo = fields.IntField(marshmallow_load_only=True) do = fields.IntField(marshmallow_dump_only=True) va = fields.IntField(marshmallow_validate=validate.Range(min=0)) em = fields.IntField( marshmallow_error_messages={'invalid': 'Wrong'})
class MSReadySample(Document): name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) intermediateSampleId = fields.ObjectIdField(required=True) msReadySampleName = fields.StrField(required=False) workflowTag = fields.StrField(required=False) quality = fields.StrField(required=False) peptideNo = fields.FloatField(required=False) description = fields.StrField(required=False) concentration = fields.StrField(required=False) processingPerson = fields.StrField(required=False) currentLocation = fields.StrField(required=False) createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "msReadySample"
class SWATHAnalysis(Document): swathId = fields.IntegerField(required=False) name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) msRunIds = fields.ListField(fields.ObjectIdField, required=False) protocolId = fields.StrField(required=True) protocolName = fields.StrField(required=False) sopFileName = fields.StrField(required=False) proteinMatrixFileName = fields.StrField(required=False) description = fields.StrField(required=False) workflowTag = fields.StrField(required=False) spectralLibraryId = fields.ObjectIdField(required=True) createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "SWATHAnalysis"
class SpectralLibrary(Document): libId = fields.IntegerField(required=False) name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) msRunIds = fields.ListField(fields.ObjectIdField, required=False) protocolId = fields.StrField(required=True) protocolName = fields.StrField(required=False) sopFileName = fields.StrField(required=False) specLibFilename = fields.StrField(required=False) description = fields.StrField(required=False) proteinDatabaseOrganism = fields.StrField(required=True) proteinDatabaseVersion = fields.StrField(required=True) workflowTag = fields.StrField(required=False) createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "SpectralLibrary"
class MSRun(Document): runId = fields.IntegerField(required=False) name = fields.StrField(required=True) projectId = fields.ObjectIdField(required=True) clinicalSamples = fields.ListField(fields.ObjectIdField, required=False) msReadySampleId = fields.ObjectIdField(required=True) msReadySampleName = fields.StrField(required=False) protocolId = fields.StrField(required=True) protocolName = fields.StrField(required=False) sopFileName = fields.StrField(required=False) description = fields.StrField(required=False) instrumentId = fields.StrField(required=True) instrumentMethod = fields.StrField(required=False) runCode = fields.StrField(required=False) status = fields.StrField(required=False) processingPerson = fields.StrField(required=False) workflowTag = fields.StrField(required=False) createdDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) updatedDate = fields.DateTimeField( validate=validate.Range(min=datetime(1900, 1, 1))) class Meta: collection_name = "MSRun"
class MySchema(BaseSchema): with_max = fields.IntField(validate=validate.Range(max=99))
class TaskQueue(Document): ''' Per endpoint per priority queue ''' schema_version = StringField(validate=validate.Length(max=10), default='1') priority = IntField(validate=validate.Range(min=QUEUE_PRIORITY_MIN, max=QUEUE_PRIORITY_MAX), default=QUEUE_PRIORITY_DEFAULT) tasks = ListField(ReferenceField('Task'), default=[]) endpoint = ReferenceField('Endpoint') running_task = ReferenceField('Task', allow_none=True, default=missing) rw_lock = BooleanField(default=False) organization = ReferenceField('Organization') team = ReferenceField('Team') to_delete = BooleanField(default=False) class Meta: collection_name = 'task_queues' async def acquire_lock(self): for i in range(LOCK_TIMEOUT): if await self.collection.find_one_and_update( { '_id': self.pk, 'rw_lock': False }, {'$set': { 'rw_lock': True }}): return True await asyncio.sleep(0.1) else: return False async def release_lock(self): await self.collection.find_one_and_update({'_id': self.pk}, {'$set': { 'rw_lock': False }}) async def pop(self): if not await self.acquire_lock(): return None await self.reload() if len(self.tasks) == 0: await self.release_lock() return None task = self.tasks.pop(0) task = await task.fetch() self.running_task = task await self.commit() await self.release_lock() return task async def push(self, task): if not await self.acquire_lock(): raise RuntimeError('failed to acquire queue lock') self.tasks.append(task) await self.commit() await self.release_lock() async def flush(self, cancelled=False): if not await self.acquire_lock(): raise RuntimeError('failed to acquire queue lock') if cancelled: for task in self.tasks: task.status = 'cancelled' await task.commit() self.tasks = [] await self.commit() await self.release_lock() return True
class Industry(EmbeddedDocument): industry = fields.ReferenceField('Tag', required=True) experience = fields.IntField(required=True, validate=validate.Range(min=0, max=100))
class Punishment(umongo.EmbeddedDocument): type = fields.IntegerField(required=True, allow_none=True) mute_for = fields.IntegerField() captcha_type = fields.IntegerField(validate=validate.Range(0, 2))
class MySchema(EmbeddedSchema): with_max = fields.IntField(validate=validate.Range(max=99))
class Game(BaseDocument): """ This is how we are going to store the game """ STATUS_CREATED = 'created' STATUS_IN_PROGRESS = 'in_progress' STATUS_TIE = 'tie' STATUS_FINISHED = 'finished' STATUS = [ STATUS_CREATED, STATUS_IN_PROGRESS, STATUS_TIE, STATUS_FINISHED, ] players = fields.ListField( fields.ReferenceField("User"), ) multiplayer = fields.BoolField( default=False, ) board = fields.ListField( fields.ListField( fields.StrField() ) ) status = fields.StrField( validate=validate.OneOf(STATUS), default=STATUS_CREATED ) created_at = fields.DateTimeField( default=datetime.datetime.now(), ) winner = fields.ReferenceField("User") size = fields.IntegerField( validate=[validate.Range(3, 10)], default=3, ) def pre_insert(self): """ Fill the board and do multiplayer validations """ if not self.players: raise ValidationError( "There should be at least one player", ) if len(self.players) > 2: raise ValidationError( "Maximum two players" ) if len(self.players) == 2: self.multiplayer = True else: self.multiplayer = False self.board = [["" for i in range(self.size)] for y in range(self.size)] pass class Meta: """ ODM Metadata """ collection = db.games
class MySchema(EmbeddedSchema): a = fields.IntField() b = fields.IntField(attribute='in_mongo_b') c = fields.IntField(allow_none=True, validate=validate.Range(min=1, max=5))
class UserTempl(Document): email = fields.EmailField(required=True, unique=True) birthday = fields.DateTimeField(validate=validate.Range( min=datetime(1900, 1, 1))) friend = fields.ReferenceField("UserTempl")