41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
from django.http import JsonResponse
|
|
from django.views.decorators.http import require_GET
|
|
|
|
# Versión del contrato
|
|
try:
|
|
from .version import SPEC_VERSION
|
|
except Exception:
|
|
SPEC_VERSION = "0.1.0"
|
|
|
|
# Modelos Pydantic
|
|
from .contracts.sami import SAMIRunRequest, SAMIRunResponse
|
|
from .contracts.sites import SiteSearchRequest, SiteSearchResponse
|
|
|
|
|
|
def _schema_of(model_cls):
|
|
"""Devuelve JSONSchema para Pydantic v2 o v1."""
|
|
try:
|
|
return model_cls.model_json_schema() # Pydantic v2
|
|
except Exception:
|
|
return model_cls.schema() # Pydantic v1
|
|
|
|
|
|
@require_GET
|
|
def sami_contracts(request):
|
|
"""GET /api/contracts/sami.json"""
|
|
return JsonResponse({
|
|
"spec_version": SPEC_VERSION,
|
|
"request": _schema_of(SAMIRunRequest),
|
|
"response": _schema_of(SAMIRunResponse),
|
|
})
|
|
|
|
|
|
@require_GET
|
|
def sites_contracts(request):
|
|
"""GET /api/contracts/sites.json"""
|
|
return JsonResponse({
|
|
"spec_version": SPEC_VERSION,
|
|
"request": _schema_of(SiteSearchRequest),
|
|
"response": _schema_of(SiteSearchResponse),
|
|
})
|