Still making little progress fixing my stray engine problem.
This commit is contained in:
parent
c6165af40e
commit
085905557d
6 changed files with 171 additions and 53 deletions
|
|
@ -1,8 +1,6 @@
|
|||
from flask import Blueprint, render_template, abort, request, jsonify
|
||||
from flask import Blueprint, render_template, abort, request, jsonify, current_app
|
||||
|
||||
import crudkit
|
||||
|
||||
from crudkit.api._cursor import decode_cursor, encode_cursor
|
||||
from crudkit.ui.fragments import render_form
|
||||
|
||||
bp_entry = Blueprint("entry", __name__)
|
||||
|
|
@ -12,34 +10,31 @@ def init_entry_routes(app):
|
|||
@bp_entry.get("/entry/<model>/<int:id>")
|
||||
def entry(model: str, id: int):
|
||||
cls = crudkit.crud.get_model(model)
|
||||
if cls is None:
|
||||
abort(404)
|
||||
if model not in ["inventory", "worklog", "user"]:
|
||||
if cls is None or model not in ["inventory", "worklog", "user"]:
|
||||
abort(404)
|
||||
|
||||
fields = {}
|
||||
fields_spec = []
|
||||
layout = []
|
||||
|
||||
if model == "inventory":
|
||||
fields["fields"] = ["label", "name", "serial", "barcode", "brand", "model", "device_type", "owner", "location", "condition", "image", "notes"]
|
||||
fields["fields"] = ["label", "name", "serial", "barcode", "brand", "model",
|
||||
"device_type", "owner", "location", "condition", "image", "notes"]
|
||||
fields_spec = [
|
||||
{"name": "label", "type": "display", "label": "", "row": "label",
|
||||
"attrs": {"class": "display-6 mb-3"}},
|
||||
|
||||
{"name": "name", "row": "names", "label": "Name", "wrap": {"class": "col-3"},
|
||||
"attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
{"name": "serial", "row": "names", "label": "Serial #", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
{"name": "barcode", "row": "names", "label": "Barcode #", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
|
||||
{"name": "brand", "label_spec": "{name}", "row": "device", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label": "Brand", "label_attrs": {"class": "form-label"}},
|
||||
{"name": "model", "row": "device", "wrap": {"class": "col"}, "attrs": {"class": "form-control"},
|
||||
"label": "Model #", "label_attrs": {"class": "form-label"}},
|
||||
{"name": "model", "row": "device", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label": "Model #", "label_attrs": {"class": "form-label"}},
|
||||
{"name": "device_type", "label_spec": "{description}", "row": "device", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label": "Device Type", "label_attrs": {"class": "form-label"}},
|
||||
|
||||
{"name": "owner", "row": "status", "label": "Contact", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"},
|
||||
"label_spec": "{label}"},
|
||||
|
|
@ -48,13 +43,12 @@ def init_entry_routes(app):
|
|||
"label_spec": "{name} - {room_function.description}"},
|
||||
{"name": "condition", "row": "status", "label": "Condition", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
|
||||
{"name": "image", "label": "", "row": "image", "type": "template", "label_spec": "{filename}",
|
||||
"template": "image_display.html", "attrs": {"class": "img-fluid img-thumbnail h-auto"},
|
||||
"wrap": {"class": "h-100 w-100"}},
|
||||
|
||||
{"name": "notes", "type": "textarea", "label": "Notes", "row": "notes", "wrap": {"class": "col"},
|
||||
"attrs": {"class": "form-control", "rows": 10, "style": "resize: none;"}, "label_attrs": {"class": "form-label"}},
|
||||
"attrs": {"class": "form-control", "rows": 10, "style": "resize: none;"},
|
||||
"label_attrs": {"class": "form-label"}},
|
||||
]
|
||||
layout = [
|
||||
{"name": "label", "order": 5},
|
||||
|
|
@ -66,85 +60,79 @@ def init_entry_routes(app):
|
|||
{"name": "notes", "order": 45, "attrs": {"class": "row mt-2"}, "parent": "everything"},
|
||||
{"name": "image", "order": 50, "attrs": {"class": "col-4"}, "parent": "kitchen_sink"},
|
||||
]
|
||||
|
||||
elif model.lower() == 'user':
|
||||
fields["fields"] = ["label", "first_name", "last_name", "title", "active", "staff", "location", "supervisor"]
|
||||
fields_spec = [
|
||||
{"name": "label", "row": "label", "label": "", "type": "display",
|
||||
"attrs": {"class": "display-6 mb-3"}},
|
||||
|
||||
{"name": "last_name", "label": "Last Name", "label_attrs": {"class": "form-label"},
|
||||
"attrs": {"placeholder": "Doe", "class": "form-control"},
|
||||
"row": "name", "wrap": {"class": "col-3"}},
|
||||
|
||||
"attrs": {"placeholder": "Doe", "class": "form-control"}, "row": "name", "wrap": {"class": "col-3"}},
|
||||
{"name": "first_name", "label": "First Name", "label_attrs": {"class": "form-label"},
|
||||
"attrs": {"placeholder": "John", "class": "form-control"},
|
||||
"row": "name", "wrap": {"class": "col-3"}},
|
||||
|
||||
"attrs": {"placeholder": "John", "class": "form-control"}, "row": "name", "wrap": {"class": "col-3"}},
|
||||
{"name": "title", "label": "Title", "label_attrs": {"class": "form-label"},
|
||||
"attrs": {"placeholder": "President of the Universe", "class": "form-control"},
|
||||
"row": "name", "wrap": {"class": "col-3"}},
|
||||
|
||||
{"name": "supervisor", "label": "Supervisor", "label_attrs": {"class": "form-label"},
|
||||
"label_spec": "{label}", "row": "details", "wrap": {"class": "col-3"},
|
||||
"attrs": {"class": "form-control"}},
|
||||
|
||||
{"name": "location", "label": "Room", "label_attrs": {"class": "form-label"},
|
||||
"label_spec": "{name} - {room_function.description}",
|
||||
"row": "details", "wrap": {"class": "col-3"}, "attrs": {"class": "form-control"}},
|
||||
|
||||
{"name": "active", "label": "Active", "label_attrs": {"class": "form-check-label"},
|
||||
"row": "checkboxes", "attrs": {"class": "form-check-input"}, "wrap": {"class": "form-check"}},
|
||||
|
||||
{"name": "staff", "label": "Staff Member", "label_attrs": {"class": "form-check-label"},
|
||||
"row": "checkboxes", "attrs": {"class": "form-check-input"}, "wrap": {"class": "form-check"}}
|
||||
"row": "checkboxes", "attrs": {"class": "form-check-input"}, "wrap": {"class": "form-check"}},
|
||||
]
|
||||
layout = [
|
||||
{"name": "label", "order": 0},
|
||||
{"name": "name", "order": 10, "attrs": {"class": "row"}},
|
||||
{"name": "details", "order": 20, "attrs": {"class": "row mt-2"}},
|
||||
{"name": "checkboxes", "order": 30, "parent": "name", "attrs": {"class": "col d-flex flex-column justify-content-end"}}
|
||||
{"name": "checkboxes", "order": 30, "parent": "name",
|
||||
"attrs": {"class": "col d-flex flex-column justify-content-end"}},
|
||||
]
|
||||
|
||||
elif model == "worklog":
|
||||
fields["fields"] = ["id", "contact", "work_item", "start_time", "end_time", "complete"]
|
||||
fields_spec = [
|
||||
{"name": "id", "label": "", "type": "display", "label_spec": "Work Item #{id}",
|
||||
"attrs": {"class": "display-6 mb-3"}, "row": "label"},
|
||||
|
||||
{"name": "contact", "row": "ownership", "wrap": {"class": "col"}, "label": "Contact",
|
||||
"label_spec": "{label}", "attrs": {"class": "form-control"},
|
||||
"label_attrs": {"class": "form-label"}},
|
||||
"label_spec": "{label}", "attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
{"name": "work_item", "row": "ownership", "wrap": {"class": "col"}, "label": "Work Item",
|
||||
"label_spec": "{label}", "attrs": {"class": "form-control"}, "label_attrs": {"class": "form-label"}},
|
||||
|
||||
{"name": "start_time", "type": "datetime", "attrs": {"class": "form-control"}, "row": "timestamps",
|
||||
"wrap": {"class": "col"}, "label_attrs": {"class": "form-label"}, "label": "Start"},
|
||||
{"name": "end_time", "type": "datetime", "attrs": {"class": "form-control"}, "row": "timestamps",
|
||||
"wrap": {"class": "col"}, "label_attrs": {"class": "form-label"}, "label": "End"},
|
||||
{"name": "complete", "label": "Complete", "label_attrs": {"class": "form-check-label"},
|
||||
"attrs": {"class": "form-check-input"}, "row": "timestamps", "wrap": {"class": "col form-check"}},
|
||||
|
||||
{"name": "updates", "label": "Updates", "row": "updates", "label_attrs": {"class": "form-label"},
|
||||
"type": "template", "template": "update_list.html"}
|
||||
"type": "template", "template": "update_list.html"},
|
||||
]
|
||||
layout = [
|
||||
{"name": "label", "order": 0},
|
||||
{"name": "ownership", "order": 10, "attrs": {"class": "row mb-2"}},
|
||||
{"name": "timestamps", "order": 20, "attrs": {"class": "row d-flex align-items-center"}},
|
||||
{"name": "updates", "order": 30, "attrs": {"class": "row"}}
|
||||
{"name": "updates", "order": 30, "attrs": {"class": "row"}},
|
||||
]
|
||||
|
||||
obj = crudkit.crud.get_service(cls).get(id, fields)
|
||||
svc = crudkit.crud.get_service(cls)
|
||||
obj = svc.get(id, fields)
|
||||
if obj is None:
|
||||
abort(404)
|
||||
|
||||
# Use the scoped_session proxy so teardown .remove() cleans it up
|
||||
ScopedSession = current_app.extensions["crudkit"]["Session"]
|
||||
|
||||
form = render_form(
|
||||
cls,
|
||||
obj.as_dict(),
|
||||
crudkit.crud.get_service(cls).session,
|
||||
session=ScopedSession, # ← fixed: pass scoped proxy, not svc.session
|
||||
instance=obj,
|
||||
fields_spec=fields_spec,
|
||||
layout=layout,
|
||||
submit_attrs={"class": "btn btn-primary mt-3"}
|
||||
submit_attrs={"class": "btn btn-primary mt-3"},
|
||||
)
|
||||
return render_template("entry.html", form=form)
|
||||
|
||||
|
|
|
|||
|
|
@ -107,6 +107,30 @@ def init_listing_routes(app):
|
|||
spec["sort"] = sort
|
||||
|
||||
service = crudkit.crud.get_service(cls)
|
||||
try:
|
||||
rt = app.extensions["crudkit"]["runtime"]
|
||||
rt_engine = rt.engine
|
||||
except Exception:
|
||||
rt_engine = None
|
||||
|
||||
try:
|
||||
SessionFactory = app.extensions["crudkit"].get("SessionFactory")
|
||||
sf_engine = getattr(SessionFactory, "bind", None) or getattr(SessionFactory, "kw", {}).get("bind")
|
||||
except Exception:
|
||||
sf_engine = None
|
||||
|
||||
try:
|
||||
bind = service.session.get_bind()
|
||||
svc_engine = getattr(bind, "engine", bind)
|
||||
except Exception:
|
||||
svc_engine = None
|
||||
|
||||
print(
|
||||
"LISTING ENGINES: "
|
||||
f"runtime={id(rt_engine) if rt_engine else None} "
|
||||
f"session_factory.bind={id(sf_engine) if sf_engine else None} "
|
||||
f"service.bind={id(svc_engine) if svc_engine else None}"
|
||||
)
|
||||
# include limit and go
|
||||
window = service.seek_window(spec | {"limit": limit}, key=key, backward=backward, include_total=True)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue