Added CRUDKit registry functionality.
This commit is contained in:
parent
cb74511677
commit
64e8d6871f
5 changed files with 67 additions and 23 deletions
25
crudkit/integration.py
Normal file
25
crudkit/integration.py
Normal 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)
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue