WIP: fix database backend
This commit is contained in:
		
							
								
								
									
										86
									
								
								persistence/database.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								persistence/database.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| from . import models | ||||
| from peewee import * | ||||
| from playhouse.pool import PooledMySQLDatabase | ||||
|  | ||||
|  | ||||
| import logging | ||||
| logger = logging.getLogger(__name__) | ||||
|  | ||||
|  | ||||
| from . import keys | ||||
| dbk = keys.db_keys | ||||
|  | ||||
|  | ||||
|  | ||||
| db_connection = PooledMySQLDatabase( | ||||
|     dbk["name"], | ||||
|     user=dbk["username"], | ||||
|     password=dbk["password"], | ||||
|     host=dbk["url"], | ||||
|     port=dbk["port"], | ||||
|     autorollback=True | ||||
| ) | ||||
|  | ||||
|  | ||||
| def auto_connect_db(action): | ||||
|     def decorated(func): | ||||
|         def wrapper(*args, **kwargs): | ||||
|             #before: | ||||
|             db_connection.connect() | ||||
|             ret = func(*args, **kwargs) | ||||
|             #after: | ||||
|             db_connection.close() | ||||
|             # also, action is in scope now | ||||
|             return ret | ||||
|          | ||||
|         return wrapper | ||||
|     return decorated | ||||
|  | ||||
|  | ||||
|  | ||||
| class DatabaseUtils: | ||||
|     """This object is the only database-related stuff getting exposed to the other modules. It must explicitly handle the connections!""" | ||||
|     def __init__(self) -> None: | ||||
|         # TODO specify arguments! | ||||
|         models.db.initialize(db_connection) | ||||
|         models.create_tables(db_connection) | ||||
|  | ||||
|  | ||||
|     @auto_connect_db | ||||
|     def chat_count(self, attribute): | ||||
|         if attribute == "read": | ||||
|             return models.ChatMetric.select().where(models.ChatMetric.read == True).count() | ||||
|         elif attribute == "send": | ||||
|             return models.ChatMetric.select().where(models.ChatMetric.send == True).count() | ||||
|         elif attribute == "execute": | ||||
|             return models.ChatMetric.select().where(models.ChatMetric.execute == True).count() | ||||
|         else: # does not exist | ||||
|             return -1 | ||||
|  | ||||
|  | ||||
|     def chat_log(self, **kwargs): | ||||
|         models.ChatMetric(**kwargs) | ||||
|  | ||||
|  | ||||
|     def list_get(self, list_name=""): | ||||
|         if not list_name: # return all | ||||
|             return models.List.select() | ||||
|         else: | ||||
|             return models.List.get(models.List.name == list_name) | ||||
|          | ||||
|      | ||||
|     def list_update(self, list_name, append="", replace=[]): | ||||
|         if replace: | ||||
|             models.List.get(models.List.name == list_name).set_content(replace) | ||||
|         elif append: | ||||
|             l_obj = models.List.get(models.List.name == list_name) | ||||
|             l = l_obj.content_as_list | ||||
|             l.append(append) | ||||
|             l_obj.set_content(l) | ||||
|         else: | ||||
|             logger.warning("Empty update_list() query was made. Ignoring") | ||||
|  | ||||
|  | ||||
|     def list_delete(self, list_name): | ||||
|         models.List.delete().where(self.db.lists.name == self.current_name).execute() | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Remy Moll
					Remy Moll