refactor stage completed - with migrations
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
from django.conf import settings
|
||||
from rest_framework import serializers
|
||||
|
||||
from igny8_core.business.site_building.models import (
|
||||
@@ -7,6 +8,7 @@ from igny8_core.business.site_building.models import (
|
||||
HeroImageryDirection,
|
||||
PageBlueprint,
|
||||
SiteBlueprint,
|
||||
WorkflowState,
|
||||
)
|
||||
|
||||
|
||||
@@ -44,6 +46,7 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
pages = PageBlueprintSerializer(many=True, read_only=True)
|
||||
site_id = serializers.IntegerField(write_only=True, required=False)
|
||||
sector_id = serializers.IntegerField(write_only=True, required=False)
|
||||
workflow_state = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = SiteBlueprint
|
||||
@@ -62,6 +65,7 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'pages',
|
||||
'workflow_state',
|
||||
]
|
||||
read_only_fields = [
|
||||
'structure_json',
|
||||
@@ -83,6 +87,21 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
attrs['sector_id'] = sector_id
|
||||
return attrs
|
||||
|
||||
def get_workflow_state(self, obj):
|
||||
if not getattr(settings, 'USE_SITE_BUILDER_REFACTOR', False):
|
||||
return None
|
||||
try:
|
||||
state: WorkflowState = obj.workflow_state
|
||||
except WorkflowState.DoesNotExist:
|
||||
return None
|
||||
return {
|
||||
'current_step': state.current_step,
|
||||
'step_status': state.step_status,
|
||||
'blocking_reason': state.blocking_reason,
|
||||
'completed': state.completed,
|
||||
'updated_at': state.updated_at,
|
||||
}
|
||||
|
||||
|
||||
class MetadataOptionSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from django.conf import settings
|
||||
from rest_framework import status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
@@ -21,6 +22,8 @@ from igny8_core.business.site_building.services import (
|
||||
PageGenerationService,
|
||||
SiteBuilderFileService,
|
||||
StructureGenerationService,
|
||||
WorkflowStateService,
|
||||
TaxonomyService,
|
||||
)
|
||||
from igny8_core.modules.site_builder.serializers import (
|
||||
PageBlueprintSerializer,
|
||||
@@ -40,6 +43,11 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
throttle_scope = 'site_builder'
|
||||
throttle_classes = [DebugScopedRateThrottle]
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.workflow_service = WorkflowStateService()
|
||||
self.taxonomy_service = TaxonomyService()
|
||||
|
||||
def get_permissions(self):
|
||||
"""
|
||||
Allow public read access for list requests with site filter (used by Sites Renderer fallback).
|
||||
@@ -99,11 +107,19 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
except Sector.DoesNotExist:
|
||||
raise ValidationError({'sector_id': 'Sector does not belong to the selected site.'})
|
||||
|
||||
serializer.save(account=site.account, site=site, sector=sector)
|
||||
blueprint = serializer.save(account=site.account, site=site, sector=sector)
|
||||
if self.workflow_service.enabled:
|
||||
self.workflow_service.initialize(blueprint)
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def generate_structure(self, request, pk=None):
|
||||
blueprint = self.get_object()
|
||||
if self.workflow_service.enabled:
|
||||
try:
|
||||
self.workflow_service.validate_step(blueprint, 'clusters')
|
||||
self.workflow_service.validate_step(blueprint, 'taxonomies')
|
||||
except ValidationError as exc:
|
||||
return error_response(str(exc), status.HTTP_400_BAD_REQUEST, request)
|
||||
business_brief = request.data.get('business_brief') or \
|
||||
blueprint.config_json.get('business_brief', '')
|
||||
objectives = request.data.get('objectives') or \
|
||||
@@ -119,7 +135,10 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
style_preferences=style,
|
||||
metadata=request.data.get('metadata', {}),
|
||||
)
|
||||
return Response(result, status=status.HTTP_202_ACCEPTED if 'task_id' in result else status.HTTP_200_OK)
|
||||
response = Response(result, status=status.HTTP_202_ACCEPTED if 'task_id' in result else status.HTTP_200_OK)
|
||||
if self.workflow_service.enabled:
|
||||
self.workflow_service.refresh_state(blueprint)
|
||||
return response
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
def generate_all_pages(self, request, pk=None):
|
||||
@@ -136,6 +155,11 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
page_ids = request.data.get('page_ids')
|
||||
force = request.data.get('force', False)
|
||||
|
||||
if self.workflow_service.enabled:
|
||||
try:
|
||||
self.workflow_service.validate_step(blueprint, 'sitemap')
|
||||
except ValidationError as exc:
|
||||
return error_response(str(exc), status.HTTP_400_BAD_REQUEST, request)
|
||||
service = PageGenerationService()
|
||||
try:
|
||||
result = service.bulk_generate_pages(
|
||||
@@ -144,7 +168,10 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
force_regenerate=force
|
||||
)
|
||||
response_status = status.HTTP_202_ACCEPTED if result.get('success') else status.HTTP_400_BAD_REQUEST
|
||||
return success_response(result, request=request, status_code=response_status)
|
||||
response = success_response(result, request=request, status_code=response_status)
|
||||
if self.workflow_service.enabled:
|
||||
self.workflow_service.refresh_state(blueprint)
|
||||
return response
|
||||
except Exception as e:
|
||||
return error_response(str(e), status.HTTP_400_BAD_REQUEST, request)
|
||||
|
||||
@@ -166,6 +193,12 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
blueprint = self.get_object()
|
||||
page_ids = request.data.get('page_ids')
|
||||
|
||||
if self.workflow_service.enabled:
|
||||
try:
|
||||
self.workflow_service.validate_step(blueprint, 'coverage')
|
||||
except ValidationError as exc:
|
||||
return error_response(str(exc), status.HTTP_400_BAD_REQUEST, request)
|
||||
|
||||
service = PageGenerationService()
|
||||
try:
|
||||
tasks = service.create_tasks_for_pages(blueprint, page_ids=page_ids)
|
||||
@@ -174,7 +207,10 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
from igny8_core.business.content.serializers import TasksSerializer
|
||||
serializer = TasksSerializer(tasks, many=True)
|
||||
|
||||
return success_response({'tasks': serializer.data, 'count': len(tasks)}, request=request)
|
||||
response = success_response({'tasks': serializer.data, 'count': len(tasks)}, request=request)
|
||||
if self.workflow_service.enabled:
|
||||
self.workflow_service.refresh_state(blueprint)
|
||||
return response
|
||||
except Exception as e:
|
||||
return error_response(str(e), status.HTTP_400_BAD_REQUEST, request)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user