From 7e9fdd417b966b6adec89e19916fef633558a90d Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Sun, 19 Jan 2020 17:07:47 +0300 Subject: [PATCH 1/5] added sqlalchemy dependency --- requirements.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8cbd72e --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +SQLAlchemy==1.3.12 From b2b1fcc3cae482dcf51a92b66825215a9a73bd37 Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Sun, 19 Jan 2020 17:32:54 +0300 Subject: [PATCH 2/5] added SQLite bases to .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2f9c3cf..b29f4fe 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ venv/ .idea/ *.pyc *.swp -.mypy_cache/ \ No newline at end of file +.mypy_cache/ +*.db From ddc1f5dcb529f20c58ade31834a8a7069b8924b8 Mon Sep 17 00:00:00 2001 From: ZapAnton Date: Sun, 19 Jan 2020 18:29:34 +0300 Subject: [PATCH 3/5] Added sqlite db initialization --- db.py | 33 +++++++++++++++++++++++++++++++++ main | 6 +++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 db.py diff --git a/db.py b/db.py new file mode 100644 index 0000000..fc6d824 --- /dev/null +++ b/db.py @@ -0,0 +1,33 @@ +import os + +from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String + +SQLITE_DB_PATH = 'styles.db' +SQLITE_URL = f'sqlite:///{SQLITE_DB_PATH}' + + +def sqlite_db_exists() -> bool: + return os.path.exists(SQLITE_DB_PATH) + + +def create_styles_db(): + engine = create_engine(SQLITE_URL, echo=True) + meta = MetaData() + + styles = Table( + 'styles', + meta, + Column('id', Integer, primary_key=True), + Column('name', String), + Column('body', String), + ) + meta.create_all(engine) + engine.execute(styles.insert().values(name='first', body='###{@}###')) + engine.execute(styles.insert().values(name='second', body='@@@{@}@@@')) + + +def init_styles_db(): + if not sqlite_db_exists(): + print(f'sqlite database {SQLITE_DB_PATH} not found. Initializing DB.') + create_styles_db() + return diff --git a/main b/main index f470afc..b3e723d 100755 --- a/main +++ b/main @@ -3,6 +3,10 @@ Module for launching formater """ from cli import init_argparser +from db import init_styles_db + if __name__ == '__main__': - init_argparser() \ No newline at end of file + init_styles_db() + init_argparser() + From d41ec31b67677ae7815a9b51c3f7d111b893a94a Mon Sep 17 00:00:00 2001 From: hartred Date: Sun, 2 Feb 2020 18:01:30 +0300 Subject: [PATCH 4/5] passing db engine to the cli module --- cli.py | 6 +++--- db.py | 51 ++++++++++++++++++++++++++++++++------------------- main | 4 ++-- 3 files changed, 37 insertions(+), 24 deletions(-) diff --git a/cli.py b/cli.py index abbc72c..7818ae8 100644 --- a/cli.py +++ b/cli.py @@ -16,7 +16,7 @@ def chosen_style_exists(chosen_style: str) -> bool: return chosen_style in Styles.STYLE_MAPPING -def handle_arguments(parser: argparse.ArgumentParser): +def handle_arguments(parser: argparse.ArgumentParser, db_config): arguments = parser.parse_args() if arguments.show_styles: show_all_styles() @@ -31,7 +31,7 @@ def handle_arguments(parser: argparse.ArgumentParser): arguments.text) -def init_argparser(): +def init_argparser(db_config): parser = argparse.ArgumentParser( description='This is parser for the formatter flags') parser.add_argument('-a', @@ -47,4 +47,4 @@ def init_argparser(): action='store', help='text for formatting', nargs='?') - handle_arguments(parser) + handle_arguments(parser, db_config) diff --git a/db.py b/db.py index fc6d824..6feffc2 100644 --- a/db.py +++ b/db.py @@ -1,33 +1,46 @@ import os from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String +import sqlalchemy_utils SQLITE_DB_PATH = 'styles.db' SQLITE_URL = f'sqlite:///{SQLITE_DB_PATH}' -def sqlite_db_exists() -> bool: - return os.path.exists(SQLITE_DB_PATH) +class DBConfig(): + STYLE_TABLE_NAME = 'styles' -def create_styles_db(): - engine = create_engine(SQLITE_URL, echo=True) - meta = MetaData() + def __init__(self, db_url: str): + self.__engine = None + self.meta = None + self.db_url = db_url - styles = Table( - 'styles', - meta, - Column('id', Integer, primary_key=True), - Column('name', String), - Column('body', String), - ) - meta.create_all(engine) - engine.execute(styles.insert().values(name='first', body='###{@}###')) - engine.execute(styles.insert().values(name='second', body='@@@{@}@@@')) + def create_styles_table(self): + self.meta = MetaData() + + styles = Table( + self.STYLE_TABLE_NAME, + self.meta, + Column('id', Integer, primary_key=True), + Column('name', String), + Column('body', String), + ) + self.meta.create_all(self.__engine) + + def connect(self): + self.__engine = create_engine(self.db_url, echo=True) + + def styles_table_exists(self) -> bool: + return self.__engine.dialect.has_table(__engine, self.STYLE_TABLE_NAME) + + +def get_db_object(): + db_config = DBConfig(SQLITE_URL) + db_config.connect() + db_config.create_styles_table() + return db_config def init_styles_db(): - if not sqlite_db_exists(): - print(f'sqlite database {SQLITE_DB_PATH} not found. Initializing DB.') - create_styles_db() - return + return get_db_object() diff --git a/main b/main index b3e723d..7bad62f 100755 --- a/main +++ b/main @@ -7,6 +7,6 @@ from db import init_styles_db if __name__ == '__main__': - init_styles_db() - init_argparser() + db_config = init_styles_db() + init_argparser(db_config) From 85144591d6659297170fcc504a7698a067defa56 Mon Sep 17 00:00:00 2001 From: hartred Date: Sun, 16 Feb 2020 18:24:20 +0300 Subject: [PATCH 5/5] Integrated sqlalchemy into the all_styles function --- cli.py | 9 +++------ db.py | 46 +++++++++++++++++++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 15 deletions(-) diff --git a/cli.py b/cli.py index 7818ae8..26bbe44 100644 --- a/cli.py +++ b/cli.py @@ -4,11 +4,8 @@ from formatter import Styles, show_style -def show_all_styles(): - all_styles: List[str] = [ - f'{style.value}. {style.name}'.lower() - for style in Styles.STYLE_MAPPING.values() - ] +def show_all_styles(db_config): + all_styles: List[str] = db_config.list() print('\n'.join(all_styles)) @@ -19,7 +16,7 @@ def chosen_style_exists(chosen_style: str) -> bool: def handle_arguments(parser: argparse.ArgumentParser, db_config): arguments = parser.parse_args() if arguments.show_styles: - show_all_styles() + show_all_styles(db_config) return if not arguments.chosen_style: parser.print_help() diff --git a/db.py b/db.py index 6feffc2..993e386 100644 --- a/db.py +++ b/db.py @@ -1,6 +1,9 @@ import os +from typing import List + from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String +from sqlalchemy.sql import select import sqlalchemy_utils SQLITE_DB_PATH = 'styles.db' @@ -15,24 +18,49 @@ def __init__(self, db_url: str): self.__engine = None self.meta = None self.db_url = db_url + self.__styles = None def create_styles_table(self): self.meta = MetaData() + if not self.styles_table_exists(): + self.__styles = Table( + self.STYLE_TABLE_NAME, + self.meta, + Column('id', Integer, primary_key=True), + Column('name', String), + Column('body', String), + ) + self.meta.create_all(self.__engine) - styles = Table( - self.STYLE_TABLE_NAME, - self.meta, - Column('id', Integer, primary_key=True), - Column('name', String), - Column('body', String), - ) - self.meta.create_all(self.__engine) + conn = self.__engine.connect() + conn.execute(self.__styles.insert().values(name='hash_border', + body='')) + conn.execute(self.__styles.insert().values(name='plain_text', + body='')) + conn.execute(self.__styles.insert().values(name='at_sign', + body='')) + else: + self.__styles = Table( + self.STYLE_TABLE_NAME, + self.meta, + Column('id', Integer, primary_key=True), + Column('name', String), + Column('body', String), + ) def connect(self): self.__engine = create_engine(self.db_url, echo=True) def styles_table_exists(self) -> bool: - return self.__engine.dialect.has_table(__engine, self.STYLE_TABLE_NAME) + return self.__engine.dialect.has_table(self.__engine, + self.STYLE_TABLE_NAME) + + def list(self) -> List[str]: + conn = self.__engine.connect() + select_query = select([self.__styles]) + styles = conn.execute(select_query) + all_styles: List[str] = [style.name for style in styles] + return all_styles def get_db_object():