Exemple #1
0
class WorkloadCacheData(EmbeddedDocument):
    workload_system = StringField(choices=['loadleveler', 'slurm'])
    user_name = StringField()
    collected_time = DateTimeField()
    update_time = DateTimeField(default=datetime.datetime.utcnow)
    request = DictField()
    content = GenericEmbeddedDocumentField(
        choices=[JobListContent, QueueInfoListContent])
Exemple #2
0
class Job(Document, BrewtilsJob):

    meta = {
        "auto_create_index":
        False,
        "index_background":
        True,
        "indexes": [{
            "name": "next_run_time_index",
            "fields": ["next_run_time"],
            "sparse": True
        }],
    }

    TRIGGER_MODEL_MAPPING = {
        "date": DateTrigger,
        "cron": CronTrigger,
        "interval": IntervalTrigger,
    }

    name = StringField(required=True)
    trigger_type = StringField(required=True,
                               choices=BrewtilsJob.TRIGGER_TYPES)
    trigger = GenericEmbeddedDocumentField(
        choices=list(TRIGGER_MODEL_MAPPING.values()))
    request_template = EmbeddedDocumentField("RequestTemplate")
    misfire_grace_time = IntField()
    coalesce = BooleanField(default=True)
    next_run_time = DateTimeField()
    success_count = IntField(required=True, default=0, min_value=0)
    error_count = IntField(required=True, default=0, min_value=0)
    status = StringField(required=True,
                         choices=BrewtilsJob.STATUS_TYPES,
                         default="RUNNING")
    max_instances = IntField(default=3, min_value=1)

    def __str__(self):
        return BrewtilsJob.__str__(self)

    def __repr__(self):
        return BrewtilsJob.__repr__(self)

    def clean(self):
        """Validate before saving to the database"""

        if self.trigger_type not in self.TRIGGER_MODEL_MAPPING:
            raise ModelValidationError(
                "Cannot save job. No matching model for trigger type: %s" %
                self.trigger_type)

        if not isinstance(self.trigger,
                          self.TRIGGER_MODEL_MAPPING[self.trigger_type]):
            raise ModelValidationError(
                "Cannot save job. Trigger type: %s but got trigger: %s" %
                (self.trigger_type, type(self.trigger)))
Exemple #3
0
class BlobData(EmbeddedDocument):
    type = StringField(default=None)
    name = StringField(default=None)
    content = GenericEmbeddedDocumentField(default=None)

    meta = {
        'allow_inheritance': True,
    }

    def to_dict(self):
        if self.content is None:
            content_dict = None
        else:
            content_dict = self.content.to_dict()
        return {'type': self.type, 'name': self.name, 'content': content_dict}
Exemple #4
0
class Job(MongoModel, Document):
    brewtils_model = brewtils.models.Job

    meta = {
        "auto_create_index": False,
        "index_background": True,
        "indexes": [
            {"name": "next_run_time_index", "fields": ["next_run_time"], "sparse": True}
        ],
    }

    TRIGGER_MODEL_MAPPING = {
        "date": DateTrigger,
        "cron": CronTrigger,
        "interval": IntervalTrigger,
        "file": FileTrigger,
    }

    name = StringField(required=True)
    trigger_type = StringField(required=True, choices=BrewtilsJob.TRIGGER_TYPES)
    trigger = GenericEmbeddedDocumentField(choices=list(TRIGGER_MODEL_MAPPING.values()))
    request_template = EmbeddedDocumentField("RequestTemplate", required=True)
    misfire_grace_time = IntField()
    coalesce = BooleanField(default=True)
    next_run_time = DateTimeField()
    success_count = IntField(required=True, default=0, min_value=0)
    error_count = IntField(required=True, default=0, min_value=0)
    status = StringField(
        required=True, choices=BrewtilsJob.STATUS_TYPES, default="RUNNING"
    )
    max_instances = IntField(default=3, min_value=1)

    def clean(self):
        """Validate before saving to the database"""

        if self.trigger_type not in self.TRIGGER_MODEL_MAPPING:
            raise ModelValidationError(
                f"Cannot save job. No mongo model for trigger type {self.trigger_type}"
            )

        trigger_class = self.TRIGGER_MODEL_MAPPING.get(self.trigger_type)
        if not isinstance(self.trigger, trigger_class):
            raise ModelValidationError(
                f"Cannot save job. Expected trigger type {self.trigger_type} but "
                f"actual type was {type(self.trigger)}"
            )
Exemple #5
0
class Base(Document):
    ticket_id = IntField(default=None)
    owner = StringField(default=None)
    repo = StringField(default=None)
    timestamp = DateTimeField(required=True, default=datetime.datetime.utcnow)
    data = GenericEmbeddedDocumentField(default=None)

    meta = {'allow_inheritance': True, 'abstract': True}

    def set_data(self, data):
        if not isinstance(data, EmbeddedDocument):
            raise TypeError("data must be EmbeddedDocument.")
        self.data = data

    def is_valid(self):
        if self.ticket_id is None:
            return False
        if self.owner is None:
            return False
        if self.repo is None:
            return False
        return True

    def to_dict(self):
        if not self.is_valid():
            return None

        if self.data is None:
            data_dict = None
        elif hasattr(self.data, 'to_dict'):
            data_dict = self.data.to_dict()
        else:
            try:
                data_dict = dict(self.data)
            except ValueError as e:
                data_dict = self.data

        result = {
            'ticket_id': self.ticket_id,
            'owner': self.owner,
            'repo': self.repo,
            'timestamp': self.timestamp,
            'data': data_dict
        }
        return result
Exemple #6
0
class Cart(EmbeddedDocument):
    items = ListField(GenericEmbeddedDocumentField())
    subtotal = FloatField()

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def __getitem__(self, item: int) -> BaseItem:
        return self.items[item]

    def __setitem__(self, key: int, value: BaseItem):
        self.items[key] = value

    def __delitem__(self, key: int):
        if key < len(self.items):
            del self.items[key]

    def get_safe(self) -> dict:
        res = document_to_dict(self)
        for i in range(len(self.items)):
            res['items'][i] = self.items[i].get_safe()
        return res
 class Person(Document):
     settings = GenericEmbeddedDocumentField(choices=[BaseSettings])
 class Person(Document):
     settings = GenericEmbeddedDocumentField(choices=(AdminSettings,
                                                      NonAdminSettings))
 class BlogPost(Document):
     comments = ListField(
         GenericEmbeddedDocumentField(choices=(Comments, )))
 class Person(Document):
     name = StringField()
     likes = ListField(GenericEmbeddedDocumentField(choices=(Dish, )))
 class Person(Document):
     name = StringField()
     like = GenericEmbeddedDocumentField()