From 9057c9fea188308e9d4afd0893db7413dd0f4cf2 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 15 Sep 2022 09:54:38 -0400 Subject: [PATCH 1/9] gitignore vscode --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d94c0ee..3588129 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ htmlcov/ .idea/workspace.xml *.swp *.swo +.vscode # others *.pyc From d4f19255131594734d5bdef7e517c93531bf8a6f Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 15 Sep 2022 09:59:33 -0400 Subject: [PATCH 2/9] add debug flag to config --- chord_drs/config.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/chord_drs/config.py b/chord_drs/config.py index e88a269..c8ee1ec 100644 --- a/chord_drs/config.py +++ b/chord_drs/config.py @@ -58,7 +58,9 @@ class Config: MINIO_USERNAME: Optional[str] = MINIO_USERNAME MINIO_PASSWORD: Optional[str] = MINIO_PASSWORD MINIO_BUCKET: Optional[str] = os.environ.get("MINIO_BUCKET") if MINIO_URL else None - + BENTO_DEBUG=os.environ.get("FLASK_DEBUG", os.environ.get("FLASK_ENV", "production")).strip().lower() in ( + "true", "1", "development"), + print(f"[{SERVICE_NAME}] Using: database URI {Config.SQLALCHEMY_DATABASE_URI}") print(f"[{SERVICE_NAME}] data source {Config.SERVICE_DATA_SOURCE}") From 5cdff7ccfb96874395771e019cfad8446af2c3c8 Mon Sep 17 00:00:00 2001 From: Julian Date: Thu, 15 Sep 2022 16:04:28 -0400 Subject: [PATCH 3/9] add git information to drs service info --- chord_drs/routes.py | 51 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/chord_drs/routes.py b/chord_drs/routes.py index 6d50414..8ad3fbd 100644 --- a/chord_drs/routes.py +++ b/chord_drs/routes.py @@ -1,5 +1,6 @@ import re import urllib.parse +import subprocess from bento_lib.responses import flask_errors from flask import ( @@ -141,23 +142,49 @@ def build_object_json(drs_object: DrsObject, inside_container: bool = False) -> return response +def get_isDebbuging(): + if (current_app.config["BENTO_DEBUG"][0]==True): + return True + else: + return False + @drs_service.route("/service-info", methods=["GET"]) def service_info(): # Spec: https://github.com/ga4gh-discovery/ga4gh-service-info - return jsonify({ - "id": current_app.config["SERVICE_ID"], - "name": SERVICE_NAME, - "type": SERVICE_TYPE, - "description": "Data repository service (based on GA4GH's specs) for a Bento platform node.", - "organization": { - "name": "C3G", - "url": "http://c3g.ca" - }, - "contactUrl": "mailto:simon.chenard2@mcgill.ca", - "version": __version__, - }) + service_dict= { + "id": current_app.config["SERVICE_ID"], + "name": SERVICE_NAME, + "type": SERVICE_TYPE, + "description": "Data repository service (based on GA4GH's specs) for a Bento platform node.", + "organization": { + "name": "C3G", + "url": "http://c3g.ca" + }, + "contactUrl": "mailto:simon.chenard2@mcgill.ca", + "version": __version__, + } + if get_isDebbuging()== False: + return jsonify(service_dict.update({"environment": "production"})) + else: + git_info={"environment": "development"} + try: + subprocess.run(['git', 'config', '--global', '--add', 'safe.directory', '/drs/bento_drs']) + res_tag = subprocess.check_output(['git', 'describe', '--tags', '--abbrev=0']) + if res_tag is not None: + git_tag= res_tag.decode('utf-8').rstrip() + git_info["git_tag"]=git_tag + res_branch= subprocess.check_output(["git", "branch", "--show-current"]) + if res_branch is not None: + git_branch= res_branch.decode('utf-8').rstrip() + git_info["git_branch"]= git_branch + service_dict.update(git_info) + return jsonify(service_dict) + + except: + return flask_errors.flask_not_found_error("Error in dev-mode retrieving git information") + @drs_service.route("/objects/", methods=["GET"]) @drs_service.route("/ga4gh/drs/v1/objects/", methods=["GET"]) From f4949571a775b2add8ef21e2035a52058ac5c551 Mon Sep 17 00:00:00 2001 From: Julian Date: Fri, 16 Sep 2022 12:22:12 -0400 Subject: [PATCH 4/9] retrieve git info for drs --- chord_drs/routes.py | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/chord_drs/routes.py b/chord_drs/routes.py index 8ad3fbd..cf0b17b 100644 --- a/chord_drs/routes.py +++ b/chord_drs/routes.py @@ -142,17 +142,11 @@ def build_object_json(drs_object: DrsObject, inside_container: bool = False) -> return response -def get_isDebbuging(): - if (current_app.config["BENTO_DEBUG"][0]==True): - return True - else: - return False - @drs_service.route("/service-info", methods=["GET"]) def service_info(): # Spec: https://github.com/ga4gh-discovery/ga4gh-service-info - service_dict= { + info= { "id": current_app.config["SERVICE_ID"], "name": SERVICE_NAME, "type": SERVICE_TYPE, @@ -163,27 +157,25 @@ def service_info(): }, "contactUrl": "mailto:simon.chenard2@mcgill.ca", "version": __version__, + "environment": "prod" } - if get_isDebbuging()== False: - return jsonify(service_dict.update({"environment": "production"})) + if not current_app.config["BENTO_DEBUG"]: + return jsonify(info) else: - git_info={"environment": "development"} + info["environment"] = "dev" try: - subprocess.run(['git', 'config', '--global', '--add', 'safe.directory', '/drs/bento_drs']) - res_tag = subprocess.check_output(['git', 'describe', '--tags', '--abbrev=0']) - if res_tag is not None: - git_tag= res_tag.decode('utf-8').rstrip() - git_info["git_tag"]=git_tag + subprocess.run(["git", "config", "--global", "--add", "safe.directory", "./bento_drs"]) + res_tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) + if res_tag: + info["git_tag"] = res_tag.decode().rstrip() res_branch= subprocess.check_output(["git", "branch", "--show-current"]) - if res_branch is not None: - git_branch= res_branch.decode('utf-8').rstrip() - git_info["git_branch"]= git_branch - service_dict.update(git_info) - return jsonify(service_dict) + if res_branch: + info["git_branch"] = res_branch.decode().rstrip() + return jsonify(info) except: - return flask_errors.flask_not_found_error("Error in dev-mode retrieving git information") + return flask_errors.flask_internal_server_error("Error in dev-mode retrieving git information") @drs_service.route("/objects/", methods=["GET"]) From 2df7b7127f22c7318df66835627af2814ba58918 Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 19 Sep 2022 16:47:22 -0400 Subject: [PATCH 5/9] git path added, flake8 rev --- chord_drs/config.py | 5 ++--- chord_drs/routes.py | 39 +++++++++++++++++++++------------------ 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/chord_drs/config.py b/chord_drs/config.py index c8ee1ec..6df959c 100644 --- a/chord_drs/config.py +++ b/chord_drs/config.py @@ -58,9 +58,8 @@ class Config: MINIO_USERNAME: Optional[str] = MINIO_USERNAME MINIO_PASSWORD: Optional[str] = MINIO_PASSWORD MINIO_BUCKET: Optional[str] = os.environ.get("MINIO_BUCKET") if MINIO_URL else None - BENTO_DEBUG=os.environ.get("FLASK_DEBUG", os.environ.get("FLASK_ENV", "production")).strip().lower() in ( - "true", "1", "development"), - + BENTO_DEBUG = os.environ.get("FLASK_DEBUG", os.environ.get("FLASK_ENV", "production")) + print(f"[{SERVICE_NAME}] Using: database URI {Config.SQLALCHEMY_DATABASE_URI}") print(f"[{SERVICE_NAME}] data source {Config.SERVICE_DATA_SOURCE}") diff --git a/chord_drs/routes.py b/chord_drs/routes.py index cf0b17b..172f3ca 100644 --- a/chord_drs/routes.py +++ b/chord_drs/routes.py @@ -1,6 +1,7 @@ import re import urllib.parse import subprocess +import os from bento_lib.responses import flask_errors from flask import ( @@ -30,6 +31,8 @@ drs_service = Blueprint("drs_service", __name__) +path_for_git = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + def strtobool(val: str): return val.lower() in ("yes", "true", "t", "1", "on") @@ -146,18 +149,18 @@ def build_object_json(drs_object: DrsObject, inside_container: bool = False) -> @drs_service.route("/service-info", methods=["GET"]) def service_info(): # Spec: https://github.com/ga4gh-discovery/ga4gh-service-info - info= { - "id": current_app.config["SERVICE_ID"], - "name": SERVICE_NAME, - "type": SERVICE_TYPE, - "description": "Data repository service (based on GA4GH's specs) for a Bento platform node.", - "organization": { - "name": "C3G", - "url": "http://c3g.ca" - }, - "contactUrl": "mailto:simon.chenard2@mcgill.ca", - "version": __version__, - "environment": "prod" + info = { + "id": current_app.config["SERVICE_ID"], + "name": SERVICE_NAME, + "type": SERVICE_TYPE, + "description": "Data repository service (based on GA4GH's specs) for a Bento platform node.", + "organization": { + "name": "C3G", + "url": "http://c3g.ca" + }, + "contactUrl": "mailto:simon.chenard2@mcgill.ca", + "version": __version__, + "environment": "prod" } if not current_app.config["BENTO_DEBUG"]: @@ -165,18 +168,18 @@ def service_info(): else: info["environment"] = "dev" try: - subprocess.run(["git", "config", "--global", "--add", "safe.directory", "./bento_drs"]) + subprocess.run(["git", "config", "--global", "--add", "safe.directory", str(path_for_git)]) res_tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) if res_tag: info["git_tag"] = res_tag.decode().rstrip() - res_branch= subprocess.check_output(["git", "branch", "--show-current"]) + res_branch = subprocess.check_output(["git", "branch", "--show-current"]) if res_branch: info["git_branch"] = res_branch.decode().rstrip() return jsonify(info) - - except: - return flask_errors.flask_internal_server_error("Error in dev-mode retrieving git information") - + except Exception as e: + except_name = type(e).__name__ + return flask_errors.flask_internal_server_error("Error in dev-mode retrieving git information", except_name) + @drs_service.route("/objects/", methods=["GET"]) @drs_service.route("/ga4gh/drs/v1/objects/", methods=["GET"]) From a0feaa8720d41c138e1c9fb007d8dbe30647423b Mon Sep 17 00:00:00 2001 From: Paul Pillot Date: Fri, 7 Oct 2022 18:26:17 -0400 Subject: [PATCH 6/9] Make BENTO_DEBUG a boolean --- chord_drs/config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/chord_drs/config.py b/chord_drs/config.py index 6df959c..0fd246d 100644 --- a/chord_drs/config.py +++ b/chord_drs/config.py @@ -58,7 +58,8 @@ class Config: MINIO_USERNAME: Optional[str] = MINIO_USERNAME MINIO_PASSWORD: Optional[str] = MINIO_PASSWORD MINIO_BUCKET: Optional[str] = os.environ.get("MINIO_BUCKET") if MINIO_URL else None - BENTO_DEBUG = os.environ.get("FLASK_DEBUG", os.environ.get("FLASK_ENV", "production")) + BENTO_DEBUG = os.environ.get("FLASK_DEBUG", os.environ.get("FLASK_ENV", "production")).strip().lower() in ( + 'true', '1', 'development') print(f"[{SERVICE_NAME}] Using: database URI {Config.SQLALCHEMY_DATABASE_URI}") From 92fb9223c7feb3f887e6b28f1016f5d5dfaa5d2d Mon Sep 17 00:00:00 2001 From: Paul Pillot Date: Fri, 7 Oct 2022 18:27:44 -0400 Subject: [PATCH 7/9] use APP_DIR instead of `git_path`, refactor --- chord_drs/routes.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/chord_drs/routes.py b/chord_drs/routes.py index 172f3ca..aa87153 100644 --- a/chord_drs/routes.py +++ b/chord_drs/routes.py @@ -18,6 +18,7 @@ from urllib.parse import urljoin, urlparse from chord_drs import __version__ +from chord_drs.config import APP_DIR from chord_drs.constants import SERVICE_NAME, SERVICE_TYPE from chord_drs.data_sources import DATA_SOURCE_LOCAL, DATA_SOURCE_MINIO from chord_drs.db import db @@ -31,8 +32,6 @@ drs_service = Blueprint("drs_service", __name__) -path_for_git = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) - def strtobool(val: str): return val.lower() in ("yes", "true", "t", "1", "on") @@ -165,20 +164,22 @@ def service_info(): if not current_app.config["BENTO_DEBUG"]: return jsonify(info) - else: - info["environment"] = "dev" - try: - subprocess.run(["git", "config", "--global", "--add", "safe.directory", str(path_for_git)]) - res_tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) - if res_tag: - info["git_tag"] = res_tag.decode().rstrip() - res_branch = subprocess.check_output(["git", "branch", "--show-current"]) - if res_branch: - info["git_branch"] = res_branch.decode().rstrip() - return jsonify(info) - except Exception as e: - except_name = type(e).__name__ - return flask_errors.flask_internal_server_error("Error in dev-mode retrieving git information", except_name) + + info["environment"] = "dev" + try: + subprocess.run(["git", "config", "--global", "--add", "safe.directory", str(APP_DIR)]) + res_tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) + if res_tag: + info["git_tag"] = res_tag.decode().rstrip() + res_branch = subprocess.check_output(["git", "branch", "--show-current"]) + if res_branch: + info["git_branch"] = res_branch.decode().rstrip() + + except Exception as e: + except_name = type(e).__name__ + print("Error in dev-mode retrieving git information", except_name, e) + + return jsonify(info) @drs_service.route("/objects/", methods=["GET"]) From d58883ac2647592a0332f0371ef0383cf2c332a1 Mon Sep 17 00:00:00 2001 From: Paul Pillot Date: Fri, 7 Oct 2022 18:33:09 -0400 Subject: [PATCH 8/9] configure git at init only --- chord_drs/app.py | 5 +++++ chord_drs/routes.py | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/chord_drs/app.py b/chord_drs/app.py index 080f55e..b3e3063 100644 --- a/chord_drs/app.py +++ b/chord_drs/app.py @@ -1,4 +1,6 @@ import os +import subprocess + from bento_lib.responses import flask_errors from flask import Flask from flask_migrate import Migrate @@ -44,6 +46,9 @@ if not application.config["CHORD_URL"]: metrics.init_app(application) + if application.config["BENTO_DEBUG"]: + subprocess.run(["git", "config", "--global", "--add", "safe.directory", str(APP_DIR)]) + # # debugger section # Ensure 'debugpy' is installed (via requirements.txt or manually) DEBUG = os.environ.get('FLASK_DEBUG', False) diff --git a/chord_drs/routes.py b/chord_drs/routes.py index aa87153..1dad33a 100644 --- a/chord_drs/routes.py +++ b/chord_drs/routes.py @@ -1,7 +1,6 @@ import re import urllib.parse import subprocess -import os from bento_lib.responses import flask_errors from flask import ( @@ -18,7 +17,6 @@ from urllib.parse import urljoin, urlparse from chord_drs import __version__ -from chord_drs.config import APP_DIR from chord_drs.constants import SERVICE_NAME, SERVICE_TYPE from chord_drs.data_sources import DATA_SOURCE_LOCAL, DATA_SOURCE_MINIO from chord_drs.db import db @@ -167,7 +165,6 @@ def service_info(): info["environment"] = "dev" try: - subprocess.run(["git", "config", "--global", "--add", "safe.directory", str(APP_DIR)]) res_tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) if res_tag: info["git_tag"] = res_tag.decode().rstrip() From 488513174a4f3bbb0391ef523282e478427c94a9 Mon Sep 17 00:00:00 2001 From: Paul Pillot Date: Fri, 7 Oct 2022 18:38:33 -0400 Subject: [PATCH 9/9] bump version --- chord_drs/package.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chord_drs/package.cfg b/chord_drs/package.cfg index e8f8de6..941f38d 100644 --- a/chord_drs/package.cfg +++ b/chord_drs/package.cfg @@ -1,5 +1,5 @@ [package] name = chord_drs -version = 0.5.3 +version = 0.6.0 authors = Simon Chénard, David Lougheed author_emails = simon.chenard2@mcgill.ca, david.lougheed@mail.mcgill.ca