Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added Proper exception handling for database methods #76

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
- name: Setup python
uses: actions/setup-python@v1
with:
python-version: '3.7'
python-version: '3.9'
architecture: 'x64'

- name: Pre-Commit Checks
Expand Down
78 changes: 41 additions & 37 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,38 +1,42 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.4.0
hooks:
- id: trailing-whitespace
name: Trim Trailing Whitespace
language_version: python3
- id: end-of-file-fixer
name: File Ending
language_version: python3
- id: debug-statements
name: Debug Statments
language_version: python3
- id: flake8
name: Flake8
language_version: python3
verbose: true
- id: check-yaml
- repo: https://github.com/asottile/reorder_python_imports
rev: v1.8.0
hooks:
- id: reorder-python-imports
name: Reorder Python Imports
language_version: python3
- repo: https://github.com/psf/black
rev: 19.10b0
hooks:
- id: black
name: Formate with Black
args: [--safe, --quiet, --line-length, "100"]
language_version: python3
require_serial: true
- repo: https://github.com/asottile/pyupgrade
rev: v1.25.2
hooks:
- id: pyupgrade
name: Python Package Checks
language_version: python3
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.4.0
hooks:
- id: trailing-whitespace
name: Trim Trailing Whitespace
language_version: python3.9 # Updated to Python 3.9
- id: end-of-file-fixer
name: File Ending
language_version: python3.9 # Updated to Python 3.9
- id: debug-statements
name: Debug Statements
language_version: python3.9 # Updated to Python 3.9
- id: flake8
name: Flake8
language_version: python3.9 # Updated to Python 3.9
verbose: true
- id: check-yaml
name: Check YAML

- repo: https://github.com/asottile/reorder_python_imports
rev: v3.7.0
hooks:
- id: reorder-python-imports
name: Reorder Python Imports
language_version: python3.9 # Updated to Python 3.9

- repo: https://github.com/psf/black
rev: 22.12.0 # Ensure this version supports Python 3.9
hooks:
- id: black
name: Format with Black
args: [--safe, --quiet, --line-length, "100"]
language_version: python3.9 # Updated to Python 3.9
require_serial: true

- repo: https://github.com/asottile/pyupgrade
rev: v3.10.0
hooks:
- id: pyupgrade
name: Python Package Checks
language_version: python3.9 # Updated to Python 3.9
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
139 changes: 96 additions & 43 deletions pygenpass/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,80 +20,133 @@
SOFTWARE.
"""
import sqlite3 # library for database
import sys

from termcolor import colored


class DatabaseConnection:
""" Class of database entries for user's information."""
"""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()
Checked for table is created? if not then created as per required values"""
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()
try:
self.cursor_obj.execute(
"""SELECT password FROM passwords WHERE portal_name=?""", (portal_name,)
)
row = self.cursor_obj.fetchone()

for row in rows:
return row[0]
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}")

self.con.commit()
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}")
7 changes: 7 additions & 0 deletions pygenpass/password.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

from pygenpass.database import DatabaseConnection


db_obj = DatabaseConnection()
table = BeautifulTable()
table.left_border_char = "|"
Expand All @@ -50,6 +51,7 @@ 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,7 @@ def add():
email=email,
portal_url=portal_url,
)
db_obj.close_connection()


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


@click.command(help="Show password")
Expand All @@ -117,3 +123,4 @@ def show():
print(colored("No records found", "green"))
else:
print(spass)
db_obj.close_connection()
5 changes: 3 additions & 2 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ classifiers =
Programming Language :: Python
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Environment :: Console
Topic :: Internet
Topic :: Utilities
Expand All @@ -24,11 +25,11 @@ classifiers =
zip_safe = false
include_package_data = true
packages = find:
python_requires = >= 3.6
python_requires = >= 3.8
setup_requires = setuptools_scm
install_requires =
beautifultable
click
click >=8.1.0
diceware
termcolor

Expand Down
4 changes: 3 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from setuptools import setup

setup(use_scm_version=True,)
setup(
use_scm_version=True,
)
Loading