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.
This commit is contained in:
Yaro Kasear 2025-07-08 11:47:22 -05:00
parent 602bb77e22
commit 9803db17ab
51 changed files with 76 additions and 16 deletions

2
.gitignore vendored
View file

@ -5,3 +5,5 @@
*.db-journal *.db-journal
*.sqlite *.sqlite
*.sqlite3 *.sqlite3
alembic.ini
alembic/

View file

@ -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

View file

@ -0,0 +1 @@

View file

@ -1,6 +1,7 @@
dotenv python-dotenv
flask flask
flask_sqlalchemy flask_sqlalchemy
pandas pandas
pyodbc pyodbc
beautifulsoup4 beautifulsoup4
alembic

View file

@ -0,0 +1 @@
inventory

View file

@ -24,7 +24,7 @@ def create_app():
with app.app_context(): with app.app_context():
from . import models from . import models
db.create_all() # db.create_all()
from .routes import main from .routes import main
app.register_blueprint(main) app.register_blueprint(main)

View file

@ -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",
]

View file

@ -14,11 +14,11 @@ class Brand(ValidatableMixin, db.Model):
VALIDATION_LABEL = 'Brand' VALIDATION_LABEL = 'Brand'
id: Mapped[int] = mapped_column("ID", Integer, Identity(start=1, increment=1), primary_key=True) 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') inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='brand')
def __init__(self, name: Optional[str] = None): def __init__(self, name: str):
self.name = name self.name = name
def __repr__(self): def __repr__(self):

View file

View file

@ -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

21
pyproject.toml Normal file
View file

@ -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"]

9
setup.cfg Normal file
View file

@ -0,0 +1,9 @@
[metadata]
name = inventory
version = 0.1.0
[options]
packages = find:
[options.packages.find]
where = .