stage 4-2
This commit is contained in:
@@ -18,6 +18,7 @@ from igny8_core.api.response import success_response, error_response
|
||||
from igny8_core.api.throttles import DebugScopedRateThrottle
|
||||
from igny8_core.business.publishing.models import PublishingRecord, DeploymentRecord
|
||||
from igny8_core.business.publishing.services.publisher_service import PublisherService
|
||||
from igny8_core.business.publishing.services.deployment_readiness_service import DeploymentReadinessService
|
||||
from igny8_core.business.site_building.models import SiteBlueprint
|
||||
|
||||
|
||||
@@ -74,6 +75,7 @@ class PublisherViewSet(viewsets.ViewSet):
|
||||
def __init__(self, **kwargs):
|
||||
super().__init__(**kwargs)
|
||||
self.publisher_service = PublisherService()
|
||||
self.readiness_service = DeploymentReadinessService()
|
||||
|
||||
@action(detail=False, methods=['post'], url_path='publish')
|
||||
def publish(self, request):
|
||||
@@ -137,12 +139,13 @@ class PublisherViewSet(viewsets.ViewSet):
|
||||
request
|
||||
)
|
||||
|
||||
@action(detail=False, methods=['post'], url_path='deploy/(?P<blueprint_id>[^/.]+)')
|
||||
def deploy(self, request, blueprint_id):
|
||||
@action(detail=False, methods=['get'], url_path='blueprints/(?P<blueprint_id>[^/.]+)/readiness')
|
||||
def deployment_readiness(self, request, blueprint_id):
|
||||
"""
|
||||
Deploy site blueprint to Sites renderer.
|
||||
Check deployment readiness for a site blueprint.
|
||||
Stage 4: Pre-deployment validation checks.
|
||||
|
||||
POST /api/v1/publisher/deploy/{blueprint_id}/
|
||||
GET /api/v1/publisher/blueprints/{blueprint_id}/readiness/
|
||||
"""
|
||||
account = request.account
|
||||
|
||||
@@ -155,6 +158,48 @@ class PublisherViewSet(viewsets.ViewSet):
|
||||
request
|
||||
)
|
||||
|
||||
readiness = self.readiness_service.check_readiness(blueprint_id)
|
||||
|
||||
return success_response(readiness, request=request)
|
||||
|
||||
@action(detail=False, methods=['post'], url_path='deploy/(?P<blueprint_id>[^/.]+)')
|
||||
def deploy(self, request, blueprint_id):
|
||||
"""
|
||||
Deploy site blueprint to Sites renderer.
|
||||
Stage 4: Enhanced with readiness check (optional).
|
||||
|
||||
POST /api/v1/publisher/deploy/{blueprint_id}/
|
||||
|
||||
Request body (optional):
|
||||
{
|
||||
"skip_readiness_check": false # Set to true to skip readiness validation
|
||||
}
|
||||
"""
|
||||
account = request.account
|
||||
|
||||
try:
|
||||
blueprint = SiteBlueprint.objects.get(id=blueprint_id, account=account)
|
||||
except SiteBlueprint.DoesNotExist:
|
||||
return error_response(
|
||||
f'Site blueprint {blueprint_id} not found',
|
||||
status.HTTP_404_NOT_FOUND,
|
||||
request
|
||||
)
|
||||
|
||||
# Stage 4: Optional readiness check
|
||||
skip_check = request.data.get('skip_readiness_check', False)
|
||||
if not skip_check:
|
||||
readiness = self.readiness_service.check_readiness(blueprint_id)
|
||||
if not readiness.get('ready'):
|
||||
return error_response(
|
||||
{
|
||||
'message': 'Site is not ready for deployment',
|
||||
'readiness': readiness
|
||||
},
|
||||
status.HTTP_400_BAD_REQUEST,
|
||||
request
|
||||
)
|
||||
|
||||
result = self.publisher_service.publish_to_sites(blueprint)
|
||||
|
||||
response_status = status.HTTP_202_ACCEPTED if result.get('success') else status.HTTP_400_BAD_REQUEST
|
||||
|
||||
Reference in New Issue
Block a user