Skip to content

Commit

Permalink
Added Proper exception handling for database methods
Browse files Browse the repository at this point in the history
Signed-off-by: Ganesh Hubale <[email protected]>
  • Loading branch information
ganeshhubale committed Oct 8, 2024
1 parent 1e53fa3 commit 1d75ffd
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 44 deletions.
5 changes: 4 additions & 1 deletion README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,16 @@ How to run project?
$ git clone https://github.com/paint-it/pygenpass.git
* Install using pip or setup.py
* Install using pip

.. code-block:: bash
$ pip install pygenpass
* Install using setup file

.. code-block:: bash
$ pip3 install setuptools
$ python3 setup.py install
* Use command **pygenpass**
Expand Down
136 changes: 93 additions & 43 deletions pygenpass/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,78 +22,128 @@
import sqlite3 # library for database

from termcolor import colored

import sys

class DatabaseConnection:
""" Class of database entries for user's information."""

def __init__(self):
"""Used to create database and then to connect with generated databse file
Checked for table is created? if not then created as per required values """
self.con = sqlite3.connect("generated_password.db")
self.cursor_obj = self.con.cursor()
self.cursor_obj.execute(
"""CREATE TABLE IF NOT EXISTS passwords(
id integer PRIMARY KEY,portal_name text NOT NULL UNIQUE, password varchar,
creation_date varchar, email varchar, portal_url varchar)
"""
)
self.con.commit()
try:
self.con = sqlite3.connect("generated_password.db")
self.cursor_obj = self.con.cursor()
self.cursor_obj.execute(
"""CREATE TABLE IF NOT EXISTS passwords(
id integer PRIMARY KEY,portal_name text NOT NULL UNIQUE, password varchar,
creation_date varchar, email varchar, portal_url varchar)
"""
)
self.con.commit()
except sqlite3.Error as e:
# Catch any SQLite error and print the error message
print(f"Database error occurred: {e}")
sys.exit(1) # Exit the program if a database error occurs

except Exception as e:
# Catch any other exceptions and print the error message
print(f"An error occurred: {e}")
sys.exit(1) # Exit the program if an unexpected error occurs


def insert_data(self, portal_name, password, creation_date, email, portal_url):
"""Adding values into database"""
self.password = password
self.creation_date = creation_date
self.email = email
self.portal_name = portal_name
self.portal_url = portal_url
try:
self.cursor_obj.execute(
"""INSERT INTO passwords
(portal_name, password, creation_date, email, portal_url)
VALUES (?, ?, ?, ?, ?)""",
(self.portal_name, self.password, self.creation_date, self.email, self.portal_url),
(portal_name, password, creation_date, email, portal_url),
)
self.con.commit()
except sqlite3.IntegrityError:
print(
colored("Already exists with the same name. Try with another Portal_name", "green")
colored(f"Error: A record with the portal name '{portal_name}' already exists.", "green")
)
self.con.commit()

except sqlite3.Error as e:
print(f"Database error occurred while inserting data: {e}")

except Exception as e:
print(f"An unexpected error occurred: {e}")

def delete_data(self, portal_name):
"""Deleting values from database"""
self.portal_name = portal_name
self.cursor_obj.execute(
"""DELETE from passwords where portal_name = ?""", (self.portal_name,)
)
self.con.commit()
try:
self.cursor_obj.execute(
"""DELETE from passwords where portal_name = ?""", (portal_name,)
)
self.con.commit()
print(f"Data for portal '{portal_name}' deleted successfully.")

except sqlite3.Error as e:
print(f"Database error occurred while deleting data: {e}")

except Exception as e:
print(f"An unexpected error occurred: {e}")

def update_data(self, portal_name, password):
"""Updating values in database"""
self.portal_name = portal_name
self.password = password
self.cursor_obj.execute(
"""UPDATE passwords SET password =? WHERE portal_name =?""",
(self.password, self.portal_name),
)
self.con.commit()
try:
self.cursor_obj.execute(
"""UPDATE passwords SET password =? WHERE portal_name =?""",
(password, portal_name),
)
self.con.commit()
print(f"Password for portal '{portal_name}' updated successfully.")

except sqlite3.Error as e:
print(f"Database error occurred while updating data: {e}")

except Exception as e:
print(f"An unexpected error occurred: {e}")

def show_data(self, portal_name):
"""All inserted data will showed"""
self.portal_name = portal_name
self.cursor_obj.execute(
"""SELECT password FROM passwords WHERE portal_name=?""", (self.portal_name,)
)
rows = self.cursor_obj.fetchall()

for row in rows:
return row[0]
try:
self.cursor_obj.execute(
"""SELECT password FROM passwords WHERE portal_name=?""", (portal_name,)
)
row = self.cursor_obj.fetchone()

self.con.commit()
if row:
return row[0]
else:
print(f"No data found for portal '{portal_name}'.")
return None
except sqlite3.Error as e:
print(f"Database error occurred while fetching data: {e}")

except Exception as e:
print(f"An unexpected error occurred: {e}")

def show_all_data(self):
"""Showing all data saved in database"""
self.cursor_obj.execute("""SELECT * FROM passwords""")
rows = self.cursor_obj.fetchall()
return rows
self.con.commit()
try:
self.cursor_obj.execute("""SELECT * FROM passwords""")
rows = self.cursor_obj.fetchall()
return rows

except sqlite3.Error as e:
print(f"Database error occurred while fetching all data: {e}")

except Exception as e:
print(f"An unexpected error occurred: {e}")

def close_connection(self):
"""Safely close the database connection."""
try:
if self.con:
self.con.close()
print("Database connection closed successfully.")

except sqlite3.Error as e:
print(f"Error closing the database connection: {e}")

except Exception as e:
print(f"An unexpected error occurred while closing the connection: {e}")
9 changes: 9 additions & 0 deletions pygenpass/password.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ def all():
for row in all_pass:
table.append_row([row[0], row[1], row[2], row[3], row[4], row[5]])
print(table)
db_obj.close_connection()



@click.command(help="Delete password")
Expand All @@ -61,6 +63,7 @@ def delete():
print("No records found")
else:
db_obj.delete_data(portal_name=portal_name)
db_obj.close_connection()


@click.command(help="Update password")
Expand All @@ -73,6 +76,7 @@ def modify():
else:
mod = click.prompt("Enter new password", default="None", hide_input=True)
db_obj.update_data(portal_name=portal_name, password=mod)
db_obj.close_connection()


@click.command(help="Add existing passwords")
Expand All @@ -90,6 +94,8 @@ def add():
email=email,
portal_url=portal_url,
)
db_obj.close_connection()



@click.command(help="Create new password")
Expand All @@ -107,6 +113,8 @@ def create():
email=email,
portal_url=portal_url,
)
db_obj.close_connection()



@click.command(help="Show password")
Expand All @@ -117,3 +125,4 @@ def show():
print(colored("No records found", "green"))
else:
print(spass)
db_obj.close_connection()

0 comments on commit 1d75ffd

Please sign in to comment.