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',
models.JSONField(blank=True, default=dict, encoder=common.db.encoder.ModelJSONFieldEncoder, null=True,
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')),
('reason', models.CharField(blank=True, max_length=1024, null=True, verbose_name='Reason')),
('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 rest_framework import serializers
from accounts.models import AutomationExecution
from assets.const import AutomationTypes
from assets.models import Asset, Node, BaseAutomation
from common.const.choices import Trigger
from common.serializers.fields import ObjectRelatedField, LabeledChoiceField
from assets.serializers.automations import AutomationExecutionSerializer as AssetAutomationExecutionSerializer
from common.serializers.fields import ObjectRelatedField
from common.utils import get_logger
from ops.mixin import PeriodTaskSerializerMixin
from orgs.mixins.serializers import BulkOrgResourceModelSerializer
@ -49,17 +48,8 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
raise NotImplementedError
class AutomationExecutionSerializer(serializers.ModelSerializer):
class AutomationExecutionSerializer(AssetAutomationExecutionSerializer):
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
def get_snapshot(obj):

View File

@ -11,7 +11,6 @@ import common.db.fields
class Migration(migrations.Migration):
initial = True
dependencies = [
@ -27,8 +26,11 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('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')),
('connectivity', models.CharField(choices=[('-', 'Unknown'), ('na', 'N/A'), ('ok', 'OK'), ('err', 'Error')], default='-', max_length=16, verbose_name='Connectivity')),
('org_id',
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')),
('name', models.CharField(max_length=128, verbose_name='Name')),
('address', models.CharField(db_index=True, max_length=767, verbose_name='Address')),
@ -39,21 +41,27 @@ class Migration(migrations.Migration):
options={
'verbose_name': 'Asset',
'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(
name='AutomationExecution',
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)),
('status', models.CharField(default='pending', max_length=16, verbose_name='Status')),
('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_finished', models.DateTimeField(null=True, verbose_name='Date finished')),
('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True, verbose_name='Automation snapshot')),
('trigger', models.CharField(choices=[('manual', 'Manual trigger'), ('timing', 'Timing trigger')], default='manual', max_length=128, verbose_name='Trigger mode')),
('snapshot', common.db.fields.EncryptJsonDictTextField(blank=True, default=dict, null=True,
verbose_name='Automation snapshot')),
('trigger', models.CharField(choices=[('manual', 'Manual'), ('timing', 'Timing')], default='manual',
max_length=128, verbose_name='Trigger mode')),
],
options={
'verbose_name': 'Automation task execution',
@ -69,7 +77,8 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('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')),
('is_periodic', models.BooleanField(default=False, verbose_name='Periodic run')),
('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')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('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')),
],
options={
@ -108,7 +118,8 @@ class Migration(migrations.Migration):
('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')),
('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)),
('key', models.CharField(max_length=64, unique=True, verbose_name='Key')),
('value', models.CharField(max_length=128, verbose_name='Value')),
@ -123,7 +134,8 @@ class Migration(migrations.Migration):
'ordering': ['parent_key', 'value'],
'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(
name='Platform',
@ -139,7 +151,9 @@ class Migration(migrations.Migration):
('type', models.CharField(default='linux', max_length=32, verbose_name='Type')),
('meta', common.db.fields.JsonDictTextField(blank=True, null=True, verbose_name='Meta')),
('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')),
('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')),
@ -152,7 +166,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Cloud',
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={
'verbose_name': 'Cloud',
@ -162,7 +178,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Custom',
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={
'verbose_name': 'Custom asset',
@ -172,7 +190,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Database',
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')),
('use_ssl', models.BooleanField(default=False, verbose_name='Use SSL')),
('ca_cert', common.db.fields.EncryptTextField(blank=True, verbose_name='CA cert')),
@ -188,7 +208,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Device',
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={
'verbose_name': 'Device',
@ -198,7 +220,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='GPT',
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')),
],
options={
@ -209,7 +233,9 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Host',
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={
'verbose_name': 'Host',
@ -219,11 +245,17 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='Web',
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')),
('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')], 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')),
('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')),
('autofill', models.CharField(choices=[('no', 'Disabled'), ('basic', 'Basic'), ('script', 'Script')],
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')),
],
options={
@ -237,7 +269,8 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=32, verbose_name='Name')),
('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(
@ -251,7 +284,8 @@ class Migration(migrations.Migration):
('default', models.BooleanField(default=False, verbose_name='Default')),
('public', models.BooleanField(default=True, verbose_name='Public')),
('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(
@ -264,24 +298,32 @@ class Migration(migrations.Migration):
('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')),
('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')),
('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')),
('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')),
('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')),
('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')),
('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')),
('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(
@ -293,10 +335,12 @@ class Migration(migrations.Migration):
('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')),
('comment', models.TextField(blank=True, default='', verbose_name='Comment')),
('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')),
('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')),
],
options={

View File

@ -2,7 +2,7 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
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.utils import get_logger
from ops.mixin import PeriodTaskSerializerMixin
@ -36,24 +36,17 @@ class BaseAutomationSerializer(PeriodTaskSerializerMixin, BulkOrgResourceModelSe
class AutomationExecutionSerializer(serializers.ModelSerializer):
snapshot = serializers.SerializerMethodField(label=_('Automation snapshot'))
status = serializers.SerializerMethodField(label=_("Status"))
trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode"))
status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status'))
class Meta:
model = AutomationExecution
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
@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
def get_snapshot(obj):
from assets.const import AutomationTypes as AssetTypes

View File

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

View File

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

View File

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

View File

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

View File

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