Added CRUDKit registry functionality.

This commit is contained in:
Yaro Kasear 2025-09-15 08:26:08 -05:00
parent cb74511677
commit 64e8d6871f
5 changed files with 67 additions and 23 deletions

25
crudkit/integration.py Normal file
View file

@ -0,0 +1,25 @@
from __future__ import annotations
from typing import Type
from flask import Flask
from crudkit.engines import CRUDKitRuntime
from .registry import CRUDRegistry
class CRUDKit:
def __init__(self, app: Flask, runtime: CRUDKitRuntime):
self.app = app
self.runtime = runtime
self.registry = CRUDRegistry(runtime)
def register(self, model: Type, **kwargs):
return self.registry.register_class(self.app, model, **kwargs)
def register_many(self, models: list[Type], **kwargs):
return self.registry.register_many(self.app, models, **kwargs)
def get_model(self, key: str):
return self.registry.get_model(key)
def get_service(self, model: Type):
return self.registry.get_service(model)

View file

@ -92,4 +92,29 @@ class CRUDRegistry:
bp.name = bp_name
app.register_blueprint(bp, url_prefix=prefix)
reg = Registered(model=model, service=)
reg = Registered(model=model, service=svc, blueprint_name=bp_name, url_prefix=prefix)
self._bps_by_model[model] = reg
return reg
def register_many(
self,
app: Flask,
models: list[Type[Any]],
*,
base_prefix: str = "/api",
polymorphic: bool = False,
service_kwargs: Optional[dict] = None,
) -> list[Registered]:
out: list[Registered] = []
for m in models:
key = self._key(m)
out.append(
self.register_class(
app,
m,
url_prefix=f"{base_prefix}/{key}",
polymorphic=polymorphic,
service_kwargs=service_kwargs,
)
)
return out

View file

@ -85,7 +85,7 @@ def _build_href(spec: Dict[str, Any], row: Dict[str, Any], obj) -> Optional[str]
print(f"[render_table] url_for failed: endpoint={spec}: params={params}")
return None
try:
return url_for(spec["endpoint"], **params)
return url_for('crudkit.' + spec["endpoint"], **params)
except Exception as e:
print(f"[render_table] url_for failed: endpoint={spec['endpoint']} params={params} err={e}")
return None