From e7c9a61b2e4e3e368f17bd92466c268e1fa96cab Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 25 Oct 2019 18:21:44 +0200 Subject: [PATCH] added lib to ftrack_server with functios able to handle mongo url parts --- pype/ftrack/__init__.py | 2 +- pype/ftrack/ftrack_server/lib.py | 68 ++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 pype/ftrack/ftrack_server/lib.py diff --git a/pype/ftrack/__init__.py b/pype/ftrack/__init__.py index bf18979e91..45ca8384b5 100644 --- a/pype/ftrack/__init__.py +++ b/pype/ftrack/__init__.py @@ -1,2 +1,2 @@ from .lib import * -from .ftrack_server import * +from .ftrack_server import FtrackServer diff --git a/pype/ftrack/ftrack_server/lib.py b/pype/ftrack/ftrack_server/lib.py new file mode 100644 index 0000000000..12159693fe --- /dev/null +++ b/pype/ftrack/ftrack_server/lib.py @@ -0,0 +1,68 @@ +import os +try: + from urllib.parse import urlparse, parse_qs +except ImportError: + from urlparse import urlparse, parse_qs + + +def ftrack_events_mongo_settings(): + host = None + port = None + username = None + password = None + collection = None + database = None + auth_db = "" + + if os.environ.get('FTRACK_EVENTS_MONGO_URL'): + result = urlparse(os.environ['FTRACK_EVENTS_MONGO_URL']) + + host = result.hostname + try: + port = result.port + except ValueError: + raise RuntimeError("invalid port specified") + username = result.username + password = result.password + try: + database = result.path.lstrip("/").split("/")[0] + collection = result.path.lstrip("/").split("/")[1] + except IndexError: + if not database: + raise RuntimeError("missing database name for logging") + try: + auth_db = parse_qs(result.query)['authSource'][0] + except KeyError: + # no auth db provided, mongo will use the one we are connecting to + pass + else: + host = os.environ.get('FTRACK_EVENTS_MONGO_HOST') + port = int(os.environ.get('FTRACK_EVENTS_MONGO_PORT', "0")) + database = os.environ.get('FTRACK_EVENTS_MONGO_DB') + username = os.environ.get('FTRACK_EVENTS_MONGO_USER') + password = os.environ.get('FTRACK_EVENTS_MONGO_PASSWORD') + collection = os.environ.get('FTRACK_EVENTS_MONGO_COL') + auth_db = os.environ.get('FTRACK_EVENTS_MONGO_AUTH_DB', 'avalon') + + return host, port, database, username, password, collection, auth_db + + +def get_ftrack_event_mongo_info(): + host, port, database, username, password, collection, auth_db = ftrack_events_mongo_settings() + user_pass = "" + if username and password: + user_pass = "{}:{}@".format(username, password) + + socket_path = "{}:{}".format(host, port) + + dab = "" + if database: + dab = "/{}".format(database) + + auth = "" + if auth_db: + auth = "?authSource={}".format(auth_db) + + url = "mongodb://{}{}{}{}".format(user_pass, socket_path, dab, auth) + + return url, database, collection