from mongoengine import ( Document, EmbeddedDocument, StringField, DateTimeField, EmbeddedDocumentListField, EmbeddedDocumentField, ) from apiserver.database import Database, strict from apiserver.database.fields import ( StrippedStringField, SafeSortedListField, SafeMapField, ) from apiserver.database.model import DbModelMixin, AttributedDocument from apiserver.database.model.base import ProperDictMixin, GetMixin from apiserver.database.model.company import Company from apiserver.database.model.metadata import MetadataItem from apiserver.database.model.task.task import Task class Entry(EmbeddedDocument, ProperDictMixin): """ Entry representing a task waiting in the queue """ task = StringField(required=True, reference_field=Task) """ Task ID """ added = DateTimeField(required=True) """ Added to the queue """ class Queue(DbModelMixin, Document): _field_collation_overrides = { "metadata.": AttributedDocument._numeric_locale, } get_all_query_options = GetMixin.QueryParameterOptions( pattern_fields=("name",), list_fields=("tags", "system_tags", "id", "metadata.*"), ) meta = { "db_alias": Database.backend, "strict": strict, } id = StringField(primary_key=True) name = StrippedStringField( required=True, unique_with="company", min_length=3, user_set_allowed=True ) company = StringField(required=True, reference_field=Company) created = DateTimeField(required=True) tags = SafeSortedListField( StringField(required=True), default=list, user_set_allowed=True ) system_tags = SafeSortedListField(StringField(required=True), user_set_allowed=True) entries = EmbeddedDocumentListField(Entry, default=list) last_update = DateTimeField() metadata = SafeMapField( field=EmbeddedDocumentField(MetadataItem), user_set_allowed=True )