perf: update some choice

pull/14911/head
ibuler 2025-02-20 10:03:35 +08:00 committed by feng626
parent 13e5a03312
commit f29ba1319c
9 changed files with 97 additions and 70 deletions

View File

@ -94,7 +94,7 @@ class Migration(migrations.Migration):
('snapshot', ('snapshot',
models.JSONField(blank=True, default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, null=True, models.JSONField(blank=True, default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, null=True,
verbose_name='Account backup snapshot')), verbose_name='Account backup snapshot')),
('trigger', models.CharField(choices=[('manual', 'Manual trigger'), ('timing', 'Timing trigger')], ('trigger', models.CharField(choices=[('manual', 'Manual'), ('timing', 'Timing')],
default='manual', max_length=128, verbose_name='Trigger mode')), default='manual', max_length=128, verbose_name='Trigger mode')),
('reason', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Reason')), ('reason', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Reason')),
('is_success', models.BooleanField(default=False, verbose_name='Is success')), ('is_success', models.BooleanField(default=False, verbose_name='Is success')),

View File

@ -1,11 +1,10 @@
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from accounts.models import AutomationExecution
from assets.const import AutomationTypes from assets.const import AutomationTypes
from assets.models import Asset, Node, BaseAutomation from assets.models import Asset, Node, BaseAutomation
from common.const.choices import Trigger from assets.serializers.automations import AutomationExecutionSerializer as AssetAutomationExecutionSerializer
from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from common.serializers.fields import ObjectRelatedField
from common.utils import get_logger from common.utils import get_logger
from ops.mixin import PeriodTaskSerializerMixin from ops.mixin import PeriodTaskSerializerMixin
from orgs.mixins.serializers import BulkOrgResourceModelSerializer from orgs.mixins.serializers import BulkOrgResourceModelSerializer
@ -49,17 +48,8 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
raise NotImplementedError raise NotImplementedError
class AutomationExecutionSerializer(serializers.ModelSerializer): class AutomationExecutionSerializer(AssetAutomationExecutionSerializer):
snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
type = serializers.ChoiceField(choices=AutomationTypes.choices, write_only=True, label=_('Type'))
trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
class Meta:
model = AutomationExecution
read_only_fields = [
'trigger', 'date_start', 'date_finished', 'snapshot', 'status', 'duration'
]
fields = ['id', 'automation', 'type'] + read_only_fields
@staticmethod @staticmethod
def get_snapshot(obj): def get_snapshot(obj):

View File

@ -11,7 +11,6 @@ import common.db.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
@ -27,8 +26,11 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
('connectivity', models.CharField(choices=[('-', 'Unknown'), ('na', 'N/A'), ('ok', 'OK'), ('err', 'Error')], default='-', max_length=16, verbose_name='Connectivity')), models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('connectivity',
models.CharField(choices=[('-', 'Unknown'), ('na', 'N/A'), ('ok', 'OK'), ('err', 'Error')],
default='-', max_length=16, verbose_name='Connectivity')),
('date_verified', models.DateTimeField(null=True, verbose_name='Date verified')), ('date_verified', models.DateTimeField(null=True, verbose_name='Date verified')),
('name', models.CharField(max_length=128, verbose_name='Name')), ('name', models.CharField(max_length=128, verbose_name='Name')),
('address', models.CharField(db_index=True, max_length=767, verbose_name='Address')), ('address', models.CharField(db_index=True, max_length=767, verbose_name='Address')),
@ -39,21 +41,27 @@ class Migration(migrations.Migration):
options={ options={
'verbose_name': 'Asset', 'verbose_name': 'Asset',
'ordering': [], 'ordering': [],
'permissions': [('refresh_assethardwareinfo', 'Can refresh asset hardware info'), ('test_assetconnectivity', 'Can test asset connectivity'), ('match_asset', 'Can match asset'), ('change_assetnodes', 'Can change asset nodes')], 'permissions': [('refresh_assethardwareinfo', 'Can refresh asset hardware info'),
('test_assetconnectivity', 'Can test asset connectivity'),
('match_asset', 'Can match asset'), ('change_assetnodes', 'Can change asset nodes')],
}, },
bases=(assets.models.asset.common.NodesRelationMixin, assets.models.asset.common.JSONFilterMixin, models.Model), bases=(
assets.models.asset.common.NodesRelationMixin, assets.models.asset.common.JSONFilterMixin, models.Model),
), ),
migrations.CreateModel( migrations.CreateModel(
name='AutomationExecution', name='AutomationExecution',
fields=[ fields=[
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('status', models.CharField(default='pending', max_length=16, verbose_name='Status')), ('status', models.CharField(default='pending', max_length=16, verbose_name='Status')),
('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')),
('date_start', models.DateTimeField(db_index=True, null=True, verbose_name='Date start')), ('date_start', models.DateTimeField(db_index=True, null=True, verbose_name='Date start')),
('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')), ('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')),
('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True, verbose_name='Automation snapshot')), ('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True,
('trigger', models.CharField(choices=[('manual', 'Manual trigger'), ('timing', 'Timing trigger')], default='manual', max_length=128, verbose_name='Trigger mode')), verbose_name='Automation snapshot')),
('trigger', models.CharField(choices=[('manual', 'Manual'), ('timing', 'Timing')], default='manual',
max_length=128, verbose_name='Trigger mode')),
], ],
options={ options={
'verbose_name': 'Automation task execution', 'verbose_name': 'Automation task execution',
@ -69,7 +77,8 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('name', models.CharField(max_length=128, verbose_name='Name')), ('name', models.CharField(max_length=128, verbose_name='Name')),
('is_periodic', models.BooleanField(default=False, verbose_name='Periodic run')), ('is_periodic', models.BooleanField(default=False, verbose_name='Periodic run')),
('interval', models.IntegerField(blank=True, default=24, null=True, verbose_name='Interval')), ('interval', models.IntegerField(blank=True, default=24, null=True, verbose_name='Interval')),
@ -92,7 +101,8 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('name', models.CharField(max_length=128, verbose_name='Name')), ('name', models.CharField(max_length=128, verbose_name='Name')),
], ],
options={ options={
@ -108,7 +118,8 @@ class Migration(migrations.Migration):
('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')),
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('key', models.CharField(max_length=64, unique=True, verbose_name='Key')), ('key', models.CharField(max_length=64, unique=True, verbose_name='Key')),
('value', models.CharField(max_length=128, verbose_name='Value')), ('value', models.CharField(max_length=128, verbose_name='Value')),
@ -123,7 +134,8 @@ class Migration(migrations.Migration):
'ordering': ['parent_key', 'value'], 'ordering': ['parent_key', 'value'],
'permissions': [('match_node', 'Can match node')], 'permissions': [('match_node', 'Can match node')],
}, },
bases=(models.Model, assets.models.node.SomeNodesMixin, assets.models.node.FamilyMixin, assets.models.node.NodeAssetsMixin), bases=(models.Model, assets.models.node.SomeNodesMixin, assets.models.node.FamilyMixin,
assets.models.node.NodeAssetsMixin),
), ),
migrations.CreateModel( migrations.CreateModel(
name='Platform', name='Platform',
@ -139,7 +151,9 @@ class Migration(migrations.Migration):
('type', models.CharField(default='linux', max_length=32, verbose_name='Type')), ('type', models.CharField(default='linux', max_length=32, verbose_name='Type')),
('meta', common.db.fields.JsonDictTextField(blank=True, null=True, verbose_name='Meta')), ('meta', common.db.fields.JsonDictTextField(blank=True, null=True, verbose_name='Meta')),
('internal', models.BooleanField(default=False, verbose_name='Internal')), ('internal', models.BooleanField(default=False, verbose_name='Internal')),
('charset', models.CharField(choices=[('utf-8', 'UTF-8'), ('gbk', 'GBK')], default='utf-8', max_length=8, verbose_name='Charset')), ('charset',
models.CharField(choices=[('utf-8', 'UTF-8'), ('gbk', 'GBK')], default='utf-8', max_length=8,
verbose_name='Charset')),
('domain_enabled', models.BooleanField(default=True, verbose_name='Gateway enabled')), ('domain_enabled', models.BooleanField(default=True, verbose_name='Gateway enabled')),
('su_enabled', models.BooleanField(default=False, verbose_name='Su enabled')), ('su_enabled', models.BooleanField(default=False, verbose_name='Su enabled')),
('su_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Su method')), ('su_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Su method')),
@ -152,7 +166,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Cloud', name='Cloud',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
], ],
options={ options={
'verbose_name': 'Cloud', 'verbose_name': 'Cloud',
@ -162,7 +178,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Custom', name='Custom',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
], ],
options={ options={
'verbose_name': 'Custom asset', 'verbose_name': 'Custom asset',
@ -172,7 +190,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Database', name='Database',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
('db_name', models.CharField(blank=True, max_length=1024, verbose_name='Database')), ('db_name', models.CharField(blank=True, max_length=1024, verbose_name='Database')),
('use_ssl', models.BooleanField(default=False, verbose_name='Use SSL')), ('use_ssl', models.BooleanField(default=False, verbose_name='Use SSL')),
('ca_cert', common.db.fields.EncryptTextField(blank=True, verbose_name='CA cert')), ('ca_cert', common.db.fields.EncryptTextField(blank=True, verbose_name='CA cert')),
@ -188,7 +208,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Device', name='Device',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
], ],
options={ options={
'verbose_name': 'Device', 'verbose_name': 'Device',
@ -198,7 +220,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='GPT', name='GPT',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
('proxy', models.CharField(blank=True, default='', max_length=128, verbose_name='Proxy')), ('proxy', models.CharField(blank=True, default='', max_length=128, verbose_name='Proxy')),
], ],
options={ options={
@ -209,7 +233,9 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Host', name='Host',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
primary_key=True, serialize=False, to='assets.asset')),
], ],
options={ options={
'verbose_name': 'Host', 'verbose_name': 'Host',
@ -219,11 +245,17 @@ class Migration(migrations.Migration):
migrations.CreateModel( migrations.CreateModel(
name='Web', name='Web',
fields=[ fields=[
('asset_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.asset')), ('asset_ptr',
('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')], default='basic', max_length=16, verbose_name='Autofill')), models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True,
('username_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Username selector')), primary_key=True, serialize=False, to='assets.asset')),
('password_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Password selector')), ('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')],
('submit_selector', models.CharField(blank=True, default='', max_length=128, verbose_name='Submit selector')), default='basic', max_length=16, verbose_name='Autofill')),
('username_selector',
models.CharField(blank=True, default='', max_length=128, verbose_name='Username selector')),
('password_selector',
models.CharField(blank=True, default='', max_length=128, verbose_name='Password selector')),
('submit_selector',
models.CharField(blank=True, default='', max_length=128, verbose_name='Submit selector')),
('script', models.JSONField(blank=True, default=list, verbose_name='Script')), ('script', models.JSONField(blank=True, default=list, verbose_name='Script')),
], ],
options={ options={
@ -237,7 +269,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32, verbose_name='Name')), ('name', models.CharField(max_length=32, verbose_name='Name')),
('port', models.IntegerField(verbose_name='Port')), ('port', models.IntegerField(verbose_name='Port')),
('asset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', to='assets.asset', verbose_name='Asset')), ('asset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols',
to='assets.asset', verbose_name='Asset')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -251,7 +284,8 @@ class Migration(migrations.Migration):
('default', models.BooleanField(default=False, verbose_name='Default')), ('default', models.BooleanField(default=False, verbose_name='Default')),
('public', models.BooleanField(default=True, verbose_name='Public')), ('public', models.BooleanField(default=True, verbose_name='Public')),
('setting', models.JSONField(default=dict, verbose_name='Setting')), ('setting', models.JSONField(default=dict, verbose_name='Setting')),
('platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols', to='assets.platform')), ('platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='protocols',
to='assets.platform')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -264,24 +298,32 @@ class Migration(migrations.Migration):
('ping_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Ping method')), ('ping_method', models.CharField(blank=True, max_length=32, null=True, verbose_name='Ping method')),
('ping_params', models.JSONField(default=dict, verbose_name='Ping params')), ('ping_params', models.JSONField(default=dict, verbose_name='Ping params')),
('gather_facts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')), ('gather_facts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')),
('gather_facts_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), ('gather_facts_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')),
('gather_facts_params', models.JSONField(default=dict, verbose_name='Gather facts params')), ('gather_facts_params', models.JSONField(default=dict, verbose_name='Gather facts params')),
('change_secret_enabled', models.BooleanField(default=False, verbose_name='Change secret enabled')), ('change_secret_enabled', models.BooleanField(default=False, verbose_name='Change secret enabled')),
('change_secret_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Change secret method')), ('change_secret_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Change secret method')),
('change_secret_params', models.JSONField(default=dict, verbose_name='Change secret params')), ('change_secret_params', models.JSONField(default=dict, verbose_name='Change secret params')),
('push_account_enabled', models.BooleanField(default=False, verbose_name='Push account enabled')), ('push_account_enabled', models.BooleanField(default=False, verbose_name='Push account enabled')),
('push_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Push account method')), ('push_account_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Push account method')),
('push_account_params', models.JSONField(default=dict, verbose_name='Push account params')), ('push_account_params', models.JSONField(default=dict, verbose_name='Push account params')),
('verify_account_enabled', models.BooleanField(default=False, verbose_name='Verify account enabled')), ('verify_account_enabled', models.BooleanField(default=False, verbose_name='Verify account enabled')),
('verify_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Verify account method')), ('verify_account_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Verify account method')),
('verify_account_params', models.JSONField(default=dict, verbose_name='Verify account params')), ('verify_account_params', models.JSONField(default=dict, verbose_name='Verify account params')),
('gather_accounts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')), ('gather_accounts_enabled', models.BooleanField(default=False, verbose_name='Gather facts enabled')),
('gather_accounts_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')), ('gather_accounts_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Gather facts method')),
('gather_accounts_params', models.JSONField(default=dict, verbose_name='Gather facts params')), ('gather_accounts_params', models.JSONField(default=dict, verbose_name='Gather facts params')),
('remove_account_enabled', models.BooleanField(default=False, verbose_name='Remove account enabled')), ('remove_account_enabled', models.BooleanField(default=False, verbose_name='Remove account enabled')),
('remove_account_method', models.TextField(blank=True, max_length=32, null=True, verbose_name='Remove account method')), ('remove_account_method',
models.TextField(blank=True, max_length=32, null=True, verbose_name='Remove account method')),
('remove_account_params', models.JSONField(default=dict, verbose_name='Remove account params')), ('remove_account_params', models.JSONField(default=dict, verbose_name='Remove account params')),
('platform', models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='automation', to='assets.platform')), ('platform',
models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='automation',
to='assets.platform')),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -293,10 +335,12 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')), ('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)),
('org_id', models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), ('org_id',
models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')),
('name', models.CharField(max_length=128, verbose_name='Name')), ('name', models.CharField(max_length=128, verbose_name='Name')),
('value', models.CharField(max_length=128, verbose_name='Value')), ('value', models.CharField(max_length=128, verbose_name='Value')),
('category', models.CharField(choices=[('S', 'System'), ('U', 'User')], default='U', max_length=128, verbose_name='Category')), ('category', models.CharField(choices=[('S', 'System'), ('U', 'User')], default='U', max_length=128,
verbose_name='Category')),
('is_active', models.BooleanField(default=True, verbose_name='Is active')), ('is_active', models.BooleanField(default=True, verbose_name='Is active')),
], ],
options={ options={

View File

@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers from rest_framework import serializers
from assets.models import Asset, Node, BaseAutomation, AutomationExecution from assets.models import Asset, Node, BaseAutomation, AutomationExecution
from common.const.choices import Trigger from common.const.choices import Trigger, Status
from common.serializers.fields import ObjectRelatedField, LabeledChoiceField from common.serializers.fields import ObjectRelatedField, LabeledChoiceField
from common.utils import get_logger from common.utils import get_logger
from ops.mixin import PeriodTaskSerializerMixin from ops.mixin import PeriodTaskSerializerMixin
@ -36,24 +36,17 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
class AutomationExecutionSerializer(serializers.ModelSerializer): class AutomationExecutionSerializer(serializers.ModelSerializer):
snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
status = serializers.SerializerMethodField(label=_("Status"))
trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode")) trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status'))
class Meta: class Meta:
model = AutomationExecution model = AutomationExecution
read_only_fields = [ read_only_fields = [
'trigger', 'date_start', 'date_finished', 'snapshot', 'status', 'duration' 'trigger', 'date_start', 'date_finished',
'snapshot', 'status', 'duration'
] ]
fields = ['id', 'automation'] + read_only_fields fields = ['id', 'automation'] + read_only_fields
@staticmethod
def get_status(obj):
from common.const import Status
status = Status._member_map_.get(obj.status)
if status is None:
return obj.status
return status.label
@staticmethod @staticmethod
def get_snapshot(obj): def get_snapshot(obj):
from assets.const import AutomationTypes as AssetTypes from assets.const import AutomationTypes as AssetTypes

View File

@ -54,8 +54,8 @@ def get_country_phone_choices():
class Trigger(models.TextChoices): class Trigger(models.TextChoices):
manual = 'manual', _('Manual trigger') manual = 'manual', _('Manual')
timing = 'timing', _('Timing trigger') timing = 'timing', _('Timing')
class Status(models.TextChoices): class Status(models.TextChoices):

View File

@ -4414,11 +4414,11 @@ msgid "China"
msgstr "" msgstr ""
#: common/const/choices.py:57 #: common/const/choices.py:57
msgid "Manual trigger" msgid "Manual"
msgstr "" msgstr ""
#: common/const/choices.py:58 #: common/const/choices.py:58
msgid "Timing trigger" msgid "Timing"
msgstr "" msgstr ""
#: common/const/choices.py:62 #: common/const/choices.py:62

View File

@ -4566,11 +4566,11 @@ msgid "China"
msgstr "中国" msgstr "中国"
#: common/const/choices.py:57 #: common/const/choices.py:57
msgid "Manual trigger" msgid "Manual"
msgstr "手動トリガー" msgstr "手動トリガー"
#: common/const/choices.py:58 #: common/const/choices.py:58
msgid "Timing trigger" msgid "Timing"
msgstr "タイミングトリガー" msgstr "タイミングトリガー"
#: common/const/choices.py:62 #: common/const/choices.py:62

View File

@ -4533,11 +4533,11 @@ msgid "China"
msgstr "中国" msgstr "中国"
#: common/const/choices.py:57 #: common/const/choices.py:57
msgid "Manual trigger" msgid "Manual"
msgstr "手动触发" msgstr "手动触发"
#: common/const/choices.py:58 #: common/const/choices.py:58
msgid "Timing trigger" msgid "Timing"
msgstr "定时触发" msgstr "定时触发"
#: common/const/choices.py:62 #: common/const/choices.py:62

View File

@ -4508,11 +4508,11 @@ msgid "China"
msgstr "中國" msgstr "中國"
#: common/const/choices.py:57 #: common/const/choices.py:57
msgid "Manual trigger" msgid "Manual"
msgstr "手動觸發" msgstr "手動觸發"
#: common/const/choices.py:58 #: common/const/choices.py:58
msgid "Timing trigger" msgid "Timing"
msgstr "定時觸發" msgstr "定時觸發"
#: common/const/choices.py:62 #: common/const/choices.py:62