Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def update_job(self, job: APJob) -> None:
"""Update the next_run_time for the job."""
db_job = query_unique(Job, id=job.id)
db_job.next_run_time = job.next_run_time
update(db_job)
def _get_jobs(self, conditions=None):
jobs = []
failed_jobs = []
for job in query(Job, filter_params=conditions, order_by="next_run_time"):
try:
jobs.append(construct_job(job, self._scheduler, self._alias))
except Exception as ex:
failed_jobs.append(job)
logger.exception(
f"Exception while restoring job {job.id}, about to remove: {ex}"
)
# Remove all the jobs we failed to restore
for job in failed_jobs:
delete(job)
return jobs
def _get_jobs(self, conditions=None):
jobs = []
failed_jobs = []
for job in query(Job, filter_params=conditions, order_by="next_run_time"):
try:
jobs.append(construct_job(job, self._scheduler, self._alias))
except Exception as ex:
failed_jobs.append(job)
logger.exception(
f"Exception while restoring job {job.id}, about to remove: {ex}"
)
# Remove all the jobs we failed to restore
for job in failed_jobs:
delete(job)
return jobs
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", 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:
"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", 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)}"
def lookup_job(self, job_id):
"""Get job from mongo, convert it to an apscheduler Job.
Args:
job_id: The ID of the job to get.
Returns:
An apscheduler job or None.
"""
return construct_job(query_unique(Job, id=job_id), self._scheduler, self._alias)
"date": brewtils.models.DateTrigger,
"cron": brewtils.models.CronTrigger,
"interval": brewtils.models.IntervalTrigger,
}
name = FieldBase(field_type="STRING", required=True)
trigger_type = FieldBase(field_type="STRING", required=True, choices=BrewtilsJob.TRIGGER_TYPES)
request_template = FieldBase(field_type=TRIGGER_MODEL_MAPPING, required=True, choices=list(TRIGGER_MODEL_MAPPING.values()))
request_template = FieldBase(field_type=brewtils.models.RequestTemplate, required=True)
misfire_grace_time = FieldBase(field_type="INT")
coalesce = FieldBase(field_type="BOOLEAN",default=True)
next_run_time = FieldBase(field_type="DATE")
success_count = FieldBase(field_type="INT", required=True, default=0, min_value=0)
error_count = FieldBase(field_type="INT", required=True, default=0, min_value=0)
status = FieldBase(field_type="STRING",
required=True, choices=BrewtilsJob.STATUS_TYPES, default="RUNNING"
)
max_instances = FieldBase(field_type="INT", 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)}"
year = FieldBase(field_type="STRING", default="*")
month = FieldBase(field_type="STRING", default="1")
day = FieldBase(field_type="STRING", default="1")
week = FieldBase(field_type="STRING", default="*")
day_of_week = FieldBase(field_type="STRING", default="*")
hour = FieldBase(field_type="STRING", default="0")
minute = FieldBase(field_type="STRING", default="0")
second = FieldBase(field_type="STRING", default="0")
start_date = FieldBase(field_type="DATE")
end_date = FieldBase(field_type="DATE")
timezone = FieldBase(field_type="STRING", default="utc", choices=pytz.all_timezones)
jitter = FieldBase(field_type="INT")
class Job:
brewtils_model = brewtils.models.Job
TRIGGER_MODEL_MAPPING = {
"date": brewtils.models.DateTrigger,
"cron": brewtils.models.CronTrigger,
"interval": brewtils.models.IntervalTrigger,
}
name = FieldBase(field_type="STRING", required=True)
trigger_type = FieldBase(field_type="STRING", required=True, choices=BrewtilsJob.TRIGGER_TYPES)
request_template = FieldBase(field_type=TRIGGER_MODEL_MAPPING, required=True, choices=list(TRIGGER_MODEL_MAPPING.values()))
request_template = FieldBase(field_type=brewtils.models.RequestTemplate, required=True)
misfire_grace_time = FieldBase(field_type="INT")
coalesce = FieldBase(field_type="BOOLEAN",default=True)
next_run_time = FieldBase(field_type="DATE")
success_count = FieldBase(field_type="INT", required=True, default=0, min_value=0)
error_count = FieldBase(field_type="INT", required=True, default=0, min_value=0)
logger = logging.getLogger(__name__)
ModelType = Union[
Type[brewtils.models.Command],
Type[brewtils.models.Instance],
Type[brewtils.models.Job],
Type[brewtils.models.Request],
Type[brewtils.models.RequestTemplate],
Type[brewtils.models.System],
Type[brewtils.models.Garden],
]
ModelItem = Union[
brewtils.models.Command,
brewtils.models.Instance,
brewtils.models.Job,
brewtils.models.Request,
brewtils.models.RequestTemplate,
brewtils.models.System,
brewtils.models.Garden,
]
_model_map = beer_garden.db.sql.models.schema_mapping
engine = None
Session = None
def from_brewtils(obj: ModelItem) -> SqlModel:
"""Convert an item from its Brewtils model to its one
Args:
def lookup_job(self, job_id):
"""Get job from mongo, convert it to an apscheduler Job.
Args:
job_id: The ID of the job to get.
Returns:
An apscheduler job or None.
"""
return construct_job(query_unique(Job, id=job_id), self._scheduler, self._alias)