def add_order() -> uuid.UUID: """ Add an order that can be used for tests. The "edit" user is the editor. Returns: uuid.UUID: The _id of the order. """ mongo_db = db_connection() indata = structure.order() edit_user = mongo_db["users"].find_one({"auth_ids": USERS["edit"]}) indata.update( { "description": "Added by fixture.", "title": "Test title from fixture", "tags": ["fromFixture", "testing"], "authors": [edit_user["_id"]], "generators": [edit_user["_id"]], "organisation": edit_user["_id"], "editors": [edit_user["_id"]], } ) indata.update(TEST_LABEL) mongo_db["orders"].insert_one(indata) return indata["_id"]
def get_order_data_structure(): """ Get an empty order entry. Returns: flask.Response: JSON structure of a order. """ empty_order = structure.order() empty_order["_id"] = "" return utils.response_json({"order": empty_order})
def gen_orders(db, nr_orders: int = 300): uuids = [] facility_re = re.compile("facility[0-9]*::local") organisation_re = re.compile("organisation[0-9]*::local") user_re = re.compile(".*::local") facilities = tuple(db["users"].find({"auth_ids": facility_re})) organisations = tuple(db["users"].find({"auth_ids": organisation_re})) users = tuple( db["users"].find({"$and": [{"auth_ids": user_re}, {"permissions": "DATA_EDIT"}]}) ) for i in range(1, nr_orders + 1): order = structure.order() changes = { "authors": [ random.choice(users)["_id"] for _ in range(random.randint(0, 4)) ], "generators": [ random.choice(facilities)["_id"] for _ in range(random.randint(0, 4)) ], "organisation": random.choice(organisations)["_id"], "editors": [ random.choice(users + facilities)["_id"] for _ in range(random.randint(1, 5)) ], "description": make_description(), "title": f"Order {i} Title {lorem.sentence()[:-1]}", } if random.random() > 0.4: key = random.choice(EXTRA_KEYS) changes["properties"] = {key: random.choice(EXTRA_FIELDS[key])} changes["tags"] = list( set(random.choice(EXTRA_VALUES) for _ in range(random.randint(0, 6))) ) order.update(changes) uuids.append(db["orders"].insert_one(order).inserted_id) make_log( db, action="add", data=order, data_type="order", comment="Generated", user="******", ) return uuids
def add_order(): """ Add an order. Returns: flask.Response: Json structure with ``_id`` of the added order. """ # create new order new_order = structure.order() jsondata = flask.request.json if not jsondata or "order" not in jsondata or not isinstance( jsondata["order"], dict): flask.abort(status=400) indata = jsondata["order"] validation = utils.basic_check_indata(indata, new_order, ["_id", "datasets"]) if not validation.result: flask.abort(status=validation.status) # add current user to editors if no editors are defined if not indata.get("editors"): indata["editors"] = [flask.g.current_user["_id"]] # add current user if missing and only DATA_EDIT elif (not utils.req_has_permission("DATA_MANAGEMENT") and str(flask.g.current_user["_id"]) not in indata["editors"]): indata["editors"].append(flask.g.current_user["_id"]) # convert all incoming uuids to uuid.UUID indata = utils.prepare_for_db(indata) new_order.update(indata) result = utils.req_commit_to_db("orders", "add", new_order) if not result.log or not result.data: flask.abort(status=500) return utils.response_json({"_id": result.ins_id})
def add_dataset_full(): """ Add an order with a dataset. Returns: tuple: (order_uuid, dataset_uuid) """ mongo_db = db_connection() # prepare order_indata = structure.order() order_indata.update({"description": "Added by fixture.", "title": "Test title from fixture"}) order_indata.update(TEST_LABEL) edit_user = mongo_db["users"].find_one({"auth_ids": USERS["edit"]}) order_indata["authors"] = [edit_user["_id"]] order_indata["editors"] = [edit_user["_id"]] order_indata["generators"] = [edit_user["_id"]] order_indata["organisation"] = edit_user["_id"] dataset_indata = structure.dataset() dataset_indata.update({"description": "Added by fixture.", "title": "Test title from fixture"}) dataset_indata.update(TEST_LABEL) collection_indata = structure.collection() collection_indata.update( { "description": "Added by fixture.", "title": "Test title from fixture", "editors": [edit_user["_id"]], } ) collection_indata.update(TEST_LABEL) mongo_db["datasets"].insert_one(dataset_indata) order_indata["datasets"].append(dataset_indata["_id"]) collection_indata["datasets"].append(dataset_indata["_id"]) mongo_db["orders"].insert_one(order_indata) mongo_db["collections"].insert_one(collection_indata) return (order_indata["_id"], dataset_indata["_id"], collection_indata["_id"])
def gen_frontend_test_entries(db): apikey = {"salt": "abc", "key": "frontend"} apihash = utils.gen_api_key_hash(apikey["key"], apikey["salt"]) changes = [ { "_id": "u-4f2418f7-2609-43f1-8c7f-82c08e6daf26", "affiliation": "Frontend Test University", "api_key": apihash, "api_salt": apikey["salt"], "auth_ids": [f"author::frontend"], "email": f"*****@*****.**", "contact": f"*****@*****.**", "name": f"Frontend Author", "permissions": [], "url": "https://www.example.com/frontend_author", }, { "_id": "u-d54dc97d-ff9e-4e73-86bb-9c7a029e1b43", "affiliation": "Frontend Test University", "api_key": apihash, "api_salt": apikey["salt"], "auth_ids": [f"generator::frontend"], "email": f"*****@*****.**", "contact": f"*****@*****.**", "name": f"Frontend Generator", "permissions": ["DATA_EDIT"], "url": "https://www.example.com/frontend_generator", }, { "_id": "u-a5a7534b-1b49-41a5-b909-738e49cd137d", "affiliation": "Frontend Test University", "api_key": apihash, "api_salt": apikey["salt"], "auth_ids": [f"organisation::frontend"], "email": f"*****@*****.**", "contact": f"*****@*****.**", "name": f"Frontend Organisation", "permissions": ["DATA_MANAGEMENT", "USER_MANAGEMENT"], "url": "https://www.example.com/frontend_organisation", }, { "_id": "u-3a9a19a7-cd30-4c7b-b280-e35220e1a611", "affiliation": "Frontend Test University", "api_key": apihash, "api_salt": apikey["salt"], "auth_ids": [f"editor::frontend"], "email": f"*****@*****.**", "contact": f"*****@*****.**", "name": f"Frontend Editor", "permissions": ["DATA_EDIT"], "url": "https://www.example.com/frontend_editor", }, ] for entry in changes: user = structure.user() user.update(entry) db["users"].insert_one(user) make_log( db, action="add", data=user, data_type="user", comment="Generated", user="******", ) order = structure.order() changes = { "_id": "o-d4467732-8ddd-43a6-a904-5b7376f60e5c", "authors": ["u-4f2418f7-2609-43f1-8c7f-82c08e6daf26"], "generators": ["u-d54dc97d-ff9e-4e73-86bb-9c7a029e1b43"], "organisation": "u-a5a7534b-1b49-41a5-b909-738e49cd137d", "editors": ["u-3a9a19a7-cd30-4c7b-b280-e35220e1a611"], "description": "An order added for frontend tests", "title": f"Frontend Test Order", "properties": {"Type": "Frontend Test Entry"}, "tags": ["Frontend", "Test"], "datasets": ["d-79a755f1-69b0-4734-9977-ac945c4c51c1", "d-27cc1144-67bf-45b2-af21-425f9bfc7333"] } order.update(changes) db["orders"].insert_one(order) make_log( db, action="add", data=order, data_type="order", comment="Generated", user="******", ) dataset = structure.dataset() changes = { "_id": "d-79a755f1-69b0-4734-9977-ac945c4c51c1", "description": "A dataset added for frontend tests", "title": f"Frontend Test Dataset", "properties": {"Type": "Frontend Test Entry"}, "tags": ["Frontend", "Test"], } dataset.update(changes) db["datasets"].insert_one(dataset) make_log( db, action="add", data=dataset, data_type="dataset", comment="Generated", user="******", ) dataset = structure.dataset() changes = { "_id": "d-27cc1144-67bf-45b2-af21-425f9bfc7333", "description": "A dataset added for frontend tests 2", "title": f"Frontend Test Dataset 2", "properties": {"Type": "Frontend Test Entry"}, "tags": ["Frontend", "Test"], } dataset.update(changes) db["datasets"].insert_one(dataset) make_log( db, action="add", data=dataset, data_type="dataset", comment="Generated", user="******", ) collection = structure.collection() changes = { "_id": "c-21c8ecd1-9908-462f-ba84-3ca399074b36", "editors": ["u-3a9a19a7-cd30-4c7b-b280-e35220e1a611"], "description": "A collection added for frontend tests", "title": f"Frontend Test Collection", "properties": {"Type": "Frontend Test Entry"}, "tags": ["Frontend", "Test"], "datasets": ["d-79a755f1-69b0-4734-9977-ac945c4c51c1", "d-27cc1144-67bf-45b2-af21-425f9bfc7333"] } collection.update(changes) db["collections"].insert_one(collection) make_log( db, action="add", data=dataset, data_type="collection", comment="Generated", user="******", )