From d045a1a05f25170c07e687183bd784fab526571a Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Mon, 15 Sep 2025 09:31:55 -0500 Subject: [PATCH] Starting work on listings. --- crudkit/__init__.py | 9 ++++++++ inventory/__init__.py | 17 ++++++--------- inventory/routes/listing.py | 29 ++++++++++++++++++++++---- inventory/templates/crudkit/table.html | 2 +- inventory/templates/listing.html | 2 +- 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/crudkit/__init__.py b/crudkit/__init__.py index 3959538..e6af0be 100644 --- a/crudkit/__init__.py +++ b/crudkit/__init__.py @@ -1,8 +1,17 @@ from .backend import BackendInfo, make_backend_info from .config import Config, DevConfig, TestConfig, ProdConfig, get_config, build_database_url from .engines import CRUDKitRuntime, build_engine, build_sessionmaker +from .integration import CRUDKit __all__ = [ "Config", "DevConfig", "TestConfig", "ProdConfig", "get_config", "build_database_url", "CRUDKitRuntime", "build_engine", "build_sessionmaker", "BackendInfo", "make_backend_info" ] + +runtime = CRUDKitRuntime() +crud: CRUDKit | None = None + +def init_crud(app): + global crud + crud = CRUDKit(app, runtime) + return crud diff --git a/inventory/__init__.py b/inventory/__init__.py index e392936..7d1afe9 100644 --- a/inventory/__init__.py +++ b/inventory/__init__.py @@ -1,24 +1,19 @@ from __future__ import annotations -import os from flask import Flask -from crudkit import ProdConfig -from crudkit.api.flask_api import generate_crud_blueprint -from crudkit.core.service import CRUDService -from crudkit.integration import CRUDKit -from crudkit.integrations.flask import init_app +import crudkit -from .config import DevConfig +from crudkit.integrations.flask import init_app from .routes.index import init_index_routes from .routes.listing import init_listing_routes -def create_app(config_cls=DevConfig) -> Flask: +def create_app(config_cls=crudkit.DevConfig) -> Flask: app = Flask(__name__) - runtime = init_app(app, config=ProdConfig) - crud = CRUDKit(app, runtime) + runtime = init_app(app, config=crudkit.ProdConfig) + crudkit.init_crud(app) print(f"Effective DB URL: {str(runtime.engine.url)}") from . import models as _models @@ -32,7 +27,7 @@ def create_app(config_cls=DevConfig) -> Flask: session = Session - crud.register_many([ + crudkit.crud.register_many([ _models.Area, _models.Brand, _models.DeviceType, diff --git a/inventory/routes/listing.py b/inventory/routes/listing.py index 4bb6ab7..19daec2 100644 --- a/inventory/routes/listing.py +++ b/inventory/routes/listing.py @@ -1,13 +1,34 @@ -from flask import Blueprint, render_template +from flask import Blueprint, render_template, abort -from ..db import get_session +import crudkit + +from crudkit.ui.fragments import render_table bp_listing = Blueprint("listing", __name__) def init_listing_routes(app): @bp_listing.get("/listing/") def show_list(model): - session = get_session() - return render_template("listing.html", model=model) + cls = crudkit.crud.get_model(model) + if cls is None: + abort(404) + + spec = {} + if model.lower() == 'inventory': + spec = {"fields": [ + "label", + "name", + "barcode", + "serial", + "device_type.description" + ]} + spec["limit"] = 0 + + service = crudkit.crud.get_service(cls) + rows = service.list(spec) + + table = render_table(rows, opts={"object_class": model}) + + return render_template("listing.html", model=model, table=table) app.register_blueprint(bp_listing) \ No newline at end of file diff --git a/inventory/templates/crudkit/table.html b/inventory/templates/crudkit/table.html index 2f5d414..771c661 100644 --- a/inventory/templates/crudkit/table.html +++ b/inventory/templates/crudkit/table.html @@ -1,4 +1,4 @@ - +
{% for col in columns %} diff --git a/inventory/templates/listing.html b/inventory/templates/listing.html index 8948643..2d23558 100644 --- a/inventory/templates/listing.html +++ b/inventory/templates/listing.html @@ -1,5 +1,5 @@ {% extends 'base.html' %} {% block main %} -Feelin' fine. +{{ table | safe }} {% endblock %} \ No newline at end of file