mekasu0124

Untitled

Sep 20th, 2024
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.62 KB | None | 0 0
  1. from api.models import models
  2. from api.validators import validator
  3.  
  4. from typing import List
  5.  
  6. import sqlite3 as sql
  7. import os
  8. import uuid
  9.  
  10. class DbEngine:
  11.     def create_db_path(self):
  12.         curr_dir = os.getcwd()
  13.         api_dir = os.path.join(curr_dir, 'api')
  14.         db_dir = os.path.join(api_dir, 'database')
  15.         db_file = os.path.join(db_dir, 'main.db')
  16.  
  17.         return db_file
  18.    
  19.     def create_tables(self) -> bool:
  20.         file_path = self.create_path()
  21.  
  22.         with sql.connect(file_path) as mdb:
  23.             cursor = mdb.cursor()
  24.  
  25.             try:
  26.                 cursor.execute('CREATE TABLE IF NOT EXISTS Users (Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Username TEXT, Password TEXT)')
  27.             except Exception as e:
  28.                 raise e
  29.             except sql.Exception as err:
  30.                 raise err
  31.            
  32.             try:
  33.                 cursor.execute('CREATE TABLE IF NOT EXISTS Passwords (Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Username TEXT, Password TEXT)')
  34.             except Exception as e:
  35.                 raise e
  36.             except sql.Exception as err:
  37.                 raise err
  38.            
  39.     def query_user_login(self, user: models.User) -> List[bool, str]:
  40.         file_path = self.create_db_path()
  41.  
  42.         with sql.connect(file_path) as mdb:
  43.             cursor = mdb.cursor()
  44.  
  45.             try:
  46.                 results = cursor.execute(
  47.                     'SELECT Password FROM Users WHERE Username=?',
  48.                     (user.username, )
  49.                 ).fetchone()
  50.  
  51.                 if not results or results[0]:
  52.                     return False
  53.  
  54.                 return True
  55.             except Exception as e:
  56.                 raise e
  57.             except sql.Error as err:
  58.                 raise err
  59.            
  60.     def save_user(self, user: models.User):
  61.         file_path = self.create_db_path()
  62.  
  63.         with sql.connect(file_path) as mdb:
  64.             cursor = mdb.cursor()
  65.  
  66.             generated_id = uuid.uuid4()
  67.  
  68.             all_ids = self.get_ids()
  69.  
  70.             while generated_id in all_ids:
  71.                 generated_id = uuid.uuid4()
  72.  
  73.             try:
  74.                 cursor.execute(
  75.                     'INSERT OR IGNORE INTO Users(Id, Username, Password) VALUES (?,?,?)',
  76.                     (generated_id, user.username, user.password)
  77.                 )
  78.                 return True
  79.             except Exception as e:
  80.                 raise e
  81.             except sql.Error as err:
  82.                 raise err
  83.            
  84.     def get_user(self, username: str) -> models.User:
  85.         file_path = self.create_db_path()
  86.  
  87.         with sql.connect(file_path) as mdb:
  88.             cursor = mdb.cursor()
  89.  
  90.             srch = 'SELECT Id, Password FROM Users WHERE Username=?'
  91.             srch2 = 'SELECT Passwords FROM Passwords WHERE Username=?'
  92.  
  93.             try:
  94.                 user_results = cursor.execute(srch, (username, )).fetchone()
  95.  
  96.                 if not user_results[0]:
  97.                     return False
  98.                
  99.                 password_results = cursor.execute(srch2, (username, )).fetchall()
  100.  
  101.                 return_user = models.User(
  102.                     id = user_results[0],
  103.                     username = username,
  104.                     password = user_results[1],
  105.                     saved_passwords = []
  106.                 )
  107.  
  108.                 for password in password_results:
  109.                     return_user.saved_passwords.append(password[0])
  110.  
  111.                 return return_user
  112.             except Exception as e:
  113.                 raise e
  114.             except sql.Error as err:
  115.                 raise err
Advertisement
Add Comment
Please, Sign In to add comment