From 9803db17abe9240522e81c96989063171a91ca5a Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Tue, 8 Jul 2025 11:47:22 -0500 Subject: [PATCH] Add inventory management templates and utility functions - Created HTML templates for inventory index, layout, search, settings, table, user, and worklog. - Implemented utility functions for eager loading relationships in SQLAlchemy. - Added validation mixin for form submissions. - Updated project configuration files (pyproject.toml and setup.cfg) for package management. --- .gitignore | 2 ++ inventory.egg-info/PKG-INFO | 12 ++++++++++ .../SOURCES.txt | 0 inventory.egg-info/dependency_links.txt | 1 + .../requires.txt | 5 ++-- inventory.egg-info/top_level.txt | 1 + __init__.py => inventory/__init__.py | 2 +- app.py => inventory/app.py | 0 config.py => inventory/config.py | 0 inventory/models/__init__.py | 24 +++++++++++++++++++ {models => inventory/models}/areas.py | 0 {models => inventory/models}/brands.py | 4 ++-- {models => inventory/models}/inventory.py | 0 {models => inventory/models}/items.py | 0 .../models}/room_functions.py | 0 {models => inventory/models}/rooms.py | 0 {models => inventory/models}/users.py | 0 {models => inventory/models}/work_log.py | 0 {routes => inventory/routes}/__init__.py | 0 {routes => inventory/routes}/helpers.py | 0 {routes => inventory/routes}/hooks.py | 0 {routes => inventory/routes}/index.py | 0 {routes => inventory/routes}/inventory.py | 0 {routes => inventory/routes}/search.py | 0 {routes => inventory/routes}/settings.py | 0 {routes => inventory/routes}/user.py | 0 {routes => inventory/routes}/worklog.py | 0 {static => inventory/static}/css/widget.css | 0 {static => inventory/static}/js/widget.js | 0 temp.py => inventory/temp.py | 0 {templates => inventory/templates}/error.html | 0 .../fragments/_breadcrumb_fragment.html | 0 .../fragments/_combobox_fragment.html | 0 .../templates}/fragments/_icon_fragment.html | 0 .../templates}/fragments/_link_fragment.html | 0 .../templates}/fragments/_table_fragment.html | 0 {templates => inventory/templates}/index.html | 0 .../templates}/inventory.html | 0 .../templates}/inventory_index.html | 0 .../templates}/layout.html | 0 .../templates}/search.html | 0 .../templates}/settings.html | 0 {templates => inventory/templates}/table.html | 0 {templates => inventory/templates}/user.html | 0 .../templates}/worklog.html | 0 inventory/utils/__init__.py | 0 {utils => inventory/utils}/load.py | 0 {utils => inventory/utils}/validation.py | 0 models/__init__.py | 11 --------- pyproject.toml | 21 ++++++++++++++++ setup.cfg | 9 +++++++ 51 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 inventory.egg-info/PKG-INFO rename utils/__init__.py => inventory.egg-info/SOURCES.txt (100%) create mode 100644 inventory.egg-info/dependency_links.txt rename requirements.txt => inventory.egg-info/requires.txt (50%) create mode 100644 inventory.egg-info/top_level.txt rename __init__.py => inventory/__init__.py (96%) rename app.py => inventory/app.py (100%) rename config.py => inventory/config.py (100%) create mode 100644 inventory/models/__init__.py rename {models => inventory/models}/areas.py (100%) rename {models => inventory/models}/brands.py (96%) rename {models => inventory/models}/inventory.py (100%) rename {models => inventory/models}/items.py (100%) rename {models => inventory/models}/room_functions.py (100%) rename {models => inventory/models}/rooms.py (100%) rename {models => inventory/models}/users.py (100%) rename {models => inventory/models}/work_log.py (100%) rename {routes => inventory/routes}/__init__.py (100%) rename {routes => inventory/routes}/helpers.py (100%) rename {routes => inventory/routes}/hooks.py (100%) rename {routes => inventory/routes}/index.py (100%) rename {routes => inventory/routes}/inventory.py (100%) rename {routes => inventory/routes}/search.py (100%) rename {routes => inventory/routes}/settings.py (100%) rename {routes => inventory/routes}/user.py (100%) rename {routes => inventory/routes}/worklog.py (100%) rename {static => inventory/static}/css/widget.css (100%) rename {static => inventory/static}/js/widget.js (100%) rename temp.py => inventory/temp.py (100%) rename {templates => inventory/templates}/error.html (100%) rename {templates => inventory/templates}/fragments/_breadcrumb_fragment.html (100%) rename {templates => inventory/templates}/fragments/_combobox_fragment.html (100%) rename {templates => inventory/templates}/fragments/_icon_fragment.html (100%) rename {templates => inventory/templates}/fragments/_link_fragment.html (100%) rename {templates => inventory/templates}/fragments/_table_fragment.html (100%) rename {templates => inventory/templates}/index.html (100%) rename {templates => inventory/templates}/inventory.html (100%) rename {templates => inventory/templates}/inventory_index.html (100%) rename {templates => inventory/templates}/layout.html (100%) rename {templates => inventory/templates}/search.html (100%) rename {templates => inventory/templates}/settings.html (100%) rename {templates => inventory/templates}/table.html (100%) rename {templates => inventory/templates}/user.html (100%) rename {templates => inventory/templates}/worklog.html (100%) create mode 100644 inventory/utils/__init__.py rename {utils => inventory/utils}/load.py (100%) rename {utils => inventory/utils}/validation.py (100%) delete mode 100644 models/__init__.py create mode 100644 pyproject.toml create mode 100644 setup.cfg diff --git a/.gitignore b/.gitignore index bdc1a8a..bbe5494 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ *.db-journal *.sqlite *.sqlite3 +alembic.ini +alembic/ \ No newline at end of file diff --git a/inventory.egg-info/PKG-INFO b/inventory.egg-info/PKG-INFO new file mode 100644 index 0000000..aaa1f79 --- /dev/null +++ b/inventory.egg-info/PKG-INFO @@ -0,0 +1,12 @@ +Metadata-Version: 2.4 +Name: inventory +Version: 0.1.0 +Summary: A Flask app for tracking inventory. +Requires-Python: >=3.9 +Requires-Dist: python-dotenv +Requires-Dist: flask +Requires-Dist: flask_sqlalchemy +Requires-Dist: pandas +Requires-Dist: pyodbc +Requires-Dist: beautifulsoup4 +Requires-Dist: alembic diff --git a/utils/__init__.py b/inventory.egg-info/SOURCES.txt similarity index 100% rename from utils/__init__.py rename to inventory.egg-info/SOURCES.txt diff --git a/inventory.egg-info/dependency_links.txt b/inventory.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/inventory.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/requirements.txt b/inventory.egg-info/requires.txt similarity index 50% rename from requirements.txt rename to inventory.egg-info/requires.txt index 18825da..d06b755 100644 --- a/requirements.txt +++ b/inventory.egg-info/requires.txt @@ -1,6 +1,7 @@ -dotenv +python-dotenv flask flask_sqlalchemy pandas pyodbc -beautifulsoup4 \ No newline at end of file +beautifulsoup4 +alembic diff --git a/inventory.egg-info/top_level.txt b/inventory.egg-info/top_level.txt new file mode 100644 index 0000000..e845c18 --- /dev/null +++ b/inventory.egg-info/top_level.txt @@ -0,0 +1 @@ +inventory diff --git a/__init__.py b/inventory/__init__.py similarity index 96% rename from __init__.py rename to inventory/__init__.py index e21c049..a1776f1 100644 --- a/__init__.py +++ b/inventory/__init__.py @@ -24,7 +24,7 @@ def create_app(): with app.app_context(): from . import models - db.create_all() + # db.create_all() from .routes import main app.register_blueprint(main) diff --git a/app.py b/inventory/app.py similarity index 100% rename from app.py rename to inventory/app.py diff --git a/config.py b/inventory/config.py similarity index 100% rename from config.py rename to inventory/config.py diff --git a/inventory/models/__init__.py b/inventory/models/__init__.py new file mode 100644 index 0000000..27a48a3 --- /dev/null +++ b/inventory/models/__init__.py @@ -0,0 +1,24 @@ +from typing import TYPE_CHECKING + +from inventory import db # Yes, this works when run from project root with Alembic + +from .areas import Area +from .brands import Brand +from .items import Item +from .inventory import Inventory +from .room_functions import RoomFunction +from .users import User +from .work_log import WorkLog +from .rooms import Room + +__all__ = [ + "db", + "Area", + "Brand", + "Item", + "Inventory", + "RoomFunction", + "User", + "WorkLog", + "Room", +] diff --git a/models/areas.py b/inventory/models/areas.py similarity index 100% rename from models/areas.py rename to inventory/models/areas.py diff --git a/models/brands.py b/inventory/models/brands.py similarity index 96% rename from models/brands.py rename to inventory/models/brands.py index 7147e42..3d8d2f3 100644 --- a/models/brands.py +++ b/inventory/models/brands.py @@ -14,11 +14,11 @@ class Brand(ValidatableMixin, db.Model): VALIDATION_LABEL = 'Brand' id: Mapped[int] = mapped_column("ID", Integer, Identity(start=1, increment=1), primary_key=True) - name: Mapped[Optional[str]] = mapped_column("Brand", Unicode(255), nullable=True) + name: Mapped[str] = mapped_column("Brand", Unicode(255), nullable=False) inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='brand') - def __init__(self, name: Optional[str] = None): + def __init__(self, name: str): self.name = name def __repr__(self): diff --git a/models/inventory.py b/inventory/models/inventory.py similarity index 100% rename from models/inventory.py rename to inventory/models/inventory.py diff --git a/models/items.py b/inventory/models/items.py similarity index 100% rename from models/items.py rename to inventory/models/items.py diff --git a/models/room_functions.py b/inventory/models/room_functions.py similarity index 100% rename from models/room_functions.py rename to inventory/models/room_functions.py diff --git a/models/rooms.py b/inventory/models/rooms.py similarity index 100% rename from models/rooms.py rename to inventory/models/rooms.py diff --git a/models/users.py b/inventory/models/users.py similarity index 100% rename from models/users.py rename to inventory/models/users.py diff --git a/models/work_log.py b/inventory/models/work_log.py similarity index 100% rename from models/work_log.py rename to inventory/models/work_log.py diff --git a/routes/__init__.py b/inventory/routes/__init__.py similarity index 100% rename from routes/__init__.py rename to inventory/routes/__init__.py diff --git a/routes/helpers.py b/inventory/routes/helpers.py similarity index 100% rename from routes/helpers.py rename to inventory/routes/helpers.py diff --git a/routes/hooks.py b/inventory/routes/hooks.py similarity index 100% rename from routes/hooks.py rename to inventory/routes/hooks.py diff --git a/routes/index.py b/inventory/routes/index.py similarity index 100% rename from routes/index.py rename to inventory/routes/index.py diff --git a/routes/inventory.py b/inventory/routes/inventory.py similarity index 100% rename from routes/inventory.py rename to inventory/routes/inventory.py diff --git a/routes/search.py b/inventory/routes/search.py similarity index 100% rename from routes/search.py rename to inventory/routes/search.py diff --git a/routes/settings.py b/inventory/routes/settings.py similarity index 100% rename from routes/settings.py rename to inventory/routes/settings.py diff --git a/routes/user.py b/inventory/routes/user.py similarity index 100% rename from routes/user.py rename to inventory/routes/user.py diff --git a/routes/worklog.py b/inventory/routes/worklog.py similarity index 100% rename from routes/worklog.py rename to inventory/routes/worklog.py diff --git a/static/css/widget.css b/inventory/static/css/widget.css similarity index 100% rename from static/css/widget.css rename to inventory/static/css/widget.css diff --git a/static/js/widget.js b/inventory/static/js/widget.js similarity index 100% rename from static/js/widget.js rename to inventory/static/js/widget.js diff --git a/temp.py b/inventory/temp.py similarity index 100% rename from temp.py rename to inventory/temp.py diff --git a/templates/error.html b/inventory/templates/error.html similarity index 100% rename from templates/error.html rename to inventory/templates/error.html diff --git a/templates/fragments/_breadcrumb_fragment.html b/inventory/templates/fragments/_breadcrumb_fragment.html similarity index 100% rename from templates/fragments/_breadcrumb_fragment.html rename to inventory/templates/fragments/_breadcrumb_fragment.html diff --git a/templates/fragments/_combobox_fragment.html b/inventory/templates/fragments/_combobox_fragment.html similarity index 100% rename from templates/fragments/_combobox_fragment.html rename to inventory/templates/fragments/_combobox_fragment.html diff --git a/templates/fragments/_icon_fragment.html b/inventory/templates/fragments/_icon_fragment.html similarity index 100% rename from templates/fragments/_icon_fragment.html rename to inventory/templates/fragments/_icon_fragment.html diff --git a/templates/fragments/_link_fragment.html b/inventory/templates/fragments/_link_fragment.html similarity index 100% rename from templates/fragments/_link_fragment.html rename to inventory/templates/fragments/_link_fragment.html diff --git a/templates/fragments/_table_fragment.html b/inventory/templates/fragments/_table_fragment.html similarity index 100% rename from templates/fragments/_table_fragment.html rename to inventory/templates/fragments/_table_fragment.html diff --git a/templates/index.html b/inventory/templates/index.html similarity index 100% rename from templates/index.html rename to inventory/templates/index.html diff --git a/templates/inventory.html b/inventory/templates/inventory.html similarity index 100% rename from templates/inventory.html rename to inventory/templates/inventory.html diff --git a/templates/inventory_index.html b/inventory/templates/inventory_index.html similarity index 100% rename from templates/inventory_index.html rename to inventory/templates/inventory_index.html diff --git a/templates/layout.html b/inventory/templates/layout.html similarity index 100% rename from templates/layout.html rename to inventory/templates/layout.html diff --git a/templates/search.html b/inventory/templates/search.html similarity index 100% rename from templates/search.html rename to inventory/templates/search.html diff --git a/templates/settings.html b/inventory/templates/settings.html similarity index 100% rename from templates/settings.html rename to inventory/templates/settings.html diff --git a/templates/table.html b/inventory/templates/table.html similarity index 100% rename from templates/table.html rename to inventory/templates/table.html diff --git a/templates/user.html b/inventory/templates/user.html similarity index 100% rename from templates/user.html rename to inventory/templates/user.html diff --git a/templates/worklog.html b/inventory/templates/worklog.html similarity index 100% rename from templates/worklog.html rename to inventory/templates/worklog.html diff --git a/inventory/utils/__init__.py b/inventory/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/load.py b/inventory/utils/load.py similarity index 100% rename from utils/load.py rename to inventory/utils/load.py diff --git a/utils/validation.py b/inventory/utils/validation.py similarity index 100% rename from utils/validation.py rename to inventory/utils/validation.py diff --git a/models/__init__.py b/models/__init__.py deleted file mode 100644 index 774536f..0000000 --- a/models/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -from typing import TYPE_CHECKING - -from .. import db # If you're in an actual module -from .areas import Area -from .brands import Brand -from .items import Item -from .inventory import Inventory -from .room_functions import RoomFunction -from .users import User -from .work_log import WorkLog -from .rooms import Room \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..089df84 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,21 @@ +[project] +name = "inventory" +version = "0.1.0" +description = "A Flask app for tracking inventory." +requires-python = ">=3.9" +dependencies = [ + "python-dotenv", + "flask", + "flask_sqlalchemy", + "pandas", + "pyodbc", + "beautifulsoup4", + "alembic" +] + +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +packages = ["inventory"] diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..a8a10e4 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,9 @@ +[metadata] +name = inventory +version = 0.1.0 + +[options] +packages = find: + +[options.packages.find] +where = .