Exemple #1
0
 def copy_service_in_workflow(self, workflow_id, **kwargs):
     service_sets = list(set(kwargs["services"].split(",")))
     service_instances = objectify("service", service_sets)
     workflow = fetch("workflow", id=workflow_id)
     services, errors = [], []
     if kwargs["mode"] == "shallow":
         for service in service_instances:
             if not service.shared:
                 errors.append(f"'{service.name}' is not a shared service.")
             elif service in workflow.services:
                 errors.append(
                     f"This workflow already contains '{service.name}'.")
     if errors:
         return {"error": errors}
     for service in service_instances:
         if kwargs["mode"] == "deep":
             service = service.duplicate(workflow)
         else:
             workflow.services.append(service)
         services.append(service)
     workflow.last_modified = self.get_time()
     Session.commit()
     return {
         "services": [service.serialized for service in services],
         "update_time": workflow.last_modified,
     }
Exemple #2
0
 def update(self, **kwargs: Any) -> None:
     relation = relationships[self.__tablename__]
     modified = False
     for property, value in kwargs.items():
         if not hasattr(self, property):
             continue
         property_type = property_types.get(property, None)
         if property in relation:
             if relation[property]["list"]:
                 value = objectify(relation[property]["model"], value)
             else:
                 value = fetch(relation[property]["model"], id=value)
         if property_type == "bool":
             value = value not in (False, "false")
         old_value = getattr(self, property)
         if old_value != value:
             if (
                 isinstance(value, list)
                 and old_value
                 and set(value) == set(old_value)
             ):
                 continue
             modified = True
             setattr(self, property, value)
     if modified:
         self.last_modified = controller.get_time()
Exemple #3
0
 def add_jobs_to_workflow(self, workflow_id: int, job_ids: str) -> Dict[str, Any]:
     workflow = fetch("Workflow", id=workflow_id)
     jobs = objectify("Job", [int(job_id) for job_id in job_ids.split("-")])
     for job in jobs:
         job.workflows.append(workflow)
     now = self.get_time()
     workflow.last_modified = now
     return {"jobs": [job.serialized for job in jobs], "update_time": now}
Exemple #4
0
 def add_services_to_workflow(self, workflow_id, service_ids):
     workflow = fetch("workflow", id=workflow_id)
     services = objectify(
         "service",
         [int(service_id) for service_id in service_ids.split("-")])
     for service in services:
         service.workflows.append(workflow)
     now = self.get_time()
     workflow.last_modified = now
     return {
         "services": [service.serialized for service in services],
         "update_time": now,
     }
Exemple #5
0
 def update(self, **kwargs):
     relation = relationships[self.__tablename__]
     for property, value in kwargs.items():
         if not hasattr(self, property):
             continue
         property_type = property_types.get(property, None)
         if property in relation:
             if relation[property]["list"]:
                 value = objectify(relation[property]["model"], value)
             else:
                 value = fetch(relation[property]["model"], id=value)
         if property_type == "bool":
             value = value not in (False, "false")
         setattr(self, property, value)
Exemple #6
0
 def save_pool_objects(self, pool_id, **kwargs):
     pool = fetch("pool", id=pool_id)
     for obj_type in ("device", "link"):
         string_value = kwargs[f"string_{obj_type}s"]
         setattr(
             pool,
             f"{obj_type}s",
             ([
                 fetch(obj_type, name=name)
                 for name in string_value.strip().split(",")
             ] if string_value else objectify(obj_type,
                                              kwargs[f"{obj_type}s"])),
         )
     return pool.serialized
Exemple #7
0
 def save_pool_objects(self, pool_id, **kwargs):
     pool = fetch("pool", id=pool_id)
     for obj_type in ("device", "link"):
         string_objects = kwargs[f"string_{obj_type}s"]
         if string_objects:
             objects = []
             for name in [obj.strip() for obj in string_objects.split(",")]:
                 obj = fetch(obj_type, allow_none=True, name=name)
                 if not obj:
                     return {
                         "error":
                         f"{obj_type.capitalize()} '{name}' does not exist."
                     }
                 objects.append(obj)
         else:
             objects = objectify(obj_type, kwargs[f"{obj_type}s"])
         setattr(pool, f"{obj_type}_number", len(objects))
         setattr(pool, f"{obj_type}s", objects)
     return pool.serialized
Exemple #8
0
 def save_device_jobs(self, device_id: int, **kwargs: List[int]) -> None:
     fetch("Device", id=device_id).jobs = objectify("Job", kwargs["jobs"])