def test_get_schedule_with_name(self, client, schedule): url = "/schedules/{}".format(schedule["name"]) response = client.get(url) assert response.status_code == 200 del schedule["_id"] schedule["config"] = expanded_config(schedule["config"]) assert response.get_json() == schedule
def get(self, schedule_name: str): """Get schedule object.""" query = {"name": schedule_name} schedule = Schedules().find_one(query, {"_id": 0}) if schedule is None: raise ScheduleNotFound() schedule["config"] = expanded_config(schedule["config"]) return jsonify(schedule)
def get(self, schedule_name: str, token: AccessToken.Payload): """Get schedule object.""" query = {"name": schedule_name} schedule = Schedules().find_one(query, {"_id": 0}) if schedule is None: raise ScheduleNotFound() schedule["config"] = expanded_config(schedule["config"]) if not token or not token.get_permission("schedules", "update"): remove_secrets_from_response(schedule) return jsonify(schedule)
def request_a_schedule( schedule_name, requested_by: str, worker: str = None, priority: int = 0 ): """created requested_task for schedule_name if possible else None enabled=False schedules can't be requested schedule can't be requested if already requested on same worker""" # skip if already requested if RequestedTasks().count_documents( {"schedule_name": schedule_name, "worker": worker} ): return None schedule = Schedules().find_one( {"name": schedule_name, "enabled": True}, {"config": 1} ) # schedule might be disabled if not schedule: return None config = schedule["config"] # build and save command-information to config config = expanded_config(config) now = getnow() document = { "schedule_name": schedule_name, "status": TaskStatus.requested, "timestamp": {TaskStatus.requested: now}, "events": [{"code": TaskStatus.requested, "timestamp": now}], "requested_by": requested_by, "priority": priority, "worker": worker, "config": config, } if worker: document["worker"] = worker rt_id = RequestedTasks().insert_one(document).inserted_id document.update({"_id": str(rt_id)}) return document
def test_create_schedule(self, database, client, access_token, document): url = "/schedules/" response = client.post( url, json=document, headers={"Authorization": access_token} ) print(response.get_json()) assert response.status_code == 201 schedule_id = response.get_json()["_id"] url = "/schedules/{}".format(document["name"]) response = client.get(url, headers={"Authorization": access_token}) assert response.status_code == 200 response_json = response.get_json() document["config"] = expanded_config(document["config"]) response_json.pop("duration", None) # generated server-side assert response_json == document # remove from DB to prevent count mismatch on other tests database.schedules.delete_one({"_id": ObjectId(schedule_id)})
def request_a_schedule(schedule_name, requested_by: str, worker: str = None, priority: int = 0): """created requested_task for schedule_name if possible else None enabled=False schedules can't be requested schedule can't be requested if already requested on same worker""" # skip if already requested if RequestedTasks().count_documents({ "schedule_name": schedule_name, "worker": worker }): return None schedule = Schedules().find_one({ "name": schedule_name, "enabled": True }, { "config": 1, "notification": 1 }) # schedule might be disabled if not schedule: return None config = schedule["config"] # build and save command-information to config config = expanded_config(config) now = getnow() document = { "schedule_name": schedule_name, "status": TaskStatus.requested, "timestamp": { TaskStatus.requested: now }, "events": [{ "code": TaskStatus.requested, "timestamp": now }], "requested_by": requested_by, "priority": priority, "worker": worker, "config": config, # reverse ObjectId to randomize task ids "_id": ObjectId(str(ObjectId())[::-1]), "upload": { "zim": { "upload_uri": ZIM_UPLOAD_URI, "expiration": ZIM_EXPIRATION, "zimcheck": ZIMCHECK_OPTION, }, "logs": { "upload_uri": LOGS_UPLOAD_URI, "expiration": LOGS_EXPIRATION, }, }, "notification": schedule.get("notification", {}), } if worker: document["worker"] = worker rt_id = RequestedTasks().insert_one(document).inserted_id document.update({"_id": str(rt_id)}) return document