From 8187a8a0dd125a8f1f7af41ce3d6a7ee02ae3c5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 3 Nov 2017 17:39:54 +0100 Subject: [PATCH] Moved some useful code from Flamenco to Pillar --- pillar/api/projects/utils.py | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/pillar/api/projects/utils.py b/pillar/api/projects/utils.py index 7ae591b1..9840c611 100644 --- a/pillar/api/projects/utils.py +++ b/pillar/api/projects/utils.py @@ -144,3 +144,35 @@ def project_id(project_url: str) -> ObjectId: if not proj: raise ValueError(f'project with url={project_url!r} not found') return proj['_id'] + + +def get_project(project_url: str) -> dict: + """Find a project in the database, raises ValueError if not found. + + :param project_url: URL of the project + """ + + proj_coll = current_app.db('projects') + project = proj_coll.find_one({'url': project_url, '_deleted': {'$ne': True}}) + if not project: + raise ValueError(f'project url={project_url!r} does not exist') + + return project + + +def put_project(project: dict): + """Puts a project into the database via Eve. + + :param project: the project data, should be the entire project document + :raises ValueError: if the project cannot be saved. + """ + + from pillar.api.utils import remove_private_keys + + pid = ObjectId(project['_id']) + proj_no_priv = remove_private_keys(project) + result, _, _, status_code = current_app.put_internal('projects', proj_no_priv, _id=pid) + + if status_code != 200: + raise ValueError(f"Can't update project {pid}, " + f"status {status_code} with issues: {result}")