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
This commit is contained in:
Jonathan Zernik 2020-08-19 23:14:45 -07:00 committed by GitHub
parent 2735d80d3f
commit ceca429d78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 40 additions and 44 deletions

View file

@ -1,2 +1 @@
include init.sql
global-exclude *.pyc

View file

@ -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 && \

View file

@ -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,
)

View file

@ -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__))

View file

@ -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,