From e98ab90991923a71734c7c60b3239fc7a9908e7a Mon Sep 17 00:00:00 2001 From: Balshgit <71835315+Balshgit@users.noreply.github.com> Date: Wed, 21 Jul 2021 15:03:03 +0300 Subject: [PATCH 1/3] change execution_time decorator --- decorators.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/decorators.py b/decorators.py index dd09d27..2e5213d 100644 --- a/decorators.py +++ b/decorators.py @@ -13,25 +13,30 @@ def func_exec_count(func): return new_func -def execution_time(func): - @wraps(func) - def exec_func(*args, **kwargs): - now = datetime.now() - func_result = func(*args, **kwargs) - end = datetime.now() - print('time to execute', (end - now).seconds) - return func_result - return exec_func +def execution_time(time_form='sec'): + multiply = {'sec': 1, 'min': 60, 'hour': 3600} + + def wrapper(func): + @wraps(func) + def new_func(*args, **kwargs): + begin = datetime.now() + result = func(*args, **kwargs) + end = datetime.now() + exec_time = (end - begin).seconds / multiply[time_form] + print(f'Duration, {time_form}: {exec_time}') + return result + return new_func + return wrapper @func_exec_count -@execution_time +@execution_time() def summary(x: int, y: int) -> int: z = x + y return z -@execution_time +@execution_time(time_form='min') def main(): result = 0 for i in range(1, 11): From 95f110920717ba9c2af52532ecebdaccdaa374d5 Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev <71835315+Balshgit@users.noreply.github.com> Date: Thu, 29 Jul 2021 22:36:41 +0300 Subject: [PATCH 2/3] added sqlalchemy example --- sqlalchemy | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 sqlalchemy diff --git a/sqlalchemy b/sqlalchemy new file mode 100644 index 0000000..969b06e --- /dev/null +++ b/sqlalchemy @@ -0,0 +1,177 @@ +from sqlalchemy import create_engine +from sqlalchemy import Table, Column, String, MetaData, DATETIME, CHAR, INTEGER +from sqlalchemy.orm import Session, sessionmaker +from datetime import datetime, timezone, timedelta +from pathlib import Path +from decouple import AutoConfig + + +BASE_DIR = PurePath(__file__).parent.parent +config = AutoConfig(search_path=BASE_DIR.joinpath('config')) + +DATABASE_USER = config('POSTGRES_USER') +DATABASE_NAME = config('POSTGRES_DB') +DATABASE_PASSWORD = config('POSTGRES_PASSWORD') +DATABASE_HOST = config('DATABASE_HOST') +DATABASE_PORT = config('DATABASE_PORT') + + +engine = create_engine( + f'postgresql+psycopg2://{DATABASE_USER}:{DATABASE_PASSWORD}@' + f'{DATABASE_HOST}:{DATABASE_PORT}/{DATABASE_NAME}') + +session_factory = sessionmaker(engine) +session = session_factory() + + +meta = MetaData(engine) + + +def get_now(offset): + _offset = timezone(timedelta(hours=offset)) + now = datetime.now(_offset) + return now + + +announce = Table('accounts_announce', meta, + Column('id', INTEGER, primary_key=True), + Column('announce', String, nullable=True, default=''), + Column('created', DATETIME), + Column('author', CHAR, nullable=False), + ) + + +bot_users_table = Table('accounts_botusers', meta, + Column('id', INTEGER, primary_key=True), + Column('chat_id', CHAR, nullable=False), + Column('nickname', CHAR, nullable=True, ), + Column('name', CHAR, nullable=True, ), + Column('telephone', CHAR, nullable=True), + Column('location', CHAR, nullable=True, default=''), + Column('user_created', DATETIME) + ) + + +users_messages = Table('accounts_usersmessages', meta, + Column('id', INTEGER, primary_key=True), + Column('chat_id_id', INTEGER, nullable=True), + Column('nickname', CHAR, nullable=True), + Column('name', CHAR, nullable=True), + Column('message', String, nullable=False), + Column('location', CHAR, nullable=True), + Column('message_time', DATETIME), + Column('status', CHAR, nullable=True, default='') + ) + +reply_messages = Table('accounts_messagesreplys', meta, + Column('id', INTEGER, primary_key=True), + Column('chat_id_id', INTEGER, nullable=True), + Column('nickname', CHAR, nullable=True), + Column('name', CHAR, nullable=True), + Column('message', String, nullable=False), + Column('message_time', DATETIME), + Column('status', CHAR, nullable=True, default='') + ) + + +def db_insert_or_update(chat_id, nickname=None, name=None, + telephone=None, location=None, + ): + + with engine.connect() as conn: + try: + insert_statement = bot_users_table.insert().values(chat_id=chat_id, + nickname=nickname, + name=name, + telephone=telephone, + location=location, + user_created=get_now(3) + ) + conn.execute(insert_statement) + except: + insert_statement = bot_users_table.update().values(nickname=nickname, + name=name, + telephone=telephone + ).\ + where(bot_users_table.c.chat_id == chat_id) + conn.execute(insert_statement) + + +def db_get_contact_number(chat_id): + try: + user = session.query(bot_users_table)\ + .filter(bot_users_table.c.chat_id == chat_id).one() + return user.telephone + except: + pass + + +def db_get_location(chat_id): + + try: + user = session.query(bot_users_table)\ + .filter(bot_users_table.c.chat_id == chat_id).one() + return user.location + except: + pass + + +def db_get_id(chat_id): + + try: + user = session.query(bot_users_table) \ + .filter(bot_users_table.c.chat_id == chat_id).one() + return user.id + except(Exception) as e: + print('ERORO chat ID', e) + pass + + +def db_update_location(chat_id, location): + with engine.connect() as conn: + try: + insert_statement = bot_users_table.update().values(location=location). \ + where(bot_users_table.c.chat_id == chat_id) + conn.execute(insert_statement) + except Exception as e: + print('ERROR!!!!!!!!!!!!!!!!', e) + pass + + +def db_insert_reply_message(chat_id_id, nickname=None, name=None, reply_message=None): + + with engine.connect() as conn: + + insert_statement = reply_messages.insert().values(chat_id_id=chat_id_id, + nickname=nickname, + name=name, + message=reply_message, + message_time=get_now(3) + ) + conn.execute(insert_statement) + + +def db_insert_user_message(chat_id_id, nickname=None, location=None, + name=None, message=None): + + with engine.connect() as conn: + + insert_statement = users_messages.insert().values(chat_id_id=chat_id_id, + nickname=nickname, + name=name, + message=message, + location=location, + message_time=get_now(3) + ) + conn.execute(insert_statement) + + +def db_insert_announce(author, bot_announce): + + with engine.connect() as conn: + + insert_statement = announce.insert().values(announce=bot_announce, + author=author, + created=get_now(3) + ) + conn.execute(insert_statement) From 176b342065bcfbd6028238ae0fdf69ce08c343c1 Mon Sep 17 00:00:00 2001 From: Dmitry Afanasyev <71835315+Balshgit@users.noreply.github.com> Date: Thu, 29 Jul 2021 22:38:38 +0300 Subject: [PATCH 3/3] add sqlalchemy.py --- sqlalchemy => sqlalchemy.py | 9 +++++++++ 1 file changed, 9 insertions(+) rename sqlalchemy => sqlalchemy.py (95%) diff --git a/sqlalchemy b/sqlalchemy.py similarity index 95% rename from sqlalchemy rename to sqlalchemy.py index 969b06e..f572ef1 100644 --- a/sqlalchemy +++ b/sqlalchemy.py @@ -175,3 +175,12 @@ def db_insert_announce(author, bot_announce): created=get_now(3) ) conn.execute(insert_statement) + + +# usage: + +# db_insert_or_update(chat_id='417070387', nickname='Balsh', name='Dmitry', telephone='23432432') +# print(db_get_contact_number('417070387')) +# db_insert_reply_message(chat_id='1660356916', reply_message='asdasd') +# db_update_location(chat_id='1660356916', location='lsdkjfldskj') +# print(db_get_id('417070387'))