|
44 | 44 | 'ImageAttachmentSerializer', |
45 | 45 | 'JournalEntrySerializer', |
46 | 46 | 'ObjectChangeSerializer', |
47 | | - 'ReportDetailSerializer', |
48 | | - 'ReportSerializer', |
49 | | - 'ReportInputSerializer', |
50 | 47 | 'SavedFilterSerializer', |
51 | 48 | 'ScriptDetailSerializer', |
52 | 49 | 'ScriptInputSerializer', |
@@ -85,9 +82,9 @@ def get_action_object(self, instance): |
85 | 82 | context = {'request': self.context['request']} |
86 | 83 | # We need to manually instantiate the serializer for scripts |
87 | 84 | if instance.action_type == EventRuleActionChoices.SCRIPT: |
88 | | - script_name = instance.action_parameters['script_name'] |
89 | | - script = instance.action_object.scripts[script_name]() |
90 | | - return NestedScriptSerializer(script, context=context).data |
| 85 | + script = instance.action_object |
| 86 | + instance = script.python_class() if script.python_class else None |
| 87 | + return NestedScriptSerializer(instance, context=context).data |
91 | 88 | else: |
92 | 89 | serializer = get_serializer_for_model( |
93 | 90 | model=instance.action_object_type.model_class(), |
@@ -512,79 +509,54 @@ class Meta: |
512 | 509 | ] |
513 | 510 |
|
514 | 511 |
|
515 | | -# |
516 | | -# Reports |
517 | | -# |
518 | | - |
519 | | -class ReportSerializer(serializers.Serializer): |
520 | | - url = serializers.HyperlinkedIdentityField( |
521 | | - view_name='extras-api:report-detail', |
522 | | - lookup_field='full_name', |
523 | | - lookup_url_kwarg='pk' |
524 | | - ) |
525 | | - id = serializers.CharField(read_only=True, source="full_name") |
526 | | - module = serializers.CharField(max_length=255) |
527 | | - name = serializers.CharField(max_length=255) |
528 | | - description = serializers.CharField(max_length=255, required=False) |
529 | | - test_methods = serializers.ListField(child=serializers.CharField(max_length=255), read_only=True) |
530 | | - result = NestedJobSerializer() |
531 | | - display = serializers.SerializerMethodField(read_only=True) |
532 | | - |
533 | | - @extend_schema_field(serializers.CharField()) |
534 | | - def get_display(self, obj): |
535 | | - return f'{obj.name} ({obj.module})' |
536 | | - |
537 | | - |
538 | | -class ReportDetailSerializer(ReportSerializer): |
539 | | - result = JobSerializer() |
540 | | - |
541 | | - |
542 | | -class ReportInputSerializer(serializers.Serializer): |
543 | | - schedule_at = serializers.DateTimeField(required=False, allow_null=True) |
544 | | - interval = serializers.IntegerField(required=False, allow_null=True) |
545 | | - |
546 | | - def validate_schedule_at(self, value): |
547 | | - if value and not self.context['report'].scheduling_enabled: |
548 | | - raise serializers.ValidationError(_("Scheduling is not enabled for this report.")) |
549 | | - return value |
550 | | - |
551 | | - def validate_interval(self, value): |
552 | | - if value and not self.context['report'].scheduling_enabled: |
553 | | - raise serializers.ValidationError(_("Scheduling is not enabled for this report.")) |
554 | | - return value |
555 | | - |
556 | | - |
557 | 512 | # |
558 | 513 | # Scripts |
559 | 514 | # |
560 | 515 |
|
561 | | -class ScriptSerializer(serializers.Serializer): |
562 | | - url = serializers.HyperlinkedIdentityField( |
563 | | - view_name='extras-api:script-detail', |
564 | | - lookup_field='full_name', |
565 | | - lookup_url_kwarg='pk' |
566 | | - ) |
567 | | - id = serializers.CharField(read_only=True, source="full_name") |
568 | | - module = serializers.CharField(max_length=255) |
569 | | - name = serializers.CharField(read_only=True) |
570 | | - description = serializers.CharField(read_only=True) |
| 516 | +class ScriptSerializer(ValidatedModelSerializer): |
| 517 | + url = serializers.HyperlinkedIdentityField(view_name='extras-api:script-detail') |
| 518 | + description = serializers.SerializerMethodField(read_only=True) |
571 | 519 | vars = serializers.SerializerMethodField(read_only=True) |
572 | | - result = NestedJobSerializer() |
573 | | - display = serializers.SerializerMethodField(read_only=True) |
| 520 | + result = NestedJobSerializer(read_only=True) |
| 521 | + |
| 522 | + class Meta: |
| 523 | + model = Script |
| 524 | + fields = [ |
| 525 | + 'id', 'url', 'module', 'name', 'description', 'vars', 'result', 'display', 'is_executable', |
| 526 | + ] |
574 | 527 |
|
575 | 528 | @extend_schema_field(serializers.JSONField(allow_null=True)) |
576 | | - def get_vars(self, instance): |
577 | | - return { |
578 | | - k: v.__class__.__name__ for k, v in instance._get_vars().items() |
579 | | - } |
| 529 | + def get_vars(self, obj): |
| 530 | + if obj.python_class: |
| 531 | + return { |
| 532 | + k: v.__class__.__name__ for k, v in obj.python_class()._get_vars().items() |
| 533 | + } |
| 534 | + else: |
| 535 | + return {} |
580 | 536 |
|
581 | 537 | @extend_schema_field(serializers.CharField()) |
582 | 538 | def get_display(self, obj): |
583 | 539 | return f'{obj.name} ({obj.module})' |
584 | 540 |
|
| 541 | + @extend_schema_field(serializers.CharField()) |
| 542 | + def get_description(self, obj): |
| 543 | + if obj.python_class: |
| 544 | + return obj.python_class().description |
| 545 | + else: |
| 546 | + return None |
| 547 | + |
585 | 548 |
|
586 | 549 | class ScriptDetailSerializer(ScriptSerializer): |
587 | | - result = JobSerializer() |
| 550 | + result = serializers.SerializerMethodField(read_only=True) |
| 551 | + |
| 552 | + @extend_schema_field(JobSerializer()) |
| 553 | + def get_result(self, obj): |
| 554 | + job = obj.jobs.all().order_by('-created').first() |
| 555 | + context = { |
| 556 | + 'request': self.context['request'] |
| 557 | + } |
| 558 | + data = JobSerializer(job, context=context).data |
| 559 | + return data |
588 | 560 |
|
589 | 561 |
|
590 | 562 | class ScriptInputSerializer(serializers.Serializer): |
|
0 commit comments