From 12f6b562a0cae001662a3b42ff12db7200b39f0d Mon Sep 17 00:00:00 2001 From: dave Date: Sun, 14 Apr 2019 17:04:24 -0700 Subject: [PATCH] database uri option --- nodepupper/daemon.py | 11 ++++++++--- nodepupper/nodeops.py | 7 +++++-- requirements.txt | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/nodepupper/daemon.py b/nodepupper/daemon.py index c0aca8a..3e29eef 100644 --- a/nodepupper/daemon.py +++ b/nodepupper/daemon.py @@ -3,10 +3,10 @@ import cherrypy import logging from nodepupper.nodeops import NodeOps, NObject, NClass, NClassAttachment from jinja2 import Environment, FileSystemLoader, select_autoescape -from nodepupper.common import pwhash -import math from urllib.parse import urlparse +import math import yaml +import sys APPROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../")) @@ -278,7 +278,8 @@ def main(): parser.add_argument('-p', '--port', default=8080, type=int, help="tcp port to listen on") # parser.add_argument('-l', '--library', default="./library", help="library path") # parser.add_argument('-c', '--cache', default="./cache", help="cache path") - parser.add_argument('-s', '--database', default="./pupper.db", help="path to persistent sqlite database") + parser.add_argument('-s', '--database', default=os.environ.get('DATABASE_URI', None), + help="mysql:// connection uri") parser.add_argument('--debug', action="store_true", help="enable development options") args = parser.parse_args() @@ -286,6 +287,10 @@ def main(): logging.basicConfig(level=logging.INFO if args.debug else logging.WARNING, format="%(asctime)-15s %(levelname)-8s %(filename)s:%(lineno)d %(message)s") + if not args.database: + print("--database or $DATABASE_URI is required") + sys.exit(2) + library = NodeOps(args.database) tpl_dir = os.path.join(APPROOT, "templates") if not args.debug else "templates" diff --git a/nodepupper/nodeops.py b/nodepupper/nodeops.py index 8f2398b..c18b52f 100644 --- a/nodepupper/nodeops.py +++ b/nodepupper/nodeops.py @@ -1,3 +1,4 @@ +from urllib.parse import urlparse import ZODB from relstorage.storage import RelStorage from relstorage.options import Options @@ -42,8 +43,10 @@ class NClassAttachment(persistent.Persistent): class NodeOps(object): - def __init__(self, db_path): - self.mysql = MySQLAdapter(host="localhost", user="zodb", passwd="zodb", db="zodb", + def __init__(self, db_uri): + uri = urlparse(db_uri) + + self.mysql = MySQLAdapter(host=uri.hostname, user=uri.username, passwd=uri.password, db=uri.path[1:], options=Options(keep_history=False)) self.storage = RelStorage(adapter=self.mysql) self.db = ZODB.DB(self.storage) diff --git a/requirements.txt b/requirements.txt index fa408e6..7f02456 100644 --- a/requirements.txt +++ b/requirements.txt @@ -20,7 +20,7 @@ pycparser==2.19 PyMySQL==0.9.3 pytz==2018.5 PyYAML==3.13 -RelStorage==2.1.1 +-e git+ssh://git@git.davepedu.com:223/dave/relstorage.git@5ae138b71a0eeb740208e61cfd1662c49738ee45#egg=RelStorage requests==2.21.0 six==1.11.0 tempora==1.13