
* remove pyright Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove pylint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * replace pylint with ruff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * ruff fix Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix UP038 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ012 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix default arg Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix UP031 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename stage type to view Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ008 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining upgrade Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLR2004 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix B904 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLW2901 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining issues Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent ruff from breaking the code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * stages/prompt: refactor field building Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully remove isort Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
"""Base models"""
|
|
|
|
from django.apps import apps
|
|
from django.db.models import Model
|
|
from rest_framework.serializers import Serializer
|
|
|
|
|
|
class BaseMetaModel(Model):
|
|
"""Base models"""
|
|
|
|
class Meta:
|
|
abstract = True
|
|
|
|
@staticmethod
|
|
def serializer() -> Serializer:
|
|
"""Serializer similar to SerializerModel, but as a static method since
|
|
this is an abstract model"""
|
|
raise NotImplementedError
|
|
|
|
|
|
class MetaResult:
|
|
"""Result returned by Meta Models' serializers. Empty class but we can't return none as
|
|
the framework doesn't allow that"""
|
|
|
|
|
|
class MetaModelRegistry:
|
|
"""Registry for pseudo meta models"""
|
|
|
|
models: dict[str, BaseMetaModel]
|
|
virtual_prefix: str
|
|
|
|
def __init__(self, prefix: str) -> None:
|
|
self.models = {}
|
|
self.virtual_prefix = prefix
|
|
|
|
def register(self, model_id: str):
|
|
"""Register model class under `model_id`"""
|
|
|
|
def inner_wrapper(cls):
|
|
self.models[model_id] = cls
|
|
return cls
|
|
|
|
return inner_wrapper
|
|
|
|
def get_models(self):
|
|
"""Wrapper for django's `get_models` to list all models"""
|
|
models = apps.get_models()
|
|
for _, value in self.models.items():
|
|
models.append(value)
|
|
return models
|
|
|
|
def get_model(self, app_label: str, model_id: str) -> type[Model]:
|
|
"""Get model checks if any virtual models are registered, and falls back
|
|
to actual django models"""
|
|
if app_label.lower() == self.virtual_prefix:
|
|
if model_id.lower() in self.models:
|
|
return self.models[model_id]
|
|
return apps.get_model(app_label, model_id)
|
|
|
|
|
|
registry = MetaModelRegistry("authentik_blueprints")
|