From ceca429d7870ea89c5c88804669c887774fb6c48 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Wed, 19 Aug 2020 23:14:45 -0700 Subject: [PATCH] Use configurable engine for db (#251) * Use configurable engine in db class constructor * Remove unused tables in db class * Rename squeak db class * Remove load db params comment --- MANIFEST.in | 1 - docker/sqkserver/Dockerfile | 2 +- squeakserver/db/db_engine.py | 17 +++++++++ squeakserver/{server => db}/db_params.py | 0 .../postgres_db.py => db/squeak_db.py} | 29 ++------------- squeakserver/server/main.py | 35 ++++++++++--------- 6 files changed, 40 insertions(+), 44 deletions(-) create mode 100644 squeakserver/db/db_engine.py rename squeakserver/{server => db}/db_params.py (100%) rename squeakserver/{server/postgres_db.py => db/squeak_db.py} (97%) diff --git a/MANIFEST.in b/MANIFEST.in index 654261e8..40c6ac84 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,2 +1 @@ -include init.sql global-exclude *.pyc diff --git a/docker/sqkserver/Dockerfile b/docker/sqkserver/Dockerfile index 755226de..3d91e1bf 100644 --- a/docker/sqkserver/Dockerfile +++ b/docker/sqkserver/Dockerfile @@ -19,7 +19,7 @@ RUN git clone https://github.com/googleapis/googleapis.git # Copy the source code. COPY squeakserver ./squeakserver COPY proto ./proto -COPY setup.py setup.cfg MANIFEST.in README.md init.sql install-rpc.sh wait-for-it.sh ./ +COPY setup.py setup.cfg MANIFEST.in README.md install-rpc.sh wait-for-it.sh ./ # Install the gRPC files. RUN chmod +x install-rpc.sh && \ diff --git a/squeakserver/db/db_engine.py b/squeakserver/db/db_engine.py new file mode 100644 index 00000000..e73e31e6 --- /dev/null +++ b/squeakserver/db/db_engine.py @@ -0,0 +1,17 @@ +from sqlalchemy import create_engine + + +def get_postgres_engine(user, password, host, database): + return create_engine( + get_postgres_connection_string( + user, password, host, database + ) + ) + +def get_postgres_connection_string(user, password, host, database): + return "postgresql://{}:{}@{}/{}".format( + user, + password, + host, + database, + ) diff --git a/squeakserver/server/db_params.py b/squeakserver/db/db_params.py similarity index 100% rename from squeakserver/server/db_params.py rename to squeakserver/db/db_params.py diff --git a/squeakserver/server/postgres_db.py b/squeakserver/db/squeak_db.py similarity index 97% rename from squeakserver/server/postgres_db.py rename to squeakserver/db/squeak_db.py index ca83b6b6..4e874c4f 100644 --- a/squeakserver/server/postgres_db.py +++ b/squeakserver/db/squeak_db.py @@ -25,27 +25,12 @@ from squeakserver.server.util import get_hash logger = logging.getLogger(__name__) -class PostgresDb: - def __init__(self, params, schema): - logger.info("Starting connection pool with params: {}".format(params)) +class SqueakDb: + def __init__(self, engine, schema): self.schema = schema - self.db_string = self.get_connection_string(params) - self.engine = create_engine(self.db_string) - + self.engine = engine self.metadata = MetaData(schema=schema) - self.users = Table('users', self.metadata, - Column('id', Integer, primary_key=True), - Column('name', String), - Column('fullname', String), - ) - - self.addresses = Table('addresses', self.metadata, - Column('id', Integer, primary_key=True), - Column('user_id', None, ForeignKey('users.id')), - Column('email_address', String, nullable=False) - ) - self.squeaks = Table('squeak', self.metadata, Column('hash', String(64), primary_key=True), Column('created', DateTime, server_default=func.now(), nullable=False), @@ -123,14 +108,6 @@ class PostgresDb: self.metadata.create_all(self.engine) logger.info("Called create_tables") - def get_connection_string(self, params): - return "postgresql://{}:{}@{}/{}".format( - params['user'], - params['password'], - params['host'], - params['database'], - ) - def init(self): """ Create the tables and indices in the database. """ logger.info("SqlAlchemy version: {}".format(sqlalchemy.__version__)) diff --git a/squeakserver/server/main.py b/squeakserver/server/main.py index e9c26b61..e394d141 100644 --- a/squeakserver/server/main.py +++ b/squeakserver/server/main.py @@ -12,10 +12,11 @@ from squeakserver.admin.squeak_admin_server_handler import SqueakAdminServerHand from squeakserver.admin.squeak_admin_server_servicer import SqueakAdminServerServicer from squeakserver.blockchain.bitcoin_blockchain_client import BitcoinBlockchainClient from squeakserver.common.lnd_lightning_client import LNDLightningClient +from squeakserver.db.db_params import parse_db_params +from squeakserver.db.db_engine import get_postgres_engine from squeakserver.node.squeak_node import SqueakNode -from squeakserver.server.db_params import parse_db_params from squeakserver.server.lightning_address import LightningAddressHostPort -from squeakserver.server.postgres_db import PostgresDb +from squeakserver.db.squeak_db import SqueakDb from squeakserver.server.squeak_server_handler import SqueakServerHandler from squeakserver.server.squeak_server_servicer import SqueakServerServicer @@ -71,14 +72,20 @@ def load_admin_handler(lightning_client, squeak_node): return SqueakAdminServerHandler(lightning_client, squeak_node,) -def load_db_params(config, schema): - db_params = parse_db_params(config) - db_params['options'] = "--search_path={}".format(schema) - return db_params +def load_db_engine(config): + # TODO: check if using postgres + if True: + return get_postgres_engine( + config["postgresql"]["user"], + config["postgresql"]["password"], + config["postgresql"]["host"], + config["postgresql"]["database"], + ) -def load_postgres_db(db_params, schema): - return PostgresDb(db_params, schema) +def load_db(config, schema): + engine = load_db_engine(config) + return SqueakDb(engine, schema) def load_blockchain_client(config): @@ -144,14 +151,10 @@ def run_server(config): logger.info("network: " + network) SelectParams(network) - # load the db params - db_params = load_db_params(config, network) - logger.info("db params: " + str(db_params)) - # load postgres db - postgres_db = load_postgres_db(db_params, network) - logger.info("postgres_db: " + str(postgres_db)) - postgres_db.init() + squeak_db = load_db(config, network) + logger.info("squeak_db: " + str(squeak_db)) + squeak_db.init() # load the price price = load_price(config) @@ -168,7 +171,7 @@ def run_server(config): # Create and start the squeak node squeak_node = SqueakNode( - postgres_db, + squeak_db, blockchain_client, lightning_client, lightning_host_port,