"""DMS plugin contract — public interface for cross-plugin access.""" from __future__ import annotations from app.plugins.builtins.contracts import get_contract_registry from app.plugins.builtins.dms.models import File as DmsFile from app.plugins.builtins.dms.models import Folder class DmsContract: """Public contract for the DMS plugin.""" contract_name = "dms" DmsFile = DmsFile Folder = Folder @staticmethod def workspace_scopes() -> list[dict]: """Scope-Dimensionen des dms-Moduls für den Workspace-Editor (N1).""" return [ { "module_key": "dms", "dimensions": [ { "key": "folder_ids", "label": "DMS-Ordner", "control": "multiselect", "value_source": { "endpoint": "/api/v1/dms/folders", "items_path": "", "value_key": "id", "label_key": "name", }, }, { "key": "file_types", "label": "Datei-Typen", "control": "multiselect", "options": [ {"value": "application/pdf", "label": "PDF"}, {"value": "image/", "label": "Bilder"}, {"value": "spreadsheet", "label": "Tabellen"}, {"value": "word", "label": "Dokumente"}, {"value": "other", "label": "Sonstige"}, ], }, ], } ] @classmethod def get_function(cls, name: str): """Return a callable exposed by this contract, or None if absent.""" return getattr(cls, name, None) # ─── self-registration ─── _contract = DmsContract() get_contract_registry().register("dms", _contract) # Backward-compatible local accessor _contract_instance: DmsContract | None = None def get_contract() -> DmsContract: global _contract_instance if _contract_instance is None: _contract_instance = DmsContract() return _contract_instance __all__ = ["DmsContract", "DmsFile", "Folder"]