fix: 修改翻译

pull/4107/head
ibuler 2020-06-16 12:20:16 +08:00
commit b81e424e80
7 changed files with 75 additions and 30 deletions

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
import time import time
from django.utils.translation import ugettext as _
from rest_framework.permissions import AllowAny from rest_framework.permissions import AllowAny
from rest_framework.generics import CreateAPIView from rest_framework.generics import CreateAPIView
from rest_framework.serializers import ValidationError from rest_framework.serializers import ValidationError
@ -56,4 +57,4 @@ class UserOtpVerifyApi(CreateAPIView):
request.session["MFA_VERIFY_TIME"] = int(time.time()) request.session["MFA_VERIFY_TIME"] = int(time.time())
return Response({"ok": "1"}) return Response({"ok": "1"})
else: else:
return Response({"error": "Code not valid"}, status=400) return Response({"error": _("Code is invalid")}, status=400)

Binary file not shown.

View File

@ -986,7 +986,7 @@ msgstr "状态"
msgid "Date login" msgid "Date login"
msgstr "登录日期" msgstr "登录日期"
#: audits/serializers.py:61 audits/serializers.py:73 ops/models/adhoc.py:240 #: audits/serializers.py:61 audits/serializers.py:73 ops/models/adhoc.py:244
msgid "Is success" msgid "Is success"
msgstr "是否成功" msgstr "是否成功"
@ -1003,6 +1003,10 @@ msgstr "主机"
msgid "Run as" msgid "Run as"
msgstr "运行用户" msgstr "运行用户"
#: authentication/api/mfa.py:60
msgid "Code is invalid"
msgstr "Code无效"
#: authentication/backends/api.py:53 #: authentication/backends/api.py:53
msgid "Invalid signature header. No credentials provided." msgid "Invalid signature header. No credentials provided."
msgstr "" msgstr ""
@ -1500,46 +1504,46 @@ msgstr "Become"
msgid "Create by" msgid "Create by"
msgstr "创建者" msgstr "创建者"
#: ops/models/adhoc.py:233 #: ops/models/adhoc.py:237
msgid "Task display" msgid "Task display"
msgstr "任务展示" msgstr "任务展示"
#: ops/models/adhoc.py:234 #: ops/models/adhoc.py:238
msgid "Host amount" msgid "Host amount"
msgstr "主机数量" msgstr "主机数量"
#: ops/models/adhoc.py:236 #: ops/models/adhoc.py:240
msgid "Start time" msgid "Start time"
msgstr "开始时间" msgstr "开始时间"
#: ops/models/adhoc.py:237 #: ops/models/adhoc.py:241
msgid "End time" msgid "End time"
msgstr "完成时间" msgstr "完成时间"
#: ops/models/adhoc.py:238 xpack/plugins/change_auth_plan/models.py:179 #: ops/models/adhoc.py:242 xpack/plugins/change_auth_plan/models.py:179
#: xpack/plugins/change_auth_plan/models.py:310 #: xpack/plugins/change_auth_plan/models.py:310
#: xpack/plugins/gathered_user/models.py:79 #: xpack/plugins/gathered_user/models.py:79
msgid "Time" msgid "Time"
msgstr "时间" msgstr "时间"
#: ops/models/adhoc.py:239 ops/models/command.py:26 #: ops/models/adhoc.py:243 ops/models/command.py:26
#: terminal/serializers/session.py:30 #: terminal/serializers/session.py:30
msgid "Is finished" msgid "Is finished"
msgstr "是否完成" msgstr "是否完成"
#: ops/models/adhoc.py:241 #: ops/models/adhoc.py:245
msgid "Adhoc raw result" msgid "Adhoc raw result"
msgstr "结果" msgstr "结果"
#: ops/models/adhoc.py:242 #: ops/models/adhoc.py:246
msgid "Adhoc result summary" msgid "Adhoc result summary"
msgstr "汇总" msgstr "汇总"
#: ops/models/adhoc.py:282 xpack/plugins/change_auth_plan/utils.py:137 #: ops/models/adhoc.py:286 xpack/plugins/change_auth_plan/utils.py:137
msgid "{} Start task: {}" msgid "{} Start task: {}"
msgstr "{} 任务开始: {}" msgstr "{} 任务开始: {}"
#: ops/models/adhoc.py:291 xpack/plugins/change_auth_plan/utils.py:149 #: ops/models/adhoc.py:295 xpack/plugins/change_auth_plan/utils.py:149
msgid "{} Task finish" msgid "{} Task finish"
msgstr "{} 任务结束" msgstr "{} 任务结束"

View File

@ -4,14 +4,17 @@
from django.shortcuts import get_object_or_404 from django.shortcuts import get_object_or_404
from rest_framework import viewsets, generics from rest_framework import viewsets, generics
from rest_framework.views import Response from rest_framework.views import Response
from django.db.models import Count, Q
from common.permissions import IsOrgAdmin from common.permissions import IsOrgAdmin
from common.serializers import CeleryTaskSerializer from common.serializers import CeleryTaskSerializer
from orgs.utils import current_org
from ..models import Task, AdHoc, AdHocExecution from ..models import Task, AdHoc, AdHocExecution
from ..serializers import TaskSerializer, AdHocSerializer, \ from ..serializers import (
AdHocExecutionSerializer, TaskDetailSerializer TaskSerializer,
AdHocSerializer,
AdHocExecutionSerializer,
TaskDetailSerializer,
AdHocDetailSerializer,
)
from ..tasks import run_ansible_task from ..tasks import run_ansible_task
__all__ = [ __all__ = [
@ -53,6 +56,11 @@ class AdHocViewSet(viewsets.ModelViewSet):
serializer_class = AdHocSerializer serializer_class = AdHocSerializer
permission_classes = (IsOrgAdmin,) permission_classes = (IsOrgAdmin,)
def get_serializer_class(self):
if self.action == 'retrieve':
return AdHocDetailSerializer
return super().get_serializer_class()
def get_queryset(self): def get_queryset(self):
task_id = self.request.query_params.get('task') task_id = self.request.query_params.get('task')
if task_id: if task_id:

View File

@ -150,6 +150,10 @@ class AdHoc(OrgModelMixin):
created_by = models.CharField(max_length=64, default='', blank=True, null=True, verbose_name=_('Create by')) created_by = models.CharField(max_length=64, default='', blank=True, null=True, verbose_name=_('Create by'))
date_created = models.DateTimeField(auto_now_add=True, db_index=True) date_created = models.DateTimeField(auto_now_add=True, db_index=True)
@lazyproperty
def run_times(self):
return self.execution.count()
@property @property
def inventory(self): def inventory(self):
if self.become: if self.become:

View File

@ -8,10 +8,16 @@ from ..models import Task, AdHoc, AdHocExecution, CommandExecution
class AdHocExecutionSerializer(serializers.ModelSerializer): class AdHocExecutionSerializer(serializers.ModelSerializer):
stat = serializers.SerializerMethodField() stat = serializers.SerializerMethodField()
last_success = serializers.ListField(source='success_hosts')
last_failure = serializers.DictField(source='failed_hosts')
class Meta: class Meta:
model = AdHocExecution model = AdHocExecution
fields = '__all__' fields = [
'id', 'task', 'task_display', 'hosts_amount', 'adhoc', 'date_start', 'stat',
'date_finished', 'timedelta', 'is_finished', 'is_success', 'result', 'summary',
'short_id', 'adhoc_short_id', 'last_success', 'last_failure'
]
@staticmethod @staticmethod
def get_task(obj): def get_task(obj):
@ -28,17 +34,15 @@ class AdHocExecutionSerializer(serializers.ModelSerializer):
"failed": count_failed_hosts "failed": count_failed_hosts
} }
def get_field_names(self, declared_fields, info):
fields = super().get_field_names(declared_fields, info)
fields.extend(['short_id', 'adhoc_short_id'])
return fields
class AdHocExecutionExcludeResultSerializer(AdHocExecutionSerializer): class AdHocExecutionExcludeResultSerializer(AdHocExecutionSerializer):
def get_field_names(self, declared_fields, info): class Meta:
fields = super().get_field_names(declared_fields, info) model = AdHocExecution
fields = [i for i in fields if i not in ['result', 'summary']] fields = [
return fields 'id', 'task', 'task_display', 'hosts_amount', 'adhoc', 'date_start', 'stat',
'date_finished', 'timedelta', 'is_finished', 'is_success',
'short_id', 'adhoc_short_id', 'last_success', 'last_failure'
]
class TaskSerializer(serializers.ModelSerializer): class TaskSerializer(serializers.ModelSerializer):
@ -60,15 +64,15 @@ class TaskSerializer(serializers.ModelSerializer):
class TaskDetailSerializer(TaskSerializer): class TaskDetailSerializer(TaskSerializer):
last_success = serializers.ListField(source='latest_execution.success_hosts') contents = serializers.ListField(source='latest_adhoc.tasks')
last_failure = serializers.DictField(source='latest_execution.failed_hosts')
class Meta(TaskSerializer.Meta): class Meta(TaskSerializer.Meta):
fields = TaskSerializer.Meta.fields + ['last_success', 'last_failure'] fields = TaskSerializer.Meta.fields + ['contents']
class AdHocSerializer(serializers.ModelSerializer): class AdHocSerializer(serializers.ModelSerializer):
become_display = serializers.ReadOnlyField() become_display = serializers.ReadOnlyField()
tasks = serializers.ListField()
class Meta: class Meta:
model = AdHoc model = AdHoc
@ -86,6 +90,29 @@ class AdHocSerializer(serializers.ModelSerializer):
} }
class AdHocExecutionNestSerializer(serializers.ModelSerializer):
last_success = serializers.ListField(source='success_hosts')
last_failure = serializers.DictField(source='failed_hosts')
last_run = serializers.CharField(source='short_id')
class Meta:
model = AdHocExecution
fields = (
'last_success', 'last_failure', 'last_run', 'timedelta', 'is_finished',
'is_success'
)
class AdHocDetailSerializer(AdHocSerializer):
latest_execution = AdHocExecutionNestSerializer(allow_null=True)
task_name = serializers.CharField(source='task.name')
class Meta(AdHocSerializer.Meta):
fields = AdHocSerializer.Meta.fields + [
'latest_execution', 'created_by', 'run_times', 'task_name'
]
class CommandExecutionSerializer(serializers.ModelSerializer): class CommandExecutionSerializer(serializers.ModelSerializer):
result = serializers.JSONField(read_only=True) result = serializers.JSONField(read_only=True)
log_url = serializers.SerializerMethodField() log_url = serializers.SerializerMethodField()

View File

@ -23,7 +23,8 @@ class TicketSerializer(serializers.ModelSerializer):
] ]
extra_kwargs = { extra_kwargs = {
'status': {'label': _('Status')}, 'status': {'label': _('Status')},
'action': {'label': _('Action')} 'action': {'label': _('Action')},
'user_display': {'label': _('User')}
} }
def create(self, validated_data): def create(self, validated_data):