Skip to content

Commit

Permalink
backoffice: standardizing author app
Browse files Browse the repository at this point in the history
  • Loading branch information
DonHaul committed Oct 7, 2024
1 parent 5b3d208 commit 5a78324
Show file tree
Hide file tree
Showing 58 changed files with 416 additions and 702 deletions.
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ repos:
args: [ --pytest-test-first ]
exclude: '^(?!factories/)'
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.6
rev: v0.6.8
hooks:
- id: ruff
args: [ --fix ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,15 @@
from django.db.models import JSONField
from django_json_widget.widgets import JSONEditorWidget

from backoffice.authors.models import (
AuthorDecision,
AuthorWorkflow,
AuthorWorkflowTicket,
)
from backoffice.management.permissions import IsAdminOrCuratorUser
from backoffice.workflows.models import Decision, Workflow, WorkflowTicket


class WorkflowsAdminSite(admin.AdminSite):
class AuthorWorkflowsAdminSite(admin.AdminSite):
"""
Custom admin site for managing workflows.
Expand Down Expand Up @@ -63,8 +67,8 @@ def has_delete_permission(self, request, obj=None):
}


class WorkflowsDecisionsInline(admin.StackedInline):
model = Decision
class AuthorWorkflowsDecisionsInline(admin.StackedInline):
model = AuthorDecision
extra = 0
can_delete = False
show_change_link = True
Expand All @@ -78,8 +82,8 @@ def action_value(self, obj):
return obj.action


class WorkflowTicketsInline(admin.StackedInline):
model = WorkflowTicket
class AuthorWorkflowTicketsInline(admin.StackedInline):
model = AuthorWorkflowTicket
extra = 0
can_delete = False
show_change_link = True
Expand All @@ -89,7 +93,7 @@ def has_change_permission(self, request, obj=None):
return False


@admin.register(Workflow)
@admin.register(AuthorWorkflow)
class WorkflowAdmin(BaseModelAdmin):
"""
Admin class for Workflow model. Define get, update and delete permissions.
Expand All @@ -101,24 +105,20 @@ class WorkflowAdmin(BaseModelAdmin):
"id",
"workflow_type",
"status",
"core",
"is_update",
"_created_at",
"_updated_at",
)
list_filter = [
"workflow_type",
"status",
"core",
"is_update",
"_created_at",
"_updated_at",
]

inlines = [WorkflowsDecisionsInline, WorkflowTicketsInline]
inlines = [AuthorWorkflowsDecisionsInline, AuthorWorkflowTicketsInline]


@admin.register(Decision)
@admin.register(AuthorDecision)
class DecisionAdmin(BaseModelAdmin):
"""
Admin class for Decision model. Define get, update and delete permissions.
Expand All @@ -137,7 +137,7 @@ def action_value(self, obj):
return obj.action


@admin.register(WorkflowTicket)
@admin.register(AuthorWorkflowTicket)
class WorkflowTicketAdmin(BaseModelAdmin):
"""
Admin class for WorkflowTicket model. Define get, update and delete permissions.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from requests.exceptions import RequestException
from rest_framework import status

from backoffice.workflows.constants import WORKFLOW_DAGS
from backoffice.authors.constants import WORKFLOW_DAGS

AIRFLOW_BASE_URL = environ.get("AIRFLOW_BASE_URL")

Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,42 @@
from os import environ

from backoffice.authors.constants import (
DECISION_CHOICES,
StatusChoices,
WorkflowType,
allowed_workflow_types,
)
from backoffice.authors.documents import AuthorWorkflowDocument
from backoffice.authors.models import (
AuthorDecision,
AuthorWorkflow,
AuthorWorkflowTicket,
)
from django_elasticsearch_dsl_drf.serializers import DocumentSerializer
from drf_spectacular.utils import OpenApiExample, extend_schema_serializer
from rest_framework import serializers

from backoffice.workflows.constants import ResolutionDags, StatusChoices, WorkflowType
from backoffice.workflows.documents import WorkflowDocument
from backoffice.workflows.models import Decision, Workflow, WorkflowTicket


class WorkflowTicketSerializer(serializers.ModelSerializer):
@extend_schema_serializer(
examples=[
OpenApiExample(
"Accept",
description="Author Workflow Serializer",
value={"value": "accept", "create_ticket": False},
),
OpenApiExample(
"Reject",
description="Author Workflow Serializer",
value={"value": "reject", "create_ticket": False},
),
],
)
class AuthorWorkflowTicketSerializer(serializers.ModelSerializer):
ticket_url = serializers.SerializerMethodField()
workflow = serializers.PrimaryKeyRelatedField(queryset=Workflow.objects.all())
workflow = serializers.PrimaryKeyRelatedField(queryset=AuthorWorkflow.objects.all())

class Meta:
model = WorkflowTicket
model = AuthorWorkflowTicket
fields = "__all__"

def get_ticket_url(self, obj):
Expand All @@ -24,26 +46,24 @@ def get_ticket_url(self, obj):
)


class DecisionSerializer(serializers.ModelSerializer):
workflow = serializers.PrimaryKeyRelatedField(queryset=Workflow.objects.all())
class AuthorDecisionSerializer(serializers.ModelSerializer):
workflow = serializers.PrimaryKeyRelatedField(queryset=AuthorWorkflow.objects.all())

class Meta:
model = Decision
model = AuthorDecision
fields = "__all__"


class WorkflowSerializer(serializers.ModelSerializer):
tickets = WorkflowTicketSerializer(many=True, read_only=True)
decisions = DecisionSerializer(many=True, read_only=True)

class Meta:
model = Workflow
fields = "__all__"

class AuthorWorkflowSerializer(serializers.ModelSerializer):
def validate_workflow_type(self, value):
if value not in allowed_workflow_types:
raise serializers.ValidationError(
f"The field `workflow_type` should be on of {allowed_workflow_types}"
)
return value

class WorkflowDocumentSerializer(DocumentSerializer):
class Meta:
document = WorkflowDocument
model = AuthorWorkflow
fields = "__all__"


Expand All @@ -60,40 +80,20 @@ class Meta:
value={
"workflow_type": WorkflowType.AUTHOR_CREATE,
"status": StatusChoices.RUNNING,
"core": False,
"is_update": False,
"data": {},
},
),
],
)
class WorkflowAuthorSerializer(WorkflowSerializer):
def validate_workflow_type(self, value):
allowed_workflow_types = [
WorkflowType.AUTHOR_CREATE,
WorkflowType.AUTHOR_UPDATE,
]
if value not in allowed_workflow_types:
raise serializers.ValidationError(
f"The field `workflow_type` should be on of {allowed_workflow_types}"
)
return value
class AuthorWorkflowDocumentSerializer(DocumentSerializer):
tickets = AuthorWorkflowTicketSerializer(many=True, read_only=True)
decisions = AuthorDecisionSerializer(many=True, read_only=True)

class Meta:
document = AuthorWorkflowDocument
fields = "__all__"


@extend_schema_serializer(
examples=[
OpenApiExample(
"Accept",
description="Author Workflow Serializer",
value={"value": "accept", "create_ticket": False},
),
OpenApiExample(
"Reject",
description="Author Workflow Serializer",
value={"value": "reject", "create_ticket": False},
),
],
)
class AuthorResolutionSerializer(serializers.Serializer):
value = serializers.ChoiceField(choices=ResolutionDags)
value = serializers.ChoiceField(choices=DECISION_CHOICES)
create_ticket = serializers.BooleanField(default=False)
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from backoffice.workflows.api.serializers import DecisionSerializer
from backoffice.authors.api.serializers import AuthorDecisionSerializer


def add_decision(workflow_id, user, action):
serializer_class = DecisionSerializer
serializer_class = AuthorDecisionSerializer
data = {"workflow": workflow_id, "user": user, "action": action}

serializer = serializer_class(data=data)
Expand Down
Loading

0 comments on commit 5a78324

Please sign in to comment.