From 2d42c121419a6419ba47b0f874f393df8587852c Mon Sep 17 00:00:00 2001 From: Pim Beune <git@beune.dev> Date: Fri, 25 Mar 2022 17:05:28 +0100 Subject: [PATCH] Add peewee ORM --- database.py | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 database.py diff --git a/database.py b/database.py new file mode 100644 index 0000000..9f86a6d --- /dev/null +++ b/database.py @@ -0,0 +1,67 @@ +from peewee import MySQLDatabase, Model, CharField, BlobField, AutoField +from peewee import IntegerField, ForeignKeyField, DoubleField +import os + +db = MySQLDatabase(None) + +def connect(create_tables=False) -> None: + """Initializes the database session and connects to the database + :param create_tables: Creates database tables [default: False] + """ + user = os.getenv("DB_USER") + pw = os.getenv("DB_PASSWORD") + host = os.getenv("DB_HOST") + port = os.getenv("DB_PORT") + name = os.getenv("DB_DATABASE") + db.init(name, host=host, port=int(port), user=user, password=pw) + db.connect() + + if create_tables: + db.create_tables([State, User, Wallet, + WalletRequest, UserWallet, PendingTX]) + +class BaseModel(Model): + id = AutoField() + class Meta: + database = db + + +class State(BaseModel): + message = CharField() + menu = CharField() + prev_state = IntegerField() + + +class User(BaseModel): + telegram_id = IntegerField() + state_id = ForeignKeyField(State) + nickname = CharField() + variables = CharField() + + +class Wallet(BaseModel): + max_co_signers = IntegerField() + min_co_signers = IntegerField() + initiator_user_id = ForeignKeyField(User, backref='users') + name = CharField() + + +class WalletRequest(BaseModel): + token = CharField() + wallet_id = ForeignKeyField(User, backref='walletrequests') + + +class UserWallet(BaseModel): + user_id = ForeignKeyField(User, backref='wallets') + wallet_id = ForeignKeyField(Wallet, backref='wallets') + + +class PendingTX(BaseModel): + from_wallet_id = ForeignKeyField(Wallet, backref='pendingtx') + to_address = CharField() + amount = DoubleField() + fee_sat_per_byte = IntegerField() + status = IntegerField() + sign_count = IntegerField() + raw_data = BlobField() + txid = BlobField() diff --git a/requirements.txt b/requirements.txt index b4fae21..ebd2f51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ python-dotenv~=0.19.2 bitcoinlib~=0.6.4 python-telegram-bot~=13.11 -mysqlclient~=2.1.0 \ No newline at end of file +mysqlclient~=2.1.0 +peewee==3.14.10 -- GitLab