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

web summit demo #3

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open

web summit demo #3

wants to merge 1 commit into from

Conversation

angrycaptain19
Copy link

No description provided.

@angrycaptain19 angrycaptain19 added the sourcery-review Request a review from sourcery label Nov 15, 2023
Copy link

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo Sourcery Review:

PR Type: Enhancement

Summary of PR: This PR introduces a new script for managing an inventory database with basic operations like adding, removing, and updating products.

General PR suggestions

  • Consider encapsulating database operations within a separate class or module to separate concerns and improve maintainability.
  • Implement error handling for database operations to ensure the application can recover from or properly report database-related issues.
  • Use context managers for database connections to ensure they are properly closed even in the event of an error.

from datetime import datetime

# Database connection setup
conn = sqlite3.connect('enterprise_inventory.db')

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): Consider using a context manager to handle the database connection to ensure it is closed properly.

return self._products.get(product_id)

def __del__(self):
conn.close()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo issue(high-importance): The del method is not a reliable place for cleanup like closing database connections. Consider using context managers or explicit close calls.

# A class to represent the inventory
class Inventory:
def __init__(self):
self._products = self._load_products()

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): Loading all products into memory might not be scalable for a large inventory. Consider fetching data on demand.

self._products = self._load_products()

def _load_products(self):
cursor.execute("SELECT * FROM inventory")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): Using 'SELECT *' is generally discouraged as it may lead to unnecessary data transfer if not all columns are needed.


def _load_products(self):
cursor.execute("SELECT * FROM inventory")
return {row[0]: {'product_name': row[1], 'quantity': row[2], 'last_updated': row[3]} for row in cursor.fetchall()}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): Consider using named tuples or a custom class for better readability and maintainability of the row data structure.

return {row[0]: {'product_name': row[1], 'quantity': row[2], 'last_updated': row[3]} for row in cursor.fetchall()}

def add_product(self, product_name, quantity):
if not isinstance(product_name, str) or not isinstance(quantity, int):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(low-importance): Type checking for arguments can be improved by using Python's type hinting feature.

if product_id not in self._products:
raise ValueError("Product ID does not exist in inventory.")

cursor.execute("DELETE FROM inventory WHERE product_id = ?", (product_id,))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): It's good practice to check the affected rows after a DELETE operation to ensure a product was actually removed.

if product_id not in self._products:
raise ValueError("Product ID does not exist in inventory.")

new_quantity = self._products[product_id]['quantity'] + quantity_change

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(medium-importance): Consider adding a check to ensure that the quantity_change does not result in a negative quantity before updating the database.

self._products[product_id].update({'quantity': new_quantity, 'last_updated': now})

def get_product_info(self, product_id):
return self._products.get(product_id)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sourcery logo suggestion(low-importance): Returning None for a non-existent product_id might be ambiguous. Consider raising an exception or returning a more descriptive result.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
sourcery-review Request a review from sourcery
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant