diff --git a/.github/workflows/jms-build-test.yml b/.github/workflows/jms-build-test.yml index 8b6c98376..5b1942cea 100644 --- a/.github/workflows/jms-build-test.yml +++ b/.github/workflows/jms-build-test.yml @@ -1,26 +1,32 @@ name: "Run Build Test" on: push: - branches: - - pr@* - - repr@* + paths: + - 'Dockerfile' + - 'Dockerfile-*' + - 'pyproject.toml' + - 'poetry.lock' jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - uses: docker/setup-qemu-action@v3 + - uses: docker/setup-buildx-action@v3 - - uses: docker/setup-qemu-action@v2 + - name: Check Dockerfile + run: | + test -f Dockerfile-ce || cp -f Dockerfile Dockerfile-ce - - uses: docker/setup-buildx-action@v2 - - - uses: docker/build-push-action@v3 + - name: Build CE Image + uses: docker/build-push-action@v5 with: context: . push: false - tags: jumpserver/core-ce:test file: Dockerfile-ce + tags: jumpserver/core-ce:test + platforms: linux/amd64 build-args: | APT_MIRROR=http://deb.debian.org PIP_MIRROR=https://pypi.org/simple @@ -28,9 +34,22 @@ jobs: cache-from: type=gha cache-to: type=gha,mode=max - - uses: LouisBrunner/checks-action@v1.5.0 - if: always() + - name: Prepare EE Image + run: | + sed -i 's@^FROM registry.fit2cloud.com@# FROM registry.fit2cloud.com@g' Dockerfile-ee + sed -i 's@^COPY --from=build-xpack@# COPY --from=build-xpack@g' Dockerfile-ee + + - name: Build EE Image + uses: docker/build-push-action@v5 with: - token: ${{ secrets.GITHUB_TOKEN }} - name: Check Build - conclusion: ${{ job.status }} + context: . + push: false + file: Dockerfile-ee + tags: jumpserver/core-ee:test + platforms: linux/amd64 + build-args: | + APT_MIRROR=http://deb.debian.org + PIP_MIRROR=https://pypi.org/simple + PIP_JMS_MIRROR=https://pypi.org/simple + cache-from: type=gha + cache-to: type=gha,mode=max \ No newline at end of file diff --git a/Dockerfile-ce b/Dockerfile-ce index 622532f6d..5714a5465 100644 --- a/Dockerfile-ce +++ b/Dockerfile-ce @@ -87,6 +87,7 @@ ARG TOOLS=" \ default-mysql-client \ iputils-ping \ locales \ + netcat-openbsd \ nmap \ openssh-client \ patch \ diff --git a/apps/accounts/automations/gather_accounts/manager.py b/apps/accounts/automations/gather_accounts/manager.py index f8949df4d..f0610e331 100644 --- a/apps/accounts/automations/gather_accounts/manager.py +++ b/apps/accounts/automations/gather_accounts/manager.py @@ -51,8 +51,16 @@ class GatherAccountsManager(AccountBasePlaybookManager): data = self.generate_data(asset, result) self.asset_account_info[asset] = data + @staticmethod + def get_nested_info(data, *keys): + for key in keys: + data = data.get(key, {}) + if not data: + break + return data + def on_host_success(self, host, result): - info = result.get('debug', {}).get('res', {}).get('info', {}) + info = self.get_nested_info(result, 'debug', 'res', 'info') asset = self.host_asset_mapper.get(host) if asset and info: result = self.filter_success_result(asset.type, info) diff --git a/apps/accounts/serializers/account/account.py b/apps/accounts/serializers/account/account.py index 2230c8e92..c15bc0305 100644 --- a/apps/accounts/serializers/account/account.py +++ b/apps/accounts/serializers/account/account.py @@ -431,8 +431,11 @@ class AssetAccountBulkSerializer( class AccountSecretSerializer(SecretReadableMixin, AccountSerializer): class Meta(AccountSerializer.Meta): + fields = AccountSerializer.Meta.fields + ['spec_info'] extra_kwargs = { + **AccountSerializer.Meta.extra_kwargs, 'secret': {'write_only': False}, + 'spec_info': {'label': _('Spec info')}, } diff --git a/apps/accounts/serializers/account/base.py b/apps/accounts/serializers/account/base.py index 23dec0d3e..9de35eb8c 100644 --- a/apps/accounts/serializers/account/base.py +++ b/apps/accounts/serializers/account/base.py @@ -67,15 +67,14 @@ class BaseAccountSerializer(AuthValidateMixin, ResourceLabelsMixin, BulkOrgResou fields_mini = ['id', 'name', 'username'] fields_small = fields_mini + [ 'secret_type', 'secret', 'passphrase', - 'privileged', 'is_active', 'spec_info', + 'privileged', 'is_active', ] fields_other = ['created_by', 'date_created', 'date_updated', 'comment'] fields = fields_small + fields_other + ['labels'] read_only_fields = [ - 'spec_info', 'date_verified', 'created_by', 'date_created', + 'date_verified', 'created_by', 'date_created', ] extra_kwargs = { - 'spec_info': {'label': _('Spec info')}, 'username': {'help_text': _( "Tip: If no username is required for authentication, fill in `null`, " "If AD account, like `username@domain`" diff --git a/apps/accounts/serializers/account/template.py b/apps/accounts/serializers/account/template.py index ea302c3fd..fc6ccefeb 100644 --- a/apps/accounts/serializers/account/template.py +++ b/apps/accounts/serializers/account/template.py @@ -35,6 +35,7 @@ class AccountTemplateSerializer(BaseAccountSerializer): 'su_from' ] extra_kwargs = { + **BaseAccountSerializer.Meta.extra_kwargs, 'secret_strategy': {'help_text': _('Secret generation strategy for account creation')}, 'auto_push': {'help_text': _('Whether to automatically push the account to the asset')}, 'platforms': { @@ -64,6 +65,9 @@ class AccountTemplateSerializer(BaseAccountSerializer): class AccountTemplateSecretSerializer(SecretReadableMixin, AccountTemplateSerializer): class Meta(AccountTemplateSerializer.Meta): + fields = AccountTemplateSerializer.Meta.fields + ['spec_info'] extra_kwargs = { + **AccountTemplateSerializer.Meta.extra_kwargs, 'secret': {'write_only': False}, + 'spec_info': {'label': _('Spec info')}, } diff --git a/apps/assets/api/node.py b/apps/assets/api/node.py index 30c533179..a8d852221 100644 --- a/apps/assets/api/node.py +++ b/apps/assets/api/node.py @@ -22,6 +22,7 @@ from orgs.utils import current_org from rbac.permissions import RBACPermission from .. import serializers from ..models import Node +from ..signal_handlers import update_nodes_assets_amount from ..tasks import ( update_node_assets_hardware_info_manual, test_node_assets_connectivity_manual, @@ -94,6 +95,7 @@ class NodeAddChildrenApi(generics.UpdateAPIView): children = Node.objects.filter(id__in=node_ids) for node in children: node.parent = instance + update_nodes_assets_amount.delay(ttl=5, node_ids=(instance.id,)) return Response("OK") diff --git a/apps/assets/automations/base/manager.py b/apps/assets/automations/base/manager.py index 570f6f195..909ca5638 100644 --- a/apps/assets/automations/base/manager.py +++ b/apps/assets/automations/base/manager.py @@ -300,12 +300,16 @@ class BasePlaybookManager: for host in hosts: result = cb.host_results.get(host) if state == 'ok': - self.on_host_success(host, result) + self.on_host_success(host, result.get('ok', '')) elif state == 'skipped': pass else: error = hosts.get(host) - self.on_host_error(host, error, result) + self.on_host_error( + host, error, + result.get('failures', '') + or result.get('dark', '') + ) def on_runner_failed(self, runner, e): print("Runner failed: {} {}".format(e, self)) diff --git a/apps/assets/const/protocol.py b/apps/assets/const/protocol.py index a46afccfc..58376b0db 100644 --- a/apps/assets/const/protocol.py +++ b/apps/assets/const/protocol.py @@ -286,7 +286,7 @@ class Protocol(ChoicesMixin, models.TextChoices): 'label': _('API mode'), 'choices': [ ('gpt-3.5-turbo', 'GPT-3.5 Turbo'), - ('gpt-3.5-turbo-16k', 'GPT-3.5 Turbo 16K'), + ('gpt-3.5-turbo-1106', 'GPT-3.5 Turbo 1106'), ] } } @@ -296,7 +296,8 @@ class Protocol(ChoicesMixin, models.TextChoices): choices = protocols[cls.chatgpt]['setting']['api_mode']['choices'] choices.extend([ ('gpt-4', 'GPT-4'), - ('gpt-4-32k', 'GPT-4 32K'), + ('gpt-4-turbo', 'GPT-4 Turbo'), + ('gpt-4o', 'GPT-4o'), ]) return protocols diff --git a/apps/assets/migrations/0100_auto_20220711_1413.py b/apps/assets/migrations/0100_auto_20220711_1413.py index 8bb3309e4..dd7e34394 100644 --- a/apps/assets/migrations/0100_auto_20220711_1413.py +++ b/apps/assets/migrations/0100_auto_20220711_1413.py @@ -1,6 +1,7 @@ # Generated by Django 3.2.12 on 2022-07-11 06:13 import time +import math from django.utils import timezone from itertools import groupby from django.db import migrations @@ -40,9 +41,13 @@ def migrate_asset_accounts(apps, schema_editor): if system_user: # 更新一次系统用户的认证属性 account_values.update({attr: getattr(system_user, attr, '') for attr in all_attrs}) - account_values['created_by'] = str(system_user.id) account_values['privileged'] = system_user.type == 'admin' \ or system_user.username in ['root', 'Administrator'] + if system_user.su_enabled and system_user.su_from: + created_by = f'{str(system_user.id)}::{str(system_user.su_from.username)}' + else: + created_by = str(system_user.id) + account_values['created_by'] = created_by auth_book_auth = {attr: getattr(auth_book, attr, '') for attr in all_attrs if getattr(auth_book, attr, '')} # 最终优先使用 auth_book 的认证属性 @@ -117,6 +122,70 @@ def migrate_asset_accounts(apps, schema_editor): print("\t - histories: {}".format(len(accounts_to_history))) +def update_asset_accounts_su_from(apps, schema_editor): + # Update accounts su_from + print("\n\tStart update asset accounts su_from field") + account_model = apps.get_model('accounts', 'Account') + platform_model = apps.get_model('assets', 'Platform') + asset_model = apps.get_model('assets', 'Asset') + platform_ids = list(platform_model.objects.filter(su_enabled=True).values_list('id', flat=True)) + + count = 0 + step_size = 1000 + count_account = 0 + while True: + start = time.time() + asset_ids = asset_model.objects \ + .filter(platform_id__in=platform_ids) \ + .values_list('id', flat=True)[count:count + step_size] + asset_ids = list(asset_ids) + if not asset_ids: + break + count += len(asset_ids) + + accounts = list(account_model.objects.filter(asset_id__in=asset_ids)) + + # {asset_id_account_username: account.id}} + asset_accounts_mapper = {} + for a in accounts: + try: + k = f'{a.asset_id}_{a.username}' + asset_accounts_mapper[k] = str(a.id) + except Exception as e: + pass + + update_accounts = [] + for a in accounts: + try: + if not a.created_by: + continue + created_by_list = a.created_by.split('::') + if len(created_by_list) != 2: + continue + su_from_username = created_by_list[1] + if not su_from_username: + continue + k = f'{a.asset_id}_{su_from_username}' + su_from_id = asset_accounts_mapper.get(k) + if not su_from_id: + continue + a.su_from_id = su_from_id + update_accounts.append(a) + except Exception as e: + pass + + count_account += len(update_accounts) + + log_msg = "\t - [{}]: Update accounts su_from: {}-{} {:.2f}s" + try: + account_model.objects.bulk_update(update_accounts, ['su_from_id']) + except Exception as e: + status = 'Failed' + else: + status = 'Success' + print(log_msg.format(status, count_account - len(update_accounts), count_account, time.time() - start)) + + def migrate_db_accounts(apps, schema_editor): app_perm_model = apps.get_model('perms', 'ApplicationPermission') account_model = apps.get_model('accounts', 'Account') @@ -196,5 +265,6 @@ class Migration(migrations.Migration): operations = [ migrations.RunPython(migrate_asset_accounts), + migrations.RunPython(update_asset_accounts_su_from), migrations.RunPython(migrate_db_accounts), ] diff --git a/apps/assets/serializers/asset/info/spec.py b/apps/assets/serializers/asset/info/spec.py index 9a3dab960..a7aae17f4 100644 --- a/apps/assets/serializers/asset/info/spec.py +++ b/apps/assets/serializers/asset/info/spec.py @@ -22,6 +22,36 @@ class WebSpecSerializer(serializers.ModelSerializer): 'submit_selector', 'script' ] + def get_fields(self): + fields = super().get_fields() + if self.is_retrieve(): + # 查看 Web 资产详情时 + self.pop_fields_if_need(fields) + return fields + + def is_retrieve(self): + try: + self.context.get('request').method and self.parent.instance.web + return True + except Exception: + return False + + def pop_fields_if_need(self, fields): + fields_script = ['script'] + fields_basic = ['username_selector', 'password_selector', 'submit_selector'] + autofill = self.parent.instance.web.autofill + pop_fields_mapper = { + FillType.no: fields_script + fields_basic, + FillType.basic: fields_script, + FillType.script: fields_basic, + } + fields_pop = pop_fields_mapper.get(autofill, []) + for f in fields_pop: + fields.pop(f, None) + return fields + + + category_spec_serializer_map = { 'database': DatabaseSpecSerializer, diff --git a/apps/assets/signal_handlers/node_assets_amount.py b/apps/assets/signal_handlers/node_assets_amount.py index 5c4633dbd..d43e86fb9 100644 --- a/apps/assets/signal_handlers/node_assets_amount.py +++ b/apps/assets/signal_handlers/node_assets_amount.py @@ -67,5 +67,5 @@ def set_assets_size_to_setting(sender, **kwargs): if amount > 20000: settings.ASSET_SIZE = 'large' - elif amount > 2000: + elif amount > 5000: settings.ASSET_SIZE = 'medium' diff --git a/apps/authentication/api/mfa.py b/apps/authentication/api/mfa.py index ed88b116e..703ddccbd 100644 --- a/apps/authentication/api/mfa.py +++ b/apps/authentication/api/mfa.py @@ -50,7 +50,10 @@ class MFASendCodeApi(AuthMixin, CreateAPIView): mfa_type = serializer.validated_data['type'] if not username: - user = self.get_user_from_session() + try: + user = self.get_user_from_session() + except errors.SessionEmptyError as e: + raise ValidationError({'error': e}) else: user = self.get_user_from_db(username) diff --git a/apps/common/decorators.py b/apps/common/decorators.py index 65a9cad07..394b4ec15 100644 --- a/apps/common/decorators.py +++ b/apps/common/decorators.py @@ -204,6 +204,8 @@ def merge_delay_run(ttl=5, key=None): def delay(func, *args, **kwargs): from orgs.utils import get_current_org + # 每次调用 delay 时可以指定本次调用的 ttl + current_ttl = kwargs.pop('ttl', ttl) suffix_key_func = key if key else default_suffix_key org = get_current_org() func_name = f'{func.__module__}_{func.__name__}' @@ -220,7 +222,7 @@ def merge_delay_run(ttl=5, key=None): else: cache_kwargs[k] = cache_kwargs[k].union(v) _loop_debouncer_func_args_cache[cache_key] = cache_kwargs - run_debouncer_func(cache_key, org, ttl, func, *args, **cache_kwargs) + run_debouncer_func(cache_key, org, current_ttl, func, *args, **cache_kwargs) def apply(func, sync=False, *args, **kwargs): if sync: diff --git a/apps/common/drf/const.py b/apps/common/drf/const.py new file mode 100644 index 000000000..50a415fea --- /dev/null +++ b/apps/common/drf/const.py @@ -0,0 +1 @@ +CSV_FILE_ESCAPE_CHARS = ['=', '@', '0'] diff --git a/apps/common/drf/parsers/csv.py b/apps/common/drf/parsers/csv.py index 0dd11aa4b..adfc56e0e 100644 --- a/apps/common/drf/parsers/csv.py +++ b/apps/common/drf/parsers/csv.py @@ -4,13 +4,25 @@ import chardet import unicodecsv +from common.utils import lazyproperty from .base import BaseFileParser +from ..const import CSV_FILE_ESCAPE_CHARS class CSVFileParser(BaseFileParser): - media_type = 'text/csv' + @lazyproperty + def match_escape_chars(self): + chars = [] + for c in CSV_FILE_ESCAPE_CHARS: + dq_char = '"{}'.format(c) + sg_char = "'{}".format(c) + chars.append(dq_char) + chars.append(sg_char) + return tuple(chars) + + @staticmethod def _universal_newlines(stream): """ @@ -18,6 +30,14 @@ class CSVFileParser(BaseFileParser): """ for line in stream.splitlines(): yield line + + def __parse_row(self, row): + row_escape = [] + for d in row: + if isinstance(d, str) and d.strip().startswith(self.match_escape_chars): + d = d.lstrip("'").lstrip('"') + row_escape.append(d) + return row_escape def generate_rows(self, stream_data): detect_result = chardet.detect(stream_data) @@ -25,4 +45,5 @@ class CSVFileParser(BaseFileParser): lines = self._universal_newlines(stream_data) csv_reader = unicodecsv.reader(lines, encoding=encoding) for row in csv_reader: + row = self.__parse_row(row) yield row diff --git a/apps/common/drf/renders/csv.py b/apps/common/drf/renders/csv.py index 88466f533..a8729294b 100644 --- a/apps/common/drf/renders/csv.py +++ b/apps/common/drf/renders/csv.py @@ -6,31 +6,36 @@ import unicodecsv from six import BytesIO from .base import BaseFileRenderer - +from ..const import CSV_FILE_ESCAPE_CHARS class CSVFileRenderer(BaseFileRenderer): + media_type = 'text/csv' format = 'csv' writer = None buffer = None + escape_chars = tuple(CSV_FILE_ESCAPE_CHARS) + def initial_writer(self): csv_buffer = BytesIO() csv_buffer.write(codecs.BOM_UTF8) csv_writer = unicodecsv.writer(csv_buffer, encoding='utf-8') self.buffer = csv_buffer self.writer = csv_writer - - def write_row(self, row): + + def __render_row(self, row): row_escape = [] for d in row: - if isinstance(d, str) and d.strip().startswith(('=', '@')): + if isinstance(d, str) and d.strip().startswith(self.escape_chars): d = "'{}".format(d) - row_escape.append(d) - else: - row_escape.append(d) - self.writer.writerow(row_escape) + row_escape.append(d) + return row_escape + + def write_row(self, row): + row = self.__render_row(row) + self.writer.writerow(row) def get_rendered_value(self): value = self.buffer.getvalue() diff --git a/apps/common/sdk/im/slack/__init__.py b/apps/common/sdk/im/slack/__init__.py index 2ff6e071d..6ba895617 100644 --- a/apps/common/sdk/im/slack/__init__.py +++ b/apps/common/sdk/im/slack/__init__.py @@ -27,7 +27,7 @@ class SlackRenderer(mistune.HTMLRenderer): def strong(self, text): return '*' + text + '*' - def list(self, text, **kwargs): + def list(self, text, *args, **kwargs): lines = text.split('\n') for i, line in enumerate(lines): if not line: @@ -128,7 +128,7 @@ class Slack: def send_text(self, user_ids, msg_body): body = self.convert_to_markdown(msg_body) - logger.info(f'Slack send text: user_ids={user_ids} msg={body}') + logger.info(f'Slack send text: user_ids={user_ids}') for user_id in user_ids: body['channel'] = user_id try: diff --git a/apps/common/serializers/mixin.py b/apps/common/serializers/mixin.py index 81fac91d9..5293bce45 100644 --- a/apps/common/serializers/mixin.py +++ b/apps/common/serializers/mixin.py @@ -5,6 +5,7 @@ if sys.version_info.major >= 3 and sys.version_info.minor >= 10: from collections.abc import Iterable else: from collections import Iterable +from django.conf import settings from django.core.exceptions import ObjectDoesNotExist from django.db.models import NOT_PROVIDED from django.utils.translation import gettext_lazy as _ @@ -42,6 +43,17 @@ class SecretReadableMixin(serializers.Serializer): if 'write_only' not in field_extra_kwargs: continue serializer_field.write_only = field_extra_kwargs['write_only'] + self.remove_spec_info_field() + + def remove_spec_info_field(self): + request = self.context.get('request') + if not request: + return + + _format = request.query_params.get('format') + if _format not in ['csv', 'xlsx']: + return + self.fields.pop('spec_info', None) class BulkSerializerMixin(object): @@ -264,6 +276,14 @@ class SizedModelFieldsMixin(BaseDynamicFieldsPlugin): return fields_to_drop +class XPACKModelFieldsMixin(BaseDynamicFieldsPlugin): + def get_exclude_field_names(self): + if settings.XPACK_LICENSE_IS_VALID: + return set() + fields_xpack = set(getattr(self.serializer.Meta, 'fields_xpack', set())) + return fields_xpack + + class DefaultValueFieldsMixin: def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -302,7 +322,7 @@ class DynamicFieldsMixin: """ 可以控制显示不同的字段,mini 最少,small 不包含关系 """ - dynamic_fields_plugins = [QueryFieldsMixin, SizedModelFieldsMixin] + dynamic_fields_plugins = [QueryFieldsMixin, SizedModelFieldsMixin, XPACKModelFieldsMixin] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 1ee650b39..9089454da 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -617,9 +617,9 @@ class Config(dict): 'TICKET_APPLY_ASSET_SCOPE': 'all', # Ansible Receptor - 'ANSIBLE_RECEPTOR_ENABLED': True, + 'RECEPTOR_ENABLED': False, 'ANSIBLE_RECEPTOR_GATEWAY_PROXY_HOST': 'jms_celery', - 'ANSIBLE_RECEPTOR_TCP_LISTEN_ADDRESS': 'jms_receptor:7521' + 'ANSIBLE_RECEPTOR_TCP_LISTEN_ADDRESS': 'receptor:7521' } diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index 5a4418270..b116d5223 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -232,6 +232,6 @@ FILE_UPLOAD_SIZE_LIMIT_MB = CONFIG.FILE_UPLOAD_SIZE_LIMIT_MB TICKET_APPLY_ASSET_SCOPE = CONFIG.TICKET_APPLY_ASSET_SCOPE # Ansible Receptor -ANSIBLE_RECEPTOR_ENABLED = CONFIG.ANSIBLE_RECEPTOR_ENABLED +RECEPTOR_ENABLED = CONFIG.RECEPTOR_ENABLED ANSIBLE_RECEPTOR_GATEWAY_PROXY_HOST = CONFIG.ANSIBLE_RECEPTOR_GATEWAY_PROXY_HOST ANSIBLE_RECEPTOR_TCP_LISTEN_ADDRESS = CONFIG.ANSIBLE_RECEPTOR_TCP_LISTEN_ADDRESS diff --git a/apps/jumpserver/settings/logging.py b/apps/jumpserver/settings/logging.py index c0e873290..4fad5f641 100644 --- a/apps/jumpserver/settings/logging.py +++ b/apps/jumpserver/settings/logging.py @@ -136,6 +136,12 @@ LOGGING = { } } +if CONFIG.DEBUG_DEV: + LOGGING['loggers']['django.db'] = { + 'handlers': ['console', 'file'], + 'level': 'DEBUG' + } + SYSLOG_ENABLE = CONFIG.SYSLOG_ENABLE if CONFIG.SYSLOG_ADDR != '' and len(CONFIG.SYSLOG_ADDR.split(':')) == 2: diff --git a/apps/labels/mixins.py b/apps/labels/mixins.py index bb059721d..f0896d6f6 100644 --- a/apps/labels/mixins.py +++ b/apps/labels/mixins.py @@ -57,7 +57,7 @@ class LabeledMixin(models.Model): resources = resources.filter(label_id__in=label_ids) \ .values('res_id') \ .order_by('res_id') \ - .annotate(count=Count('res_id', distinct=True)) \ + .annotate(count=Count('res_id')) \ .values('res_id', 'count') \ .filter(count=len(label_ids)) return resources diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo index 11fda0509..3505cc8c4 100644 --- a/apps/locale/ja/LC_MESSAGES/django.mo +++ b/apps/locale/ja/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b796ec6f93e1a3855473cc5e4a0bd2ecf44b33ce59b07146fa0e83fd16cd7b46 -size 177281 +oid sha256:e4baadc170ded5134bed55533c4c04e694be6ea7b8e151d80c1092728e26a75b +size 177500 diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po index 3ef6ce96d..84396439e 100644 --- a/apps/locale/ja/LC_MESSAGES/django.po +++ b/apps/locale/ja/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-18 17:25+0800\n" +"POT-Creation-Date: 2024-05-08 14:11+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -36,7 +36,7 @@ msgstr "成功: %s、失敗: %s、合計: %s" #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123 #: terminal/serializers/storage.py:142 users/forms/profile.py:21 -#: users/serializers/user.py:109 +#: users/serializers/user.py:110 #: users/templates/users/_msg_user_created.html:13 #: users/templates/users/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 @@ -384,7 +384,7 @@ msgstr "アカウントバックアップ計画" #: accounts/models/automations/backup_account.py:119 #: assets/models/automations/base.py:115 audits/models.py:65 -#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:238 +#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:241 #: ops/templates/ops/celery_task_log.html:75 #: perms/models/asset_permission.py:78 #: settings/templates/ldap/_msg_import_ldap_user.html:5 @@ -473,7 +473,7 @@ msgstr "SSHキープッシュ方式" #: accounts/models/automations/gather_account.py:58 #: accounts/serializers/account/backup.py:41 #: accounts/serializers/automations/change_secret.py:58 -#: settings/serializers/auth/ldap.py:90 +#: settings/serializers/auth/ldap.py:91 msgid "Recipient" msgstr "受信者" @@ -495,14 +495,14 @@ msgstr "開始日" #: accounts/models/automations/change_secret.py:42 #: assets/models/automations/base.py:116 ops/models/base.py:56 -#: ops/models/celery.py:89 ops/models/job.py:239 +#: ops/models/celery.py:89 ops/models/job.py:242 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "終了日" #: accounts/models/automations/change_secret.py:44 #: assets/models/automations/base.py:113 audits/models.py:208 -#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:230 +#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:233 #: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140 #: terminal/models/component/status.py:30 #: terminal/models/virtualapp/virtualapp.py:99 @@ -624,14 +624,14 @@ msgstr "パスワードルール" #: assets/models/_user.py:22 assets/models/asset/common.py:93 #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/domain.py:19 assets/models/group.py:17 -#: assets/models/label.py:18 assets/models/platform.py:16 -#: assets/models/platform.py:95 assets/serializers/asset/common.py:149 +#: assets/models/label.py:18 assets/models/platform.py:15 +#: assets/models/platform.py:94 assets/serializers/asset/common.py:149 #: assets/serializers/platform.py:118 assets/serializers/platform.py:228 #: authentication/backends/passkey/models.py:10 #: authentication/serializers/connect_token_secret.py:113 -#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11 +#: authentication/serializers/connect_token_secret.py:169 labels/models.py:11 #: ops/mixin.py:21 ops/models/adhoc.py:20 ops/models/celery.py:15 -#: ops/models/celery.py:80 ops/models/job.py:139 ops/models/playbook.py:28 +#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28 #: ops/serializers/job.py:18 orgs/models.py:82 #: perms/models/asset_permission.py:61 rbac/models/role.py:29 #: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89 @@ -658,7 +658,7 @@ msgstr "特権アカウント" #: authentication/serializers/connect_token_secret.py:117 #: terminal/models/applet/applet.py:40 #: terminal/models/component/endpoint.py:120 -#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:173 +#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:174 msgid "Is active" msgstr "アクティブです。" @@ -774,7 +774,7 @@ msgid "Exist policy" msgstr "アカウントの存在ポリシー" #: accounts/serializers/account/account.py:193 applications/models.py:11 -#: assets/models/label.py:21 assets/models/platform.py:96 +#: assets/models/label.py:21 assets/models/platform.py:95 #: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12 #: assets/serializers/platform.py:140 assets/serializers/platform.py:229 #: perms/serializers/user_permission.py:26 settings/models.py:35 @@ -786,11 +786,11 @@ msgstr "カテゴリ" #: accounts/serializers/automations/base.py:55 acls/models/command_acl.py:24 #: acls/serializers/command_acl.py:19 applications/models.py:14 #: assets/models/_user.py:50 assets/models/automations/base.py:20 -#: assets/models/cmd_filter.py:74 assets/models/platform.py:97 +#: assets/models/cmd_filter.py:74 assets/models/platform.py:96 #: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120 #: assets/serializers/platform.py:139 audits/serializers.py:53 #: audits/serializers.py:170 -#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:147 +#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:150 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39 #: terminal/models/component/storage.py:57 #: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29 @@ -826,7 +826,7 @@ msgstr "編集済み" #: assets/models/automations/base.py:19 #: assets/serializers/automations/base.py:20 #: authentication/api/connection_token.py:410 ops/models/base.py:17 -#: ops/models/job.py:149 ops/serializers/job.py:19 +#: ops/models/job.py:152 ops/serializers/job.py:19 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 msgid "Assets" msgstr "資産" @@ -958,7 +958,7 @@ msgstr "关联平台,可以配置推送参数,如果不关联,则使用默 #: accounts/serializers/account/virtual.py:19 assets/models/_user.py:27 #: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88 #: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26 -#: ops/models/job.py:155 ops/models/playbook.py:31 rbac/models/role.py:37 +#: ops/models/job.py:158 ops/models/playbook.py:31 rbac/models/role.py:37 #: settings/models.py:38 terminal/models/applet/applet.py:45 #: terminal/models/applet/applet.py:321 terminal/models/applet/host.py:143 #: terminal/models/component/endpoint.py:25 @@ -1377,15 +1377,15 @@ msgstr "" msgid "Number required" msgstr "必要な数" -#: assets/api/node.py:57 +#: assets/api/node.py:58 msgid "You can't update the root node name" msgstr "ルートノード名を更新できません" -#: assets/api/node.py:64 +#: assets/api/node.py:65 msgid "You can't delete the root node ({})" msgstr "ルートノード ({}) を削除できません。" -#: assets/api/node.py:67 +#: assets/api/node.py:68 msgid "Deletion failed and the node contains assets" msgstr "削除に失敗し、ノードにアセットが含まれています。" @@ -1397,11 +1397,11 @@ msgstr "同じレベルのノード名を同じにすることはできません msgid "App assets" msgstr "アプリ資産" -#: assets/automations/base/manager.py:188 +#: assets/automations/base/manager.py:191 msgid "{} disabled" msgstr "{} 無効" -#: assets/automations/base/manager.py:251 +#: assets/automations/base/manager.py:254 msgid " - Platform {} ansible disabled" msgstr " - プラットフォーム {} ansible 無効" @@ -1689,7 +1689,7 @@ msgstr "SSHパブリックキー" #: assets/models/_user.py:28 assets/models/automations/base.py:114 #: assets/models/cmd_filter.py:41 assets/models/group.py:19 #: audits/models.py:267 common/db/models.py:34 ops/models/base.py:54 -#: ops/models/job.py:237 users/models/user.py:1058 +#: ops/models/job.py:240 users/models/user.py:1058 msgid "Date created" msgstr "作成された日付" @@ -1778,7 +1778,7 @@ msgstr "システムユーザーに一致できます" msgid "Cloud" msgstr "クラウド サービス" -#: assets/models/asset/common.py:94 assets/models/platform.py:17 +#: assets/models/asset/common.py:94 assets/models/platform.py:16 #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72 #: settings/serializers/msg.py:32 terminal/serializers/storage.py:133 #: xpack/plugins/cloud/serializers/account_attrs.py:73 @@ -1789,7 +1789,7 @@ msgstr "ポート" msgid "Address" msgstr "アドレス" -#: assets/models/asset/common.py:161 assets/models/platform.py:126 +#: assets/models/asset/common.py:161 assets/models/platform.py:134 #: authentication/backends/passkey/models.py:12 #: authentication/serializers/connect_token_secret.py:118 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:325 @@ -1858,7 +1858,7 @@ msgstr "証明書チェックを無視" msgid "Proxy" msgstr "プロキシー" -#: assets/models/automations/base.py:22 ops/models/job.py:233 +#: assets/models/automations/base.py:22 ops/models/job.py:236 #: settings/serializers/auth/sms.py:103 msgid "Parameters" msgstr "パラメータ" @@ -1929,7 +1929,7 @@ msgstr "ゲートウェイ" msgid "Asset group" msgstr "資産グループ" -#: assets/models/group.py:31 assets/models/platform.py:20 +#: assets/models/group.py:31 assets/models/platform.py:19 #: assets/serializers/platform.py:121 #: xpack/plugins/cloud/providers/nutanix.py:30 msgid "Default" @@ -1986,133 +1986,133 @@ msgstr "親キー" msgid "Can match node" msgstr "ノードを一致させることができます" -#: assets/models/platform.py:18 +#: assets/models/platform.py:17 msgid "Primary" msgstr "主要" -#: assets/models/platform.py:19 +#: assets/models/platform.py:18 msgid "Required" msgstr "必要" -#: assets/models/platform.py:21 +#: assets/models/platform.py:20 msgid "Public" msgstr "開ける" -#: assets/models/platform.py:22 assets/serializers/platform.py:49 +#: assets/models/platform.py:21 assets/serializers/platform.py:49 #: settings/serializers/settings.py:95 #: users/templates/users/reset_password.html:29 msgid "Setting" msgstr "設定" -#: assets/models/platform.py:39 audits/const.py:56 +#: assets/models/platform.py:38 audits/const.py:56 #: authentication/backends/passkey/models.py:11 settings/models.py:37 #: terminal/serializers/applet_host.py:33 msgid "Enabled" msgstr "有効化" -#: assets/models/platform.py:40 +#: assets/models/platform.py:39 msgid "Ansible config" msgstr "Ansible 構成" -#: assets/models/platform.py:42 assets/serializers/platform.py:33 +#: assets/models/platform.py:41 assets/serializers/platform.py:33 msgid "Ping enabled" msgstr "アセット ディスカバリを有効にする" -#: assets/models/platform.py:43 assets/serializers/platform.py:34 +#: assets/models/platform.py:42 assets/serializers/platform.py:34 msgid "Ping method" msgstr "資産検出方法" -#: assets/models/platform.py:44 +#: assets/models/platform.py:43 msgid "Ping params" msgstr "資産検出パラメータ" -#: assets/models/platform.py:46 assets/models/platform.py:70 +#: assets/models/platform.py:45 assets/models/platform.py:69 #: assets/serializers/platform.py:35 msgid "Gather facts enabled" msgstr "資産情報の収集を有効にする" -#: assets/models/platform.py:48 assets/models/platform.py:72 +#: assets/models/platform.py:47 assets/models/platform.py:71 #: assets/serializers/platform.py:36 msgid "Gather facts method" msgstr "情報収集の方法" -#: assets/models/platform.py:50 assets/models/platform.py:74 +#: assets/models/platform.py:49 assets/models/platform.py:73 msgid "Gather facts params" msgstr "情報収集パラメータ" -#: assets/models/platform.py:52 assets/serializers/platform.py:39 +#: assets/models/platform.py:51 assets/serializers/platform.py:39 msgid "Change secret enabled" msgstr "パスワードの変更が有効" -#: assets/models/platform.py:54 assets/serializers/platform.py:40 +#: assets/models/platform.py:53 assets/serializers/platform.py:40 msgid "Change secret method" msgstr "パスワード変更モード" -#: assets/models/platform.py:56 +#: assets/models/platform.py:55 msgid "Change secret params" msgstr "パスワード変更パラメータ" -#: assets/models/platform.py:58 assets/serializers/platform.py:41 +#: assets/models/platform.py:57 assets/serializers/platform.py:41 msgid "Push account enabled" msgstr "アカウントのプッシュを有効にする" -#: assets/models/platform.py:60 assets/serializers/platform.py:42 +#: assets/models/platform.py:59 assets/serializers/platform.py:42 msgid "Push account method" msgstr "アカウントプッシュ方式" -#: assets/models/platform.py:62 +#: assets/models/platform.py:61 msgid "Push account params" msgstr "アカウントプッシュパラメータ" -#: assets/models/platform.py:64 assets/serializers/platform.py:37 +#: assets/models/platform.py:63 assets/serializers/platform.py:37 msgid "Verify account enabled" msgstr "アカウントの確認をオンにする" -#: assets/models/platform.py:66 assets/serializers/platform.py:38 +#: assets/models/platform.py:65 assets/serializers/platform.py:38 msgid "Verify account method" msgstr "アカウント認証方法" -#: assets/models/platform.py:68 +#: assets/models/platform.py:67 msgid "Verify account params" msgstr "アカウント認証パラメータ" -#: assets/models/platform.py:76 +#: assets/models/platform.py:75 msgid "Remove account enabled" msgstr "アカウントを開いて削除" -#: assets/models/platform.py:78 +#: assets/models/platform.py:77 msgid "Remove account method" msgstr "アカウントの削除方法" -#: assets/models/platform.py:80 +#: assets/models/platform.py:79 msgid "Remove account params" msgstr "アカウント削除パラメータ" -#: assets/models/platform.py:98 tickets/models/ticket/general.py:298 +#: assets/models/platform.py:97 tickets/models/ticket/general.py:298 msgid "Meta" msgstr "メタ" -#: assets/models/platform.py:99 labels/models.py:13 +#: assets/models/platform.py:98 labels/models.py:13 msgid "Internal" msgstr "ビルトイン" -#: assets/models/platform.py:103 assets/serializers/platform.py:138 +#: assets/models/platform.py:102 assets/serializers/platform.py:138 msgid "Charset" msgstr "シャーセット" -#: assets/models/platform.py:105 assets/serializers/platform.py:167 +#: assets/models/platform.py:104 assets/serializers/platform.py:167 msgid "Domain enabled" msgstr "ドメインを有効にする" -#: assets/models/platform.py:107 assets/serializers/platform.py:166 +#: assets/models/platform.py:106 assets/serializers/platform.py:166 msgid "Su enabled" msgstr "アカウントの切り替えを有効にする" -#: assets/models/platform.py:108 assets/serializers/platform.py:144 +#: assets/models/platform.py:107 assets/serializers/platform.py:144 msgid "Su method" msgstr "アカウントの切り替え方法" -#: assets/models/platform.py:109 assets/serializers/platform.py:147 +#: assets/models/platform.py:108 assets/serializers/platform.py:147 msgid "Custom fields" msgstr "カスタムフィールド" @@ -2620,8 +2620,8 @@ msgid "Offline user session" msgstr "オフラインユーザセッション" #: audits/serializers.py:33 ops/models/adhoc.py:25 ops/models/base.py:16 -#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:148 -#: ops/models/job.py:236 ops/models/playbook.py:30 +#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:151 +#: ops/models/job.py:239 ops/models/playbook.py:30 #: terminal/models/session/sharing.py:25 msgid "Creator" msgstr "作成者" @@ -2754,7 +2754,7 @@ msgstr "ACL アクションは拒否です: {}({})" msgid "ACL action is review" msgstr "ACL アクションはレビューです" -#: authentication/api/mfa.py:59 +#: authentication/api/mfa.py:62 msgid "Current user not support mfa type: {}" msgstr "現在のユーザーはmfaタイプをサポートしていません: {}" @@ -3211,11 +3211,11 @@ msgstr "ユーザーなしまたは期限切れのユーザー" msgid "No asset or inactive asset" msgstr "アセットがないか、有効化されていないアセット" -#: authentication/models/connection_token.py:272 +#: authentication/models/connection_token.py:274 msgid "Can view super connection token secret" msgstr "スーパー接続トークンのシークレットを表示できます" -#: authentication/models/connection_token.py:274 +#: authentication/models/connection_token.py:276 msgid "Super connection token" msgstr "スーパー接続トークン" @@ -3259,17 +3259,17 @@ msgstr "コンポーネント" msgid "Expired now" msgstr "すぐに期限切れ" -#: authentication/serializers/connect_token_secret.py:169 +#: authentication/serializers/connect_token_secret.py:170 #: terminal/models/virtualapp/virtualapp.py:25 msgid "Image name" msgstr "ミラー名" -#: authentication/serializers/connect_token_secret.py:170 +#: authentication/serializers/connect_token_secret.py:171 #: terminal/models/virtualapp/virtualapp.py:27 msgid "Image port" msgstr "ミラーポート" -#: authentication/serializers/connect_token_secret.py:171 +#: authentication/serializers/connect_token_secret.py:172 #: terminal/models/virtualapp/virtualapp.py:26 msgid "Image protocol" msgstr "ミラープロトコル" @@ -3292,7 +3292,7 @@ msgstr "アクション" #: authentication/serializers/connection_token.py:42 #: perms/serializers/permission.py:40 perms/serializers/permission.py:60 -#: users/serializers/user.py:100 users/serializers/user.py:177 +#: users/serializers/user.py:101 users/serializers/user.py:178 msgid "Is expired" msgstr "期限切れです" @@ -3306,8 +3306,8 @@ msgid "Access IP" msgstr "Access IP" #: authentication/serializers/token.py:92 perms/serializers/permission.py:39 -#: perms/serializers/permission.py:61 users/serializers/user.py:101 -#: users/serializers/user.py:174 +#: perms/serializers/permission.py:61 users/serializers/user.py:102 +#: users/serializers/user.py:175 msgid "Is valid" msgstr "有効です" @@ -3984,7 +3984,7 @@ msgstr "間違ったデータ タイプです。リストにする必要があ msgid "Invalid choice: {}" msgstr "無効なオプション: {}" -#: common/serializers/mixin.py:397 labels/apps.py:8 +#: common/serializers/mixin.py:406 labels/apps.py:8 msgid "Labels" msgstr "ラベル" @@ -4118,15 +4118,15 @@ msgstr "システムメッセージ" msgid "Publish the station message" msgstr "投稿サイトニュース" -#: ops/ansible/inventory.py:106 ops/models/job.py:63 +#: ops/ansible/inventory.py:107 ops/models/job.py:65 msgid "No account available" msgstr "利用可能なアカウントがありません" -#: ops/ansible/inventory.py:285 +#: ops/ansible/inventory.py:286 msgid "Ansible disabled" msgstr "Ansible 無効" -#: ops/ansible/inventory.py:301 +#: ops/ansible/inventory.py:302 msgid "Skip hosts below:" msgstr "次のホストをスキップします: " @@ -4247,7 +4247,7 @@ msgstr "VCS" msgid "Adhoc" msgstr "コマンド#コマンド#" -#: ops/const.py:39 ops/models/job.py:146 +#: ops/const.py:39 ops/models/job.py:149 msgid "Playbook" msgstr "Playbook" @@ -4336,11 +4336,11 @@ msgstr "定期的または定期的に設定を行う必要があります" msgid "Pattern" msgstr "パターン" -#: ops/models/adhoc.py:23 ops/models/job.py:143 +#: ops/models/adhoc.py:23 ops/models/job.py:146 msgid "Module" msgstr "モジュール" -#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:141 +#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:144 #: terminal/models/component/task.py:14 msgid "Args" msgstr "アルグ" @@ -4359,12 +4359,12 @@ msgstr "最後の実行" msgid "Date last run" msgstr "最終実行日" -#: ops/models/base.py:51 ops/models/job.py:234 +#: ops/models/base.py:51 ops/models/job.py:237 #: xpack/plugins/cloud/models.py:198 msgid "Result" msgstr "結果" -#: ops/models/base.py:52 ops/models/job.py:235 +#: ops/models/base.py:52 ops/models/job.py:238 msgid "Summary" msgstr "概要" @@ -4397,43 +4397,43 @@ msgstr "発売日" msgid "Celery Task Execution" msgstr "Celery タスク実行" -#: ops/models/job.py:144 +#: ops/models/job.py:147 msgid "Chdir" msgstr "実行ディレクトリ" -#: ops/models/job.py:145 +#: ops/models/job.py:148 msgid "Timeout (Seconds)" msgstr "タイムアウト(秒)" -#: ops/models/job.py:150 +#: ops/models/job.py:153 msgid "Use Parameter Define" msgstr "パラメータ定義を使用する" -#: ops/models/job.py:151 +#: ops/models/job.py:154 msgid "Parameters define" msgstr "パラメータ定義" -#: ops/models/job.py:152 +#: ops/models/job.py:155 msgid "Runas" msgstr "ユーザーとして実行" -#: ops/models/job.py:154 +#: ops/models/job.py:157 msgid "Runas policy" msgstr "ユーザー ポリシー" -#: ops/models/job.py:218 +#: ops/models/job.py:221 msgid "Job" msgstr "ジョブ#ジョブ#" -#: ops/models/job.py:241 +#: ops/models/job.py:244 msgid "Material" msgstr "Material" -#: ops/models/job.py:243 +#: ops/models/job.py:246 msgid "Material Type" msgstr "Material を選択してオプションを設定します。" -#: ops/models/job.py:540 +#: ops/models/job.py:544 msgid "Job Execution" msgstr "ジョブ実行" @@ -5237,16 +5237,19 @@ msgstr "User DN キャッシュの有効期限 (秒)" #: settings/serializers/auth/ldap.py:84 msgid "" "Caching the User DN obtained during user login authentication can " -"effectivelyimprove the speed of user authentication., 0 means no cache" +"effectivelyimprove the speed of user authentication., 0 means no cache
If " +"the user OU structure has been adjusted, click Submit to clear the user DN " +"cache" msgstr "" "ユーザーログイン認証時に取得したユーザー DN をキャッシュすることで、ユーザー" -"認証の速度を効果的に向上させることができます" +"認証の速度を効果的に向上させることができます
ユーザー OU 構造が調整された" +"場合、送信をクリックしてユーザー DN キャッシュをクリアします" -#: settings/serializers/auth/ldap.py:88 +#: settings/serializers/auth/ldap.py:89 msgid "Search paged size (piece)" msgstr "ページサイズを検索 (じょう)" -#: settings/serializers/auth/ldap.py:93 +#: settings/serializers/auth/ldap.py:94 msgid "Enable LDAP auth" msgstr "LDAP認証の有効化" @@ -8099,7 +8102,7 @@ msgstr "強制有効" msgid "Lark" msgstr "" -#: users/models/user.py:826 users/serializers/user.py:175 +#: users/models/user.py:826 users/serializers/user.py:176 msgid "Is service account" msgstr "サービスアカウントです" @@ -8111,7 +8114,7 @@ msgstr "アバター" msgid "Wechat" msgstr "微信" -#: users/models/user.py:834 users/serializers/user.py:111 +#: users/models/user.py:834 users/serializers/user.py:112 msgid "Phone" msgstr "電話" @@ -8122,7 +8125,7 @@ msgstr "OTP 秘密" # msgid "Private key" # msgstr "ssh秘密鍵" #: users/models/user.py:852 users/serializers/profile.py:128 -#: users/serializers/user.py:172 +#: users/serializers/user.py:173 msgid "Is first login" msgstr "最初のログインです" @@ -8296,71 +8299,71 @@ msgstr "パスワードがセキュリティルールと一致しない" msgid "The new password cannot be the last {} passwords" msgstr "新しいパスワードを最後の {} 個のパスワードにすることはできません" -#: users/serializers/user.py:44 +#: users/serializers/user.py:45 msgid "System roles" msgstr "システムの役割" -#: users/serializers/user.py:48 +#: users/serializers/user.py:49 msgid "Org roles" msgstr "組織ロール" -#: users/serializers/user.py:51 +#: users/serializers/user.py:52 msgid "Organizations and roles" msgstr "そしきとやくわり" -#: users/serializers/user.py:93 +#: users/serializers/user.py:94 msgid "Password strategy" msgstr "パスワード戦略" -#: users/serializers/user.py:95 +#: users/serializers/user.py:96 msgid "MFA enabled" msgstr "MFA有効化" -#: users/serializers/user.py:97 +#: users/serializers/user.py:98 msgid "MFA force enabled" msgstr "MFAフォース有効化" -#: users/serializers/user.py:99 +#: users/serializers/user.py:100 msgid "Login blocked" msgstr "ログインがロックされました" -#: users/serializers/user.py:102 users/serializers/user.py:181 +#: users/serializers/user.py:103 users/serializers/user.py:182 msgid "Is OTP bound" msgstr "仮想MFAがバインドされているか" -#: users/serializers/user.py:103 +#: users/serializers/user.py:104 msgid "Super Administrator" msgstr "スーパーアドミニストレーター" -#: users/serializers/user.py:104 +#: users/serializers/user.py:105 msgid "Organization Administrator" msgstr "組織管理者" -#: users/serializers/user.py:106 +#: users/serializers/user.py:107 msgid "Can public key authentication" msgstr "公開鍵認証が可能" -#: users/serializers/user.py:176 +#: users/serializers/user.py:177 msgid "Is org admin" msgstr "組織管理者です" -#: users/serializers/user.py:178 +#: users/serializers/user.py:179 msgid "Avatar url" msgstr "アバターURL" -#: users/serializers/user.py:182 +#: users/serializers/user.py:183 msgid "MFA level" msgstr "MFA レベル" -#: users/serializers/user.py:304 +#: users/serializers/user.py:305 msgid "Select users" msgstr "ユーザーの選択" -#: users/serializers/user.py:305 +#: users/serializers/user.py:306 msgid "For security, only list several users" msgstr "セキュリティのために、複数のユーザーのみをリストします" -#: users/serializers/user.py:338 +#: users/serializers/user.py:339 msgid "name not unique" msgstr "名前が一意ではない" diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index e85ee604d..8e21d8aec 100644 --- a/apps/locale/zh/LC_MESSAGES/django.mo +++ b/apps/locale/zh/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:baa5feb7e592b529b0a3d5695f236d7542f069f97c236def1ebf9c99f9ea75f8 -size 145065 +oid sha256:08667579241592ecacd1baf330147a720a9e41171444b925f90778613a7e1d9a +size 145230 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index f5b2d3a99..5b7b5cd97 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-18 17:25+0800\n" +"POT-Creation-Date: 2024-05-08 14:11+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -35,7 +35,7 @@ msgstr "成功: %s, 失败: %s, 总数: %s" #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123 #: terminal/serializers/storage.py:142 users/forms/profile.py:21 -#: users/serializers/user.py:109 +#: users/serializers/user.py:110 #: users/templates/users/_msg_user_created.html:13 #: users/templates/users/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 @@ -383,7 +383,7 @@ msgstr "账号备份计划" #: accounts/models/automations/backup_account.py:119 #: assets/models/automations/base.py:115 audits/models.py:65 -#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:238 +#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:241 #: ops/templates/ops/celery_task_log.html:75 #: perms/models/asset_permission.py:78 #: settings/templates/ldap/_msg_import_ldap_user.html:5 @@ -472,7 +472,7 @@ msgstr "SSH 密钥推送方式" #: accounts/models/automations/gather_account.py:58 #: accounts/serializers/account/backup.py:41 #: accounts/serializers/automations/change_secret.py:58 -#: settings/serializers/auth/ldap.py:90 +#: settings/serializers/auth/ldap.py:91 msgid "Recipient" msgstr "收件人" @@ -494,14 +494,14 @@ msgstr "开始日期" #: accounts/models/automations/change_secret.py:42 #: assets/models/automations/base.py:116 ops/models/base.py:56 -#: ops/models/celery.py:89 ops/models/job.py:239 +#: ops/models/celery.py:89 ops/models/job.py:242 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "结束日期" #: accounts/models/automations/change_secret.py:44 #: assets/models/automations/base.py:113 audits/models.py:208 -#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:230 +#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:233 #: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140 #: terminal/models/component/status.py:30 #: terminal/models/virtualapp/virtualapp.py:99 @@ -623,14 +623,14 @@ msgstr "密码规则" #: assets/models/_user.py:22 assets/models/asset/common.py:93 #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/domain.py:19 assets/models/group.py:17 -#: assets/models/label.py:18 assets/models/platform.py:16 -#: assets/models/platform.py:95 assets/serializers/asset/common.py:149 +#: assets/models/label.py:18 assets/models/platform.py:15 +#: assets/models/platform.py:94 assets/serializers/asset/common.py:149 #: assets/serializers/platform.py:118 assets/serializers/platform.py:228 #: authentication/backends/passkey/models.py:10 #: authentication/serializers/connect_token_secret.py:113 -#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11 +#: authentication/serializers/connect_token_secret.py:169 labels/models.py:11 #: ops/mixin.py:21 ops/models/adhoc.py:20 ops/models/celery.py:15 -#: ops/models/celery.py:80 ops/models/job.py:139 ops/models/playbook.py:28 +#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28 #: ops/serializers/job.py:18 orgs/models.py:82 #: perms/models/asset_permission.py:61 rbac/models/role.py:29 #: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89 @@ -657,7 +657,7 @@ msgstr "特权账号" #: authentication/serializers/connect_token_secret.py:117 #: terminal/models/applet/applet.py:40 #: terminal/models/component/endpoint.py:120 -#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:173 +#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:174 msgid "Is active" msgstr "激活" @@ -772,7 +772,7 @@ msgid "Exist policy" msgstr "账号存在策略" #: accounts/serializers/account/account.py:193 applications/models.py:11 -#: assets/models/label.py:21 assets/models/platform.py:96 +#: assets/models/label.py:21 assets/models/platform.py:95 #: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12 #: assets/serializers/platform.py:140 assets/serializers/platform.py:229 #: perms/serializers/user_permission.py:26 settings/models.py:35 @@ -784,11 +784,11 @@ msgstr "类别" #: accounts/serializers/automations/base.py:55 acls/models/command_acl.py:24 #: acls/serializers/command_acl.py:19 applications/models.py:14 #: assets/models/_user.py:50 assets/models/automations/base.py:20 -#: assets/models/cmd_filter.py:74 assets/models/platform.py:97 +#: assets/models/cmd_filter.py:74 assets/models/platform.py:96 #: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120 #: assets/serializers/platform.py:139 audits/serializers.py:53 #: audits/serializers.py:170 -#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:147 +#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:150 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39 #: terminal/models/component/storage.py:57 #: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29 @@ -824,7 +824,7 @@ msgstr "已修改" #: assets/models/automations/base.py:19 #: assets/serializers/automations/base.py:20 #: authentication/api/connection_token.py:410 ops/models/base.py:17 -#: ops/models/job.py:149 ops/serializers/job.py:19 +#: ops/models/job.py:152 ops/serializers/job.py:19 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 msgid "Assets" msgstr "资产" @@ -956,7 +956,7 @@ msgstr "关联平台,可配置推送参数,如果不关联,将使用默认 #: accounts/serializers/account/virtual.py:19 assets/models/_user.py:27 #: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88 #: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26 -#: ops/models/job.py:155 ops/models/playbook.py:31 rbac/models/role.py:37 +#: ops/models/job.py:158 ops/models/playbook.py:31 rbac/models/role.py:37 #: settings/models.py:38 terminal/models/applet/applet.py:45 #: terminal/models/applet/applet.py:321 terminal/models/applet/host.py:143 #: terminal/models/component/endpoint.py:25 @@ -1367,15 +1367,15 @@ msgstr "不能直接创建资产, 你应该创建主机或其他资产" msgid "Number required" msgstr "需要为数字" -#: assets/api/node.py:57 +#: assets/api/node.py:58 msgid "You can't update the root node name" msgstr "不能修改根节点名称" -#: assets/api/node.py:64 +#: assets/api/node.py:65 msgid "You can't delete the root node ({})" msgstr "不能删除根节点 ({})" -#: assets/api/node.py:67 +#: assets/api/node.py:68 msgid "Deletion failed and the node contains assets" msgstr "删除失败,节点包含资产" @@ -1387,11 +1387,11 @@ msgstr "同级别节点名字不能重复" msgid "App assets" msgstr "资产管理" -#: assets/automations/base/manager.py:188 +#: assets/automations/base/manager.py:191 msgid "{} disabled" msgstr "{} 已禁用" -#: assets/automations/base/manager.py:251 +#: assets/automations/base/manager.py:254 msgid " - Platform {} ansible disabled" msgstr " - 平台 {} Ansible 已禁用, 无法执行任务" @@ -1679,7 +1679,7 @@ msgstr "SSH公钥" #: assets/models/_user.py:28 assets/models/automations/base.py:114 #: assets/models/cmd_filter.py:41 assets/models/group.py:19 #: audits/models.py:267 common/db/models.py:34 ops/models/base.py:54 -#: ops/models/job.py:237 users/models/user.py:1058 +#: ops/models/job.py:240 users/models/user.py:1058 msgid "Date created" msgstr "创建日期" @@ -1768,7 +1768,7 @@ msgstr "可以匹配系统用户" msgid "Cloud" msgstr "云服务" -#: assets/models/asset/common.py:94 assets/models/platform.py:17 +#: assets/models/asset/common.py:94 assets/models/platform.py:16 #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72 #: settings/serializers/msg.py:32 terminal/serializers/storage.py:133 #: xpack/plugins/cloud/serializers/account_attrs.py:73 @@ -1779,7 +1779,7 @@ msgstr "端口" msgid "Address" msgstr "地址" -#: assets/models/asset/common.py:161 assets/models/platform.py:126 +#: assets/models/asset/common.py:161 assets/models/platform.py:134 #: authentication/backends/passkey/models.py:12 #: authentication/serializers/connect_token_secret.py:118 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:325 @@ -1848,7 +1848,7 @@ msgstr "忽略证书校验" msgid "Proxy" msgstr "代理" -#: assets/models/automations/base.py:22 ops/models/job.py:233 +#: assets/models/automations/base.py:22 ops/models/job.py:236 #: settings/serializers/auth/sms.py:103 msgid "Parameters" msgstr "参数" @@ -1919,7 +1919,7 @@ msgstr "网关" msgid "Asset group" msgstr "资产组" -#: assets/models/group.py:31 assets/models/platform.py:20 +#: assets/models/group.py:31 assets/models/platform.py:19 #: assets/serializers/platform.py:121 #: xpack/plugins/cloud/providers/nutanix.py:30 msgid "Default" @@ -1976,133 +1976,133 @@ msgstr "ssh私钥" msgid "Can match node" msgstr "可以匹配节点" -#: assets/models/platform.py:18 +#: assets/models/platform.py:17 msgid "Primary" msgstr "主要的" -#: assets/models/platform.py:19 +#: assets/models/platform.py:18 msgid "Required" msgstr "必须的" -#: assets/models/platform.py:21 +#: assets/models/platform.py:20 msgid "Public" msgstr "开放的" -#: assets/models/platform.py:22 assets/serializers/platform.py:49 +#: assets/models/platform.py:21 assets/serializers/platform.py:49 #: settings/serializers/settings.py:95 #: users/templates/users/reset_password.html:29 msgid "Setting" msgstr "设置" -#: assets/models/platform.py:39 audits/const.py:56 +#: assets/models/platform.py:38 audits/const.py:56 #: authentication/backends/passkey/models.py:11 settings/models.py:37 #: terminal/serializers/applet_host.py:33 msgid "Enabled" msgstr "启用" -#: assets/models/platform.py:40 +#: assets/models/platform.py:39 msgid "Ansible config" msgstr "Ansible 配置" -#: assets/models/platform.py:42 assets/serializers/platform.py:33 +#: assets/models/platform.py:41 assets/serializers/platform.py:33 msgid "Ping enabled" msgstr "启用资产探活" -#: assets/models/platform.py:43 assets/serializers/platform.py:34 +#: assets/models/platform.py:42 assets/serializers/platform.py:34 msgid "Ping method" msgstr "资产探活方式" -#: assets/models/platform.py:44 +#: assets/models/platform.py:43 msgid "Ping params" msgstr "资产探活参数" -#: assets/models/platform.py:46 assets/models/platform.py:70 +#: assets/models/platform.py:45 assets/models/platform.py:69 #: assets/serializers/platform.py:35 msgid "Gather facts enabled" msgstr "启用收集资产信息" -#: assets/models/platform.py:48 assets/models/platform.py:72 +#: assets/models/platform.py:47 assets/models/platform.py:71 #: assets/serializers/platform.py:36 msgid "Gather facts method" msgstr "收集信息方式" -#: assets/models/platform.py:50 assets/models/platform.py:74 +#: assets/models/platform.py:49 assets/models/platform.py:73 msgid "Gather facts params" msgstr "收集信息参数" -#: assets/models/platform.py:52 assets/serializers/platform.py:39 +#: assets/models/platform.py:51 assets/serializers/platform.py:39 msgid "Change secret enabled" msgstr "启用改密" -#: assets/models/platform.py:54 assets/serializers/platform.py:40 +#: assets/models/platform.py:53 assets/serializers/platform.py:40 msgid "Change secret method" msgstr "改密方式" -#: assets/models/platform.py:56 +#: assets/models/platform.py:55 msgid "Change secret params" msgstr "改密参数" -#: assets/models/platform.py:58 assets/serializers/platform.py:41 +#: assets/models/platform.py:57 assets/serializers/platform.py:41 msgid "Push account enabled" msgstr "启用账号推送" -#: assets/models/platform.py:60 assets/serializers/platform.py:42 +#: assets/models/platform.py:59 assets/serializers/platform.py:42 msgid "Push account method" msgstr "账号推送方式" -#: assets/models/platform.py:62 +#: assets/models/platform.py:61 msgid "Push account params" msgstr "账号推送参数" -#: assets/models/platform.py:64 assets/serializers/platform.py:37 +#: assets/models/platform.py:63 assets/serializers/platform.py:37 msgid "Verify account enabled" msgstr "开启账号验证" -#: assets/models/platform.py:66 assets/serializers/platform.py:38 +#: assets/models/platform.py:65 assets/serializers/platform.py:38 msgid "Verify account method" msgstr "账号验证方式" -#: assets/models/platform.py:68 +#: assets/models/platform.py:67 msgid "Verify account params" msgstr "账号验证参数" -#: assets/models/platform.py:76 +#: assets/models/platform.py:75 msgid "Remove account enabled" msgstr "开启账号移除" -#: assets/models/platform.py:78 +#: assets/models/platform.py:77 msgid "Remove account method" msgstr "账号移除方式" -#: assets/models/platform.py:80 +#: assets/models/platform.py:79 msgid "Remove account params" msgstr "账号移除参数" -#: assets/models/platform.py:98 tickets/models/ticket/general.py:298 +#: assets/models/platform.py:97 tickets/models/ticket/general.py:298 msgid "Meta" msgstr "元数据" -#: assets/models/platform.py:99 labels/models.py:13 +#: assets/models/platform.py:98 labels/models.py:13 msgid "Internal" msgstr "内置" -#: assets/models/platform.py:103 assets/serializers/platform.py:138 +#: assets/models/platform.py:102 assets/serializers/platform.py:138 msgid "Charset" msgstr "编码" -#: assets/models/platform.py:105 assets/serializers/platform.py:167 +#: assets/models/platform.py:104 assets/serializers/platform.py:167 msgid "Domain enabled" msgstr "启用网域" -#: assets/models/platform.py:107 assets/serializers/platform.py:166 +#: assets/models/platform.py:106 assets/serializers/platform.py:166 msgid "Su enabled" msgstr "启用账号切换" -#: assets/models/platform.py:108 assets/serializers/platform.py:144 +#: assets/models/platform.py:107 assets/serializers/platform.py:144 msgid "Su method" msgstr "账号切换方式" -#: assets/models/platform.py:109 assets/serializers/platform.py:147 +#: assets/models/platform.py:108 assets/serializers/platform.py:147 msgid "Custom fields" msgstr "自定义属性" @@ -2601,8 +2601,8 @@ msgid "Offline user session" msgstr "下线用户会话" #: audits/serializers.py:33 ops/models/adhoc.py:25 ops/models/base.py:16 -#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:148 -#: ops/models/job.py:236 ops/models/playbook.py:30 +#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:151 +#: ops/models/job.py:239 ops/models/playbook.py:30 #: terminal/models/session/sharing.py:25 msgid "Creator" msgstr "创建者" @@ -2733,7 +2733,7 @@ msgstr "ACL 动作是拒绝: {}({})" msgid "ACL action is review" msgstr "ACL 动作是复核" -#: authentication/api/mfa.py:59 +#: authentication/api/mfa.py:62 msgid "Current user not support mfa type: {}" msgstr "当前用户不支持 MFA 类型: {}" @@ -3177,11 +3177,11 @@ msgstr "没有用户或用户失效" msgid "No asset or inactive asset" msgstr "没有资产或资产未激活" -#: authentication/models/connection_token.py:272 +#: authentication/models/connection_token.py:274 msgid "Can view super connection token secret" msgstr "可以查看超级连接令牌密文" -#: authentication/models/connection_token.py:274 +#: authentication/models/connection_token.py:276 msgid "Super connection token" msgstr "超级连接令牌" @@ -3225,17 +3225,17 @@ msgstr "组件" msgid "Expired now" msgstr "立刻过期" -#: authentication/serializers/connect_token_secret.py:169 +#: authentication/serializers/connect_token_secret.py:170 #: terminal/models/virtualapp/virtualapp.py:25 msgid "Image name" msgstr "镜像名称" -#: authentication/serializers/connect_token_secret.py:170 +#: authentication/serializers/connect_token_secret.py:171 #: terminal/models/virtualapp/virtualapp.py:27 msgid "Image port" msgstr "镜像端口" -#: authentication/serializers/connect_token_secret.py:171 +#: authentication/serializers/connect_token_secret.py:172 #: terminal/models/virtualapp/virtualapp.py:26 msgid "Image protocol" msgstr "镜像协议" @@ -3258,7 +3258,7 @@ msgstr "动作" #: authentication/serializers/connection_token.py:42 #: perms/serializers/permission.py:40 perms/serializers/permission.py:60 -#: users/serializers/user.py:100 users/serializers/user.py:177 +#: users/serializers/user.py:101 users/serializers/user.py:178 msgid "Is expired" msgstr "已过期" @@ -3272,8 +3272,8 @@ msgid "Access IP" msgstr "IP 白名单" #: authentication/serializers/token.py:92 perms/serializers/permission.py:39 -#: perms/serializers/permission.py:61 users/serializers/user.py:101 -#: users/serializers/user.py:174 +#: perms/serializers/permission.py:61 users/serializers/user.py:102 +#: users/serializers/user.py:175 msgid "Is valid" msgstr "是否有效" @@ -3936,7 +3936,7 @@ msgstr "错误的数据类型,应该是列表" msgid "Invalid choice: {}" msgstr "无效选项: {}" -#: common/serializers/mixin.py:397 labels/apps.py:8 +#: common/serializers/mixin.py:406 labels/apps.py:8 msgid "Labels" msgstr "标签管理" @@ -4067,15 +4067,15 @@ msgstr "系统信息" msgid "Publish the station message" msgstr "发布站内消息" -#: ops/ansible/inventory.py:106 ops/models/job.py:63 +#: ops/ansible/inventory.py:107 ops/models/job.py:65 msgid "No account available" msgstr "无可用账号" -#: ops/ansible/inventory.py:285 +#: ops/ansible/inventory.py:286 msgid "Ansible disabled" msgstr "Ansible 已禁用" -#: ops/ansible/inventory.py:301 +#: ops/ansible/inventory.py:302 msgid "Skip hosts below:" msgstr "跳过以下主机: " @@ -4191,7 +4191,7 @@ msgstr "VCS" msgid "Adhoc" msgstr "命令" -#: ops/const.py:39 ops/models/job.py:146 +#: ops/const.py:39 ops/models/job.py:149 msgid "Playbook" msgstr "Playbook" @@ -4280,11 +4280,11 @@ msgstr "需要周期或定期设置" msgid "Pattern" msgstr "模式" -#: ops/models/adhoc.py:23 ops/models/job.py:143 +#: ops/models/adhoc.py:23 ops/models/job.py:146 msgid "Module" msgstr "模块" -#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:141 +#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:144 #: terminal/models/component/task.py:14 msgid "Args" msgstr "参数" @@ -4303,12 +4303,12 @@ msgstr "最后执行" msgid "Date last run" msgstr "最后运行日期" -#: ops/models/base.py:51 ops/models/job.py:234 +#: ops/models/base.py:51 ops/models/job.py:237 #: xpack/plugins/cloud/models.py:198 msgid "Result" msgstr "结果" -#: ops/models/base.py:52 ops/models/job.py:235 +#: ops/models/base.py:52 ops/models/job.py:238 msgid "Summary" msgstr "汇总" @@ -4341,43 +4341,43 @@ msgstr "发布日期" msgid "Celery Task Execution" msgstr "Celery 任务执行" -#: ops/models/job.py:144 +#: ops/models/job.py:147 msgid "Chdir" msgstr "运行目录" -#: ops/models/job.py:145 +#: ops/models/job.py:148 msgid "Timeout (Seconds)" msgstr "超时时间 (秒)" -#: ops/models/job.py:150 +#: ops/models/job.py:153 msgid "Use Parameter Define" msgstr "使用参数定义" -#: ops/models/job.py:151 +#: ops/models/job.py:154 msgid "Parameters define" msgstr "参数定义" -#: ops/models/job.py:152 +#: ops/models/job.py:155 msgid "Runas" msgstr "运行用户" -#: ops/models/job.py:154 +#: ops/models/job.py:157 msgid "Runas policy" msgstr "用户策略" -#: ops/models/job.py:218 +#: ops/models/job.py:221 msgid "Job" msgstr "作业" -#: ops/models/job.py:241 +#: ops/models/job.py:244 msgid "Material" msgstr "Material" -#: ops/models/job.py:243 +#: ops/models/job.py:246 msgid "Material Type" msgstr "Material 类型" -#: ops/models/job.py:540 +#: ops/models/job.py:544 msgid "Job Execution" msgstr "作业执行" @@ -5177,14 +5177,18 @@ msgstr "User DN 缓存超时时间 (秒)" #: settings/serializers/auth/ldap.py:84 msgid "" "Caching the User DN obtained during user login authentication can " -"effectivelyimprove the speed of user authentication., 0 means no cache" -msgstr "对用户登录认证时查询出的 User DN 进行缓存,可以有效提高用户认证的速度" +"effectivelyimprove the speed of user authentication., 0 means no cache
If " +"the user OU structure has been adjusted, click Submit to clear the user DN " +"cache" +msgstr "" +"对用户登录认证时查询出的 User DN 进行缓存,可以有效提高用户认证的速度
如果" +"用户 OU 架构有调整,点击提交即可清除用户 DN 缓存" -#: settings/serializers/auth/ldap.py:88 +#: settings/serializers/auth/ldap.py:89 msgid "Search paged size (piece)" msgstr "搜索分页数量 (条)" -#: settings/serializers/auth/ldap.py:93 +#: settings/serializers/auth/ldap.py:94 msgid "Enable LDAP auth" msgstr "启用 LDAP 认证" @@ -7985,7 +7989,7 @@ msgstr "强制启用" msgid "Lark" msgstr "" -#: users/models/user.py:826 users/serializers/user.py:175 +#: users/models/user.py:826 users/serializers/user.py:176 msgid "Is service account" msgstr "服务账号" @@ -7997,7 +8001,7 @@ msgstr "头像" msgid "Wechat" msgstr "微信" -#: users/models/user.py:834 users/serializers/user.py:111 +#: users/models/user.py:834 users/serializers/user.py:112 msgid "Phone" msgstr "手机" @@ -8008,7 +8012,7 @@ msgstr "OTP 密钥" # msgid "Private key" # msgstr "ssh私钥" #: users/models/user.py:852 users/serializers/profile.py:128 -#: users/serializers/user.py:172 +#: users/serializers/user.py:173 msgid "Is first login" msgstr "首次登录" @@ -8178,71 +8182,71 @@ msgstr "密码不满足安全规则" msgid "The new password cannot be the last {} passwords" msgstr "新密码不能是最近 {} 次的密码" -#: users/serializers/user.py:44 +#: users/serializers/user.py:45 msgid "System roles" msgstr "系统角色" -#: users/serializers/user.py:48 +#: users/serializers/user.py:49 msgid "Org roles" msgstr "组织角色" -#: users/serializers/user.py:51 +#: users/serializers/user.py:52 msgid "Organizations and roles" msgstr "组织和角色" -#: users/serializers/user.py:93 +#: users/serializers/user.py:94 msgid "Password strategy" msgstr "密码策略" -#: users/serializers/user.py:95 +#: users/serializers/user.py:96 msgid "MFA enabled" msgstr "MFA 已启用" -#: users/serializers/user.py:97 +#: users/serializers/user.py:98 msgid "MFA force enabled" msgstr "强制 MFA" -#: users/serializers/user.py:99 +#: users/serializers/user.py:100 msgid "Login blocked" msgstr "登录被锁定" -#: users/serializers/user.py:102 users/serializers/user.py:181 +#: users/serializers/user.py:103 users/serializers/user.py:182 msgid "Is OTP bound" msgstr "是否绑定了虚拟 MFA" -#: users/serializers/user.py:103 +#: users/serializers/user.py:104 msgid "Super Administrator" msgstr "超级管理员" -#: users/serializers/user.py:104 +#: users/serializers/user.py:105 msgid "Organization Administrator" msgstr "组织管理员" -#: users/serializers/user.py:106 +#: users/serializers/user.py:107 msgid "Can public key authentication" msgstr "可以使用公钥认证" -#: users/serializers/user.py:176 +#: users/serializers/user.py:177 msgid "Is org admin" msgstr "组织管理员" -#: users/serializers/user.py:178 +#: users/serializers/user.py:179 msgid "Avatar url" msgstr "头像路径" -#: users/serializers/user.py:182 +#: users/serializers/user.py:183 msgid "MFA level" msgstr "MFA 级别" -#: users/serializers/user.py:304 +#: users/serializers/user.py:305 msgid "Select users" msgstr "选择用户" -#: users/serializers/user.py:305 +#: users/serializers/user.py:306 msgid "For security, only list several users" msgstr "为了安全,仅列出几个用户" -#: users/serializers/user.py:338 +#: users/serializers/user.py:339 msgid "name not unique" msgstr "名称重复" diff --git a/apps/locale/zh_Hant/LC_MESSAGES/django.mo b/apps/locale/zh_Hant/LC_MESSAGES/django.mo index 68eb45e31..487c345f6 100644 --- a/apps/locale/zh_Hant/LC_MESSAGES/django.mo +++ b/apps/locale/zh_Hant/LC_MESSAGES/django.mo @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5d73b2f2320bf2be7b4223de27c095e6b69de1b85d21722a0589709bd5315620 -size 145170 +oid sha256:93fed3f6a027f645520852f40c5f7722a5be579a3a8bb7b7029e3d0bc9794056 +size 145341 diff --git a/apps/locale/zh_Hant/LC_MESSAGES/django.po b/apps/locale/zh_Hant/LC_MESSAGES/django.po index 38c939b55..68e38db59 100644 --- a/apps/locale/zh_Hant/LC_MESSAGES/django.po +++ b/apps/locale/zh_Hant/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-04-18 17:25+0800\n" +"POT-Creation-Date: 2024-05-08 14:11+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -37,7 +37,7 @@ msgstr "成功: %s, 失敗: %s, 總數: %s" #: settings/serializers/auth/ldap.py:25 settings/serializers/auth/ldap.py:47 #: settings/serializers/msg.py:35 terminal/serializers/storage.py:123 #: terminal/serializers/storage.py:142 users/forms/profile.py:21 -#: users/serializers/user.py:109 +#: users/serializers/user.py:110 #: users/templates/users/_msg_user_created.html:13 #: users/templates/users/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 @@ -385,7 +385,7 @@ msgstr "帳號備份計劃" #: accounts/models/automations/backup_account.py:119 #: assets/models/automations/base.py:115 audits/models.py:65 -#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:238 +#: ops/models/base.py:55 ops/models/celery.py:88 ops/models/job.py:241 #: ops/templates/ops/celery_task_log.html:75 #: perms/models/asset_permission.py:78 #: settings/templates/ldap/_msg_import_ldap_user.html:5 @@ -474,7 +474,7 @@ msgstr "SSH 金鑰推送方式" #: accounts/models/automations/gather_account.py:58 #: accounts/serializers/account/backup.py:41 #: accounts/serializers/automations/change_secret.py:58 -#: settings/serializers/auth/ldap.py:90 +#: settings/serializers/auth/ldap.py:91 msgid "Recipient" msgstr "收件人" @@ -496,14 +496,14 @@ msgstr "開始日期" #: accounts/models/automations/change_secret.py:42 #: assets/models/automations/base.py:116 ops/models/base.py:56 -#: ops/models/celery.py:89 ops/models/job.py:239 +#: ops/models/celery.py:89 ops/models/job.py:242 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "結束日期" #: accounts/models/automations/change_secret.py:44 #: assets/models/automations/base.py:113 audits/models.py:208 -#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:230 +#: audits/serializers.py:54 ops/models/base.py:49 ops/models/job.py:233 #: terminal/models/applet/applet.py:320 terminal/models/applet/host.py:140 #: terminal/models/component/status.py:30 #: terminal/models/virtualapp/virtualapp.py:99 @@ -625,14 +625,14 @@ msgstr "密碼規則" #: assets/models/_user.py:22 assets/models/asset/common.py:93 #: assets/models/asset/common.py:159 assets/models/cmd_filter.py:21 #: assets/models/domain.py:19 assets/models/group.py:17 -#: assets/models/label.py:18 assets/models/platform.py:16 -#: assets/models/platform.py:95 assets/serializers/asset/common.py:149 +#: assets/models/label.py:18 assets/models/platform.py:15 +#: assets/models/platform.py:94 assets/serializers/asset/common.py:149 #: assets/serializers/platform.py:118 assets/serializers/platform.py:228 #: authentication/backends/passkey/models.py:10 #: authentication/serializers/connect_token_secret.py:113 -#: authentication/serializers/connect_token_secret.py:168 labels/models.py:11 +#: authentication/serializers/connect_token_secret.py:169 labels/models.py:11 #: ops/mixin.py:21 ops/models/adhoc.py:20 ops/models/celery.py:15 -#: ops/models/celery.py:80 ops/models/job.py:139 ops/models/playbook.py:28 +#: ops/models/celery.py:80 ops/models/job.py:142 ops/models/playbook.py:28 #: ops/serializers/job.py:18 orgs/models.py:82 #: perms/models/asset_permission.py:61 rbac/models/role.py:29 #: settings/models.py:33 settings/models.py:181 settings/serializers/msg.py:89 @@ -659,7 +659,7 @@ msgstr "特權帳號" #: authentication/serializers/connect_token_secret.py:117 #: terminal/models/applet/applet.py:40 #: terminal/models/component/endpoint.py:120 -#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:173 +#: terminal/models/virtualapp/virtualapp.py:23 users/serializers/user.py:174 msgid "Is active" msgstr "啟用" @@ -774,7 +774,7 @@ msgid "Exist policy" msgstr "帳號存在策略" #: accounts/serializers/account/account.py:193 applications/models.py:11 -#: assets/models/label.py:21 assets/models/platform.py:96 +#: assets/models/label.py:21 assets/models/platform.py:95 #: assets/serializers/asset/common.py:125 assets/serializers/cagegory.py:12 #: assets/serializers/platform.py:140 assets/serializers/platform.py:229 #: perms/serializers/user_permission.py:26 settings/models.py:35 @@ -786,11 +786,11 @@ msgstr "類別" #: accounts/serializers/automations/base.py:55 acls/models/command_acl.py:24 #: acls/serializers/command_acl.py:19 applications/models.py:14 #: assets/models/_user.py:50 assets/models/automations/base.py:20 -#: assets/models/cmd_filter.py:74 assets/models/platform.py:97 +#: assets/models/cmd_filter.py:74 assets/models/platform.py:96 #: assets/serializers/asset/common.py:126 assets/serializers/platform.py:120 #: assets/serializers/platform.py:139 audits/serializers.py:53 #: audits/serializers.py:170 -#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:147 +#: authentication/serializers/connect_token_secret.py:126 ops/models/job.py:150 #: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39 #: terminal/models/component/storage.py:57 #: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29 @@ -826,7 +826,7 @@ msgstr "已修改" #: assets/models/automations/base.py:19 #: assets/serializers/automations/base.py:20 #: authentication/api/connection_token.py:410 ops/models/base.py:17 -#: ops/models/job.py:149 ops/serializers/job.py:19 +#: ops/models/job.py:152 ops/serializers/job.py:19 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 msgid "Assets" msgstr "資產" @@ -958,7 +958,7 @@ msgstr "關聯平台,可配置推送參數,如果不關聯,將使用默認 #: accounts/serializers/account/virtual.py:19 assets/models/_user.py:27 #: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88 #: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26 -#: ops/models/job.py:155 ops/models/playbook.py:31 rbac/models/role.py:37 +#: ops/models/job.py:158 ops/models/playbook.py:31 rbac/models/role.py:37 #: settings/models.py:38 terminal/models/applet/applet.py:45 #: terminal/models/applet/applet.py:321 terminal/models/applet/host.py:143 #: terminal/models/component/endpoint.py:25 @@ -1369,15 +1369,15 @@ msgstr "不能直接創建資產, 你應該創建主機或其他資產" msgid "Number required" msgstr "需要為數字" -#: assets/api/node.py:57 +#: assets/api/node.py:58 msgid "You can't update the root node name" msgstr "不能修改根節點名稱" -#: assets/api/node.py:64 +#: assets/api/node.py:65 msgid "You can't delete the root node ({})" msgstr "不能刪除根節點 ({})" -#: assets/api/node.py:67 +#: assets/api/node.py:68 msgid "Deletion failed and the node contains assets" msgstr "刪除失敗,節點包含資產" @@ -1389,11 +1389,11 @@ msgstr "同級別節點名字不能重複" msgid "App assets" msgstr "資產管理" -#: assets/automations/base/manager.py:188 +#: assets/automations/base/manager.py:191 msgid "{} disabled" msgstr "{} 已禁用" -#: assets/automations/base/manager.py:251 +#: assets/automations/base/manager.py:254 msgid " - Platform {} ansible disabled" msgstr " - 平台 {} Ansible 已禁用, 無法執行任務" @@ -1681,7 +1681,7 @@ msgstr "SSH公鑰" #: assets/models/_user.py:28 assets/models/automations/base.py:114 #: assets/models/cmd_filter.py:41 assets/models/group.py:19 #: audits/models.py:267 common/db/models.py:34 ops/models/base.py:54 -#: ops/models/job.py:237 users/models/user.py:1058 +#: ops/models/job.py:240 users/models/user.py:1058 msgid "Date created" msgstr "創建日期" @@ -1770,7 +1770,7 @@ msgstr "可以匹配系統用戶" msgid "Cloud" msgstr "雲服務" -#: assets/models/asset/common.py:94 assets/models/platform.py:17 +#: assets/models/asset/common.py:94 assets/models/platform.py:16 #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:72 #: settings/serializers/msg.py:32 terminal/serializers/storage.py:133 #: xpack/plugins/cloud/serializers/account_attrs.py:73 @@ -1781,7 +1781,7 @@ msgstr "埠" msgid "Address" msgstr "地址" -#: assets/models/asset/common.py:161 assets/models/platform.py:126 +#: assets/models/asset/common.py:161 assets/models/platform.py:134 #: authentication/backends/passkey/models.py:12 #: authentication/serializers/connect_token_secret.py:118 #: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:325 @@ -1850,7 +1850,7 @@ msgstr "忽略證書校驗" msgid "Proxy" msgstr "代理" -#: assets/models/automations/base.py:22 ops/models/job.py:233 +#: assets/models/automations/base.py:22 ops/models/job.py:236 #: settings/serializers/auth/sms.py:103 msgid "Parameters" msgstr "參數" @@ -1921,7 +1921,7 @@ msgstr "網關" msgid "Asset group" msgstr "資產組" -#: assets/models/group.py:31 assets/models/platform.py:20 +#: assets/models/group.py:31 assets/models/platform.py:19 #: assets/serializers/platform.py:121 #: xpack/plugins/cloud/providers/nutanix.py:30 msgid "Default" @@ -1978,133 +1978,133 @@ msgstr "ssh私鑰" msgid "Can match node" msgstr "可以匹配節點" -#: assets/models/platform.py:18 +#: assets/models/platform.py:17 msgid "Primary" msgstr "主要的" -#: assets/models/platform.py:19 +#: assets/models/platform.py:18 msgid "Required" msgstr "必須的" -#: assets/models/platform.py:21 +#: assets/models/platform.py:20 msgid "Public" msgstr "開放的" -#: assets/models/platform.py:22 assets/serializers/platform.py:49 +#: assets/models/platform.py:21 assets/serializers/platform.py:49 #: settings/serializers/settings.py:95 #: users/templates/users/reset_password.html:29 msgid "Setting" msgstr "設置" -#: assets/models/platform.py:39 audits/const.py:56 +#: assets/models/platform.py:38 audits/const.py:56 #: authentication/backends/passkey/models.py:11 settings/models.py:37 #: terminal/serializers/applet_host.py:33 msgid "Enabled" msgstr "啟用" -#: assets/models/platform.py:40 +#: assets/models/platform.py:39 msgid "Ansible config" msgstr "Ansible 配置" -#: assets/models/platform.py:42 assets/serializers/platform.py:33 +#: assets/models/platform.py:41 assets/serializers/platform.py:33 msgid "Ping enabled" msgstr "啟用資產探活" -#: assets/models/platform.py:43 assets/serializers/platform.py:34 +#: assets/models/platform.py:42 assets/serializers/platform.py:34 msgid "Ping method" msgstr "資產探活方式" -#: assets/models/platform.py:44 +#: assets/models/platform.py:43 msgid "Ping params" msgstr "資產探活參數" -#: assets/models/platform.py:46 assets/models/platform.py:70 +#: assets/models/platform.py:45 assets/models/platform.py:69 #: assets/serializers/platform.py:35 msgid "Gather facts enabled" msgstr "啟用收集資產資訊" -#: assets/models/platform.py:48 assets/models/platform.py:72 +#: assets/models/platform.py:47 assets/models/platform.py:71 #: assets/serializers/platform.py:36 msgid "Gather facts method" msgstr "收集資訊方式" -#: assets/models/platform.py:50 assets/models/platform.py:74 +#: assets/models/platform.py:49 assets/models/platform.py:73 msgid "Gather facts params" msgstr "收集資訊參數" -#: assets/models/platform.py:52 assets/serializers/platform.py:39 +#: assets/models/platform.py:51 assets/serializers/platform.py:39 msgid "Change secret enabled" msgstr "啟用改密" -#: assets/models/platform.py:54 assets/serializers/platform.py:40 +#: assets/models/platform.py:53 assets/serializers/platform.py:40 msgid "Change secret method" msgstr "改密方式" -#: assets/models/platform.py:56 +#: assets/models/platform.py:55 msgid "Change secret params" msgstr "改密參數" -#: assets/models/platform.py:58 assets/serializers/platform.py:41 +#: assets/models/platform.py:57 assets/serializers/platform.py:41 msgid "Push account enabled" msgstr "啟用帳號推送" -#: assets/models/platform.py:60 assets/serializers/platform.py:42 +#: assets/models/platform.py:59 assets/serializers/platform.py:42 msgid "Push account method" msgstr "帳號推送方式" -#: assets/models/platform.py:62 +#: assets/models/platform.py:61 msgid "Push account params" msgstr "帳號推送參數" -#: assets/models/platform.py:64 assets/serializers/platform.py:37 +#: assets/models/platform.py:63 assets/serializers/platform.py:37 msgid "Verify account enabled" msgstr "開啟帳號驗證" -#: assets/models/platform.py:66 assets/serializers/platform.py:38 +#: assets/models/platform.py:65 assets/serializers/platform.py:38 msgid "Verify account method" msgstr "帳號驗證方式" -#: assets/models/platform.py:68 +#: assets/models/platform.py:67 msgid "Verify account params" msgstr "帳號驗證參數" -#: assets/models/platform.py:76 +#: assets/models/platform.py:75 msgid "Remove account enabled" msgstr "開啟帳號移除" -#: assets/models/platform.py:78 +#: assets/models/platform.py:77 msgid "Remove account method" msgstr "帳號移除方式" -#: assets/models/platform.py:80 +#: assets/models/platform.py:79 msgid "Remove account params" msgstr "帳號移除參數" -#: assets/models/platform.py:98 tickets/models/ticket/general.py:298 +#: assets/models/platform.py:97 tickets/models/ticket/general.py:298 msgid "Meta" msgstr "元數據" -#: assets/models/platform.py:99 labels/models.py:13 +#: assets/models/platform.py:98 labels/models.py:13 msgid "Internal" msgstr "內建" -#: assets/models/platform.py:103 assets/serializers/platform.py:138 +#: assets/models/platform.py:102 assets/serializers/platform.py:138 msgid "Charset" msgstr "編碼" -#: assets/models/platform.py:105 assets/serializers/platform.py:167 +#: assets/models/platform.py:104 assets/serializers/platform.py:167 msgid "Domain enabled" msgstr "啟用網域" -#: assets/models/platform.py:107 assets/serializers/platform.py:166 +#: assets/models/platform.py:106 assets/serializers/platform.py:166 msgid "Su enabled" msgstr "啟用帳號切換" -#: assets/models/platform.py:108 assets/serializers/platform.py:144 +#: assets/models/platform.py:107 assets/serializers/platform.py:144 msgid "Su method" msgstr "帳號切換方式" -#: assets/models/platform.py:109 assets/serializers/platform.py:147 +#: assets/models/platform.py:108 assets/serializers/platform.py:147 msgid "Custom fields" msgstr "自訂屬性" @@ -2603,8 +2603,8 @@ msgid "Offline user session" msgstr "下線用戶會話" #: audits/serializers.py:33 ops/models/adhoc.py:25 ops/models/base.py:16 -#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:148 -#: ops/models/job.py:236 ops/models/playbook.py:30 +#: ops/models/base.py:53 ops/models/celery.py:86 ops/models/job.py:151 +#: ops/models/job.py:239 ops/models/playbook.py:30 #: terminal/models/session/sharing.py:25 msgid "Creator" msgstr "創建者" @@ -2735,7 +2735,7 @@ msgstr "ACL 動作是拒絕: {}({})" msgid "ACL action is review" msgstr "ACL 動作是覆核" -#: authentication/api/mfa.py:59 +#: authentication/api/mfa.py:62 msgid "Current user not support mfa type: {}" msgstr "當前用戶不支持 MFA 類型: {}" @@ -3179,11 +3179,11 @@ msgstr "沒有用戶或用戶失效" msgid "No asset or inactive asset" msgstr "沒有資產或資產未啟用" -#: authentication/models/connection_token.py:272 +#: authentication/models/connection_token.py:274 msgid "Can view super connection token secret" msgstr "可以查看超級連接令牌密文" -#: authentication/models/connection_token.py:274 +#: authentication/models/connection_token.py:276 msgid "Super connection token" msgstr "超級連接令牌" @@ -3227,17 +3227,17 @@ msgstr "組件" msgid "Expired now" msgstr "立刻過期" -#: authentication/serializers/connect_token_secret.py:169 +#: authentication/serializers/connect_token_secret.py:170 #: terminal/models/virtualapp/virtualapp.py:25 msgid "Image name" msgstr "鏡像名稱" -#: authentication/serializers/connect_token_secret.py:170 +#: authentication/serializers/connect_token_secret.py:171 #: terminal/models/virtualapp/virtualapp.py:27 msgid "Image port" msgstr "鏡像埠" -#: authentication/serializers/connect_token_secret.py:171 +#: authentication/serializers/connect_token_secret.py:172 #: terminal/models/virtualapp/virtualapp.py:26 msgid "Image protocol" msgstr "鏡像協議" @@ -3260,7 +3260,7 @@ msgstr "動作" #: authentication/serializers/connection_token.py:42 #: perms/serializers/permission.py:40 perms/serializers/permission.py:60 -#: users/serializers/user.py:100 users/serializers/user.py:177 +#: users/serializers/user.py:101 users/serializers/user.py:178 msgid "Is expired" msgstr "已過期" @@ -3274,8 +3274,8 @@ msgid "Access IP" msgstr "IP 白名單" #: authentication/serializers/token.py:92 perms/serializers/permission.py:39 -#: perms/serializers/permission.py:61 users/serializers/user.py:101 -#: users/serializers/user.py:174 +#: perms/serializers/permission.py:61 users/serializers/user.py:102 +#: users/serializers/user.py:175 msgid "Is valid" msgstr "是否有效" @@ -3938,7 +3938,7 @@ msgstr "錯誤的數據類型,應該是列表" msgid "Invalid choice: {}" msgstr "無效選項: {}" -#: common/serializers/mixin.py:397 labels/apps.py:8 +#: common/serializers/mixin.py:406 labels/apps.py:8 msgid "Labels" msgstr "標籤管理" @@ -4068,15 +4068,15 @@ msgstr "系統資訊" msgid "Publish the station message" msgstr "發布站內消息" -#: ops/ansible/inventory.py:106 ops/models/job.py:63 +#: ops/ansible/inventory.py:107 ops/models/job.py:65 msgid "No account available" msgstr "無可用帳號" -#: ops/ansible/inventory.py:285 +#: ops/ansible/inventory.py:286 msgid "Ansible disabled" msgstr "Ansible 已禁用" -#: ops/ansible/inventory.py:301 +#: ops/ansible/inventory.py:302 msgid "Skip hosts below:" msgstr "跳過以下主機: " @@ -4192,7 +4192,7 @@ msgstr "VCS" msgid "Adhoc" msgstr "命令" -#: ops/const.py:39 ops/models/job.py:146 +#: ops/const.py:39 ops/models/job.py:149 msgid "Playbook" msgstr "Playbook" @@ -4281,11 +4281,11 @@ msgstr "需要週期或定期設置" msgid "Pattern" msgstr "模式" -#: ops/models/adhoc.py:23 ops/models/job.py:143 +#: ops/models/adhoc.py:23 ops/models/job.py:146 msgid "Module" msgstr "模組" -#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:141 +#: ops/models/adhoc.py:24 ops/models/celery.py:81 ops/models/job.py:144 #: terminal/models/component/task.py:14 msgid "Args" msgstr "參數" @@ -4304,12 +4304,12 @@ msgstr "最後執行" msgid "Date last run" msgstr "最後運行日期" -#: ops/models/base.py:51 ops/models/job.py:234 +#: ops/models/base.py:51 ops/models/job.py:237 #: xpack/plugins/cloud/models.py:198 msgid "Result" msgstr "結果" -#: ops/models/base.py:52 ops/models/job.py:235 +#: ops/models/base.py:52 ops/models/job.py:238 msgid "Summary" msgstr "匯總" @@ -4342,43 +4342,43 @@ msgstr "發布日期" msgid "Celery Task Execution" msgstr "Celery 任務執行" -#: ops/models/job.py:144 +#: ops/models/job.py:147 msgid "Chdir" msgstr "運行目錄" -#: ops/models/job.py:145 +#: ops/models/job.py:148 msgid "Timeout (Seconds)" msgstr "超時時間 (秒)" -#: ops/models/job.py:150 +#: ops/models/job.py:153 msgid "Use Parameter Define" msgstr "使用參數定義" -#: ops/models/job.py:151 +#: ops/models/job.py:154 msgid "Parameters define" msgstr "參數定義" -#: ops/models/job.py:152 +#: ops/models/job.py:155 msgid "Runas" msgstr "運行用戶" -#: ops/models/job.py:154 +#: ops/models/job.py:157 msgid "Runas policy" msgstr "用戶策略" -#: ops/models/job.py:218 +#: ops/models/job.py:221 msgid "Job" msgstr "作業" -#: ops/models/job.py:241 +#: ops/models/job.py:244 msgid "Material" msgstr "Material" -#: ops/models/job.py:243 +#: ops/models/job.py:246 msgid "Material Type" msgstr "Material 類型" -#: ops/models/job.py:540 +#: ops/models/job.py:544 msgid "Job Execution" msgstr "作業執行" @@ -5178,15 +5178,18 @@ msgstr "快取逾時時間 (秒)" #: settings/serializers/auth/ldap.py:84 msgid "" "Caching the User DN obtained during user login authentication can " -"effectivelyimprove the speed of user authentication., 0 means no cache" +"effectivelyimprove the speed of user authentication., 0 means no cache
If " +"the user OU structure has been adjusted, click Submit to clear the user DN " +"cache" msgstr "" "對於使用者登錄認證時查詢的使用者 DN 進行快取,可以有效提高使用者認證的速度" +"
如果使用者 OU 架構已調整,請點擊提交以清除使用者 DN 快取" -#: settings/serializers/auth/ldap.py:88 +#: settings/serializers/auth/ldap.py:89 msgid "Search paged size (piece)" msgstr "搜索分頁數量 (條)" -#: settings/serializers/auth/ldap.py:93 +#: settings/serializers/auth/ldap.py:94 msgid "Enable LDAP auth" msgstr "啟用 LDAP 認證" @@ -7987,7 +7990,7 @@ msgstr "強制啟用" msgid "Lark" msgstr "" -#: users/models/user.py:826 users/serializers/user.py:175 +#: users/models/user.py:826 users/serializers/user.py:176 msgid "Is service account" msgstr "服務帳號" @@ -7999,7 +8002,7 @@ msgstr "頭像" msgid "Wechat" msgstr "微信" -#: users/models/user.py:834 users/serializers/user.py:111 +#: users/models/user.py:834 users/serializers/user.py:112 msgid "Phone" msgstr "手機" @@ -8010,7 +8013,7 @@ msgstr "OTP 金鑰" # msgid "Private key" # msgstr "ssh私鑰" #: users/models/user.py:852 users/serializers/profile.py:128 -#: users/serializers/user.py:172 +#: users/serializers/user.py:173 msgid "Is first login" msgstr "首次登錄" @@ -8180,71 +8183,71 @@ msgstr "密碼不滿足安全規則" msgid "The new password cannot be the last {} passwords" msgstr "新密碼不能是最近 {} 次的密碼" -#: users/serializers/user.py:44 +#: users/serializers/user.py:45 msgid "System roles" msgstr "系統角色" -#: users/serializers/user.py:48 +#: users/serializers/user.py:49 msgid "Org roles" msgstr "組織角色" -#: users/serializers/user.py:51 +#: users/serializers/user.py:52 msgid "Organizations and roles" msgstr "組織和角色" -#: users/serializers/user.py:93 +#: users/serializers/user.py:94 msgid "Password strategy" msgstr "密碼策略" -#: users/serializers/user.py:95 +#: users/serializers/user.py:96 msgid "MFA enabled" msgstr "MFA 已啟用" -#: users/serializers/user.py:97 +#: users/serializers/user.py:98 msgid "MFA force enabled" msgstr "強制 MFA" -#: users/serializers/user.py:99 +#: users/serializers/user.py:100 msgid "Login blocked" msgstr "登錄被鎖定" -#: users/serializers/user.py:102 users/serializers/user.py:181 +#: users/serializers/user.py:103 users/serializers/user.py:182 msgid "Is OTP bound" msgstr "是否綁定了虛擬 MFA" -#: users/serializers/user.py:103 +#: users/serializers/user.py:104 msgid "Super Administrator" msgstr "超級管理員" -#: users/serializers/user.py:104 +#: users/serializers/user.py:105 msgid "Organization Administrator" msgstr "組織管理員" -#: users/serializers/user.py:106 +#: users/serializers/user.py:107 msgid "Can public key authentication" msgstr "可以使用公鑰認證" -#: users/serializers/user.py:176 +#: users/serializers/user.py:177 msgid "Is org admin" msgstr "組織管理員" -#: users/serializers/user.py:178 +#: users/serializers/user.py:179 msgid "Avatar url" msgstr "頭像路徑" -#: users/serializers/user.py:182 +#: users/serializers/user.py:183 msgid "MFA level" msgstr "MFA 級別" -#: users/serializers/user.py:304 +#: users/serializers/user.py:305 msgid "Select users" msgstr "選擇用戶" -#: users/serializers/user.py:305 +#: users/serializers/user.py:306 msgid "For security, only list several users" msgstr "為了安全,僅列出幾個用戶" -#: users/serializers/user.py:338 +#: users/serializers/user.py:339 msgid "name not unique" msgstr "名稱重複" diff --git a/apps/ops/ansible/callback.py b/apps/ops/ansible/callback.py index c11941be4..ce9713521 100644 --- a/apps/ops/ansible/callback.py +++ b/apps/ops/ansible/callback.py @@ -35,10 +35,10 @@ class DefaultCallback: @property def host_results(self): - results = {} + results = defaultdict(dict) for state, hosts in self.result.items(): for host, items in hosts.items(): - results[host] = items + results[host][state] = items return results def is_success(self): diff --git a/apps/ops/ansible/interface.py b/apps/ops/ansible/interface.py index 065e80abc..a11df97c7 100644 --- a/apps/ops/ansible/interface.py +++ b/apps/ops/ansible/interface.py @@ -15,7 +15,7 @@ class _LazyRunnerInterface(LazyObject): @staticmethod def make_interface(): runner_type = AnsibleReceptorRunner \ - if settings.ANSIBLE_RECEPTOR_ENABLED else AnsibleNativeRunner + if settings.RECEPTOR_ENABLED else AnsibleNativeRunner gateway_host = settings.ANSIBLE_RECEPTOR_GATEWAY_PROXY_HOST \ if settings.ANSIBLE_RECEPTOR_GATEWAY_PROXY_HOST else '127.0.0.1' return RunnerInterface(runner_type=runner_type, gateway_proxy_host=gateway_host) diff --git a/apps/ops/ansible/inventory.py b/apps/ops/ansible/inventory.py index f969861cb..b9a559c08 100644 --- a/apps/ops/ansible/inventory.py +++ b/apps/ops/ansible/inventory.py @@ -127,7 +127,7 @@ class JMSInventory: if platform.is_huawei(): host['ansible_connection'] = 'network_cli' - host['ansible_network_os'] = 'asa' + host['ansible_network_os'] = 'ce' if gateway: ansible_connection = host.get('ansible_connection', 'ssh') diff --git a/apps/ops/ansible/runner.py b/apps/ops/ansible/runner.py index 6af2fffb4..dbbdbdcc3 100644 --- a/apps/ops/ansible/runner.py +++ b/apps/ops/ansible/runner.py @@ -14,8 +14,10 @@ __all__ = ['AdHocRunner', 'PlaybookRunner', 'SuperPlaybookRunner', 'UploadFileRu class AdHocRunner: cmd_modules_choices = ('shell', 'raw', 'command', 'script', 'win_shell') + need_local_connection_modules_choices = ("mysql", "postgresql", "sqlserver", "huawei") - def __init__(self, inventory, module, module_args='', pattern='*', project_dir='/tmp/', extra_vars=None, + def __init__(self, inventory, job_module, module, module_args='', pattern='*', project_dir='/tmp/', + extra_vars=None, dry_run=False, timeout=-1): if extra_vars is None: extra_vars = {} @@ -23,6 +25,7 @@ class AdHocRunner: self.inventory = inventory self.pattern = pattern self.module = module + self.job_module = job_module self.module_args = module_args self.project_dir = project_dir self.cb = DefaultCallback() @@ -30,8 +33,7 @@ class AdHocRunner: self.extra_vars = extra_vars self.dry_run = dry_run self.timeout = timeout - # enable local connection - self.extra_vars.update({"LOCAL_CONNECTION_ENABLED": "1"}) + self.envs = {} def check_module(self): if self.module not in self.cmd_modules_choices: @@ -40,8 +42,13 @@ class AdHocRunner: raise CommandInBlackListException( "Command is rejected by black list: {}".format(self.module_args.split()[0])) + def set_local_connection(self): + if self.job_module in self.need_local_connection_modules_choices: + self.envs.update({"LOCAL_CONNECTION_ENABLED": "1"}) + def run(self, verbosity=0, **kwargs): self.check_module() + self.set_local_connection() verbosity = get_ansible_log_verbosity(verbosity) if not os.path.exists(self.project_dir): @@ -53,6 +60,7 @@ class AdHocRunner: interface.run( timeout=self.timeout if self.timeout > 0 else None, extravars=self.extra_vars, + envvars=self.envs, host_pattern=self.pattern, private_data_dir=self.project_dir, inventory=self.inventory, diff --git a/apps/ops/api/celery.py b/apps/ops/api/celery.py index ae4e9d8b6..420d2d3c8 100644 --- a/apps/ops/api/celery.py +++ b/apps/ops/api/celery.py @@ -262,6 +262,8 @@ class CeleryTaskExecutionViewSet(CommonApiMixin, viewsets.ModelViewSet): msg = _("Task {} not found").format(execution.name) raise JMSException(code='task_not_found_error', detail=msg) try: + execution.kwargs.pop('__current_lang', None) + execution.kwargs.pop('__current_org_id', None) t = task.delay(*execution.args, **execution.kwargs) except TypeError: msg = _("Task {} args or kwargs error").format(execution.name) diff --git a/apps/ops/models/job.py b/apps/ops/models/job.py index f1fd8adb9..9e7fcd511 100644 --- a/apps/ops/models/job.py +++ b/apps/ops/models/job.py @@ -67,6 +67,7 @@ class JMSPermedInventory(JMSInventory): protocol_supported_modules_mapping = { 'mysql': ['mysql'], + 'mariadb': ['mysql'], 'postgresql': ['postgresql'], 'sqlserver': ['sqlserver'], 'ssh': ['shell', 'python', 'win_shell', 'raw', 'huawei'], @@ -77,7 +78,7 @@ class JMSPermedInventory(JMSInventory): host['error'] = "Module {} is not suitable for this asset".format(self.module) return host - if protocol.name in ('mysql', 'postgresql', 'sqlserver'): + if protocol.name in ('mariadb', 'mysql', 'postgresql', 'sqlserver'): host['login_host'] = asset.address host['login_port'] = protocol.port host['login_user'] = account.username @@ -333,6 +334,7 @@ class JobExecution(JMSOrgBaseModel): runner = AdHocRunner( self.inventory_path, + self.job.module, module, timeout=self.current_job.timeout, module_args=args, diff --git a/apps/ops/tasks.py b/apps/ops/tasks.py index 3da3b726e..6292df69d 100644 --- a/apps/ops/tasks.py +++ b/apps/ops/tasks.py @@ -144,10 +144,10 @@ def clean_job_execution_period(): del_res = JobExecution.objects.filter(date_created__lt=expired_day).delete() logger.info(f"clean job_execution db record success! delete {days} days {del_res[0]} records") - -@shared_task -def longtime_add(x, y): - print('long time task begins') - time.sleep(50) - print('long time task finished') - return x + y +# 测试使用,注释隐藏 +# @shared_task +# def longtime_add(x, y): +# print('long time task begins') +# time.sleep(50) +# print('long time task finished') +# return x + y diff --git a/apps/perms/migrations/0030_auto_20220816_1132.py b/apps/perms/migrations/0030_auto_20220816_1132.py index 3915b8b1a..fb1c3ad2e 100644 --- a/apps/perms/migrations/0030_auto_20220816_1132.py +++ b/apps/perms/migrations/0030_auto_20220816_1132.py @@ -16,7 +16,7 @@ def migrate_system_user_to_accounts(apps, schema_editor): count += len(asset_permissions) updated = [] for asset_permission in asset_permissions: - asset_permission.accounts = [s.username for s in asset_permission.system_users.all()] + asset_permission.accounts = [s.username for s in asset_permission.system_users.all() if s.username.strip()] updated.append(asset_permission) asset_permission_model.objects.bulk_update(updated, ['accounts']) diff --git a/apps/settings/api/settings.py b/apps/settings/api/settings.py index a801ab2f8..262a66473 100644 --- a/apps/settings/api/settings.py +++ b/apps/settings/api/settings.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- # +import re from django.conf import settings +from django.core.cache import cache from django.http import HttpResponse from django.views.static import serve from rest_framework import generics @@ -168,6 +170,13 @@ class SettingsApi(generics.RetrieveUpdateAPIView): if hasattr(serializer, 'post_save'): serializer.post_save() self.send_signal(serializer) + if self.request.query_params.get('category') == 'ldap': + self.clean_ldap_user_dn_cache() + + @staticmethod + def clean_ldap_user_dn_cache(): + del_count = cache.delete_pattern('django_auth_ldap.user_dn.*') + logger.debug(f'clear LDAP user_dn_cache count={del_count}') class SettingsLogoApi(APIView): diff --git a/apps/settings/serializers/auth/ldap.py b/apps/settings/serializers/auth/ldap.py index 4229e1251..5e0abf1c3 100644 --- a/apps/settings/serializers/auth/ldap.py +++ b/apps/settings/serializers/auth/ldap.py @@ -82,7 +82,8 @@ class LDAPSettingSerializer(serializers.Serializer): required=False, label=_('User DN cache timeout (s)'), help_text=_( 'Caching the User DN obtained during user login authentication can effectively' - 'improve the speed of user authentication., 0 means no cache' + 'improve the speed of user authentication., 0 means no cache
' + 'If the user OU structure has been adjusted, click Submit to clear the user DN cache' ) ) AUTH_LDAP_SEARCH_PAGED_SIZE = serializers.IntegerField(required=False, label=_('Search paged size (piece)')) diff --git a/apps/settings/serializers/public.py b/apps/settings/serializers/public.py index ebefcb717..4f94f99bc 100644 --- a/apps/settings/serializers/public.py +++ b/apps/settings/serializers/public.py @@ -22,6 +22,7 @@ class PrivateSettingSerializer(PublicSettingSerializer): AUTH_LDAP_SYNC_ORG_IDS = serializers.ListField() SECURITY_MAX_IDLE_TIME = serializers.IntegerField() SECURITY_VIEW_AUTH_NEED_MFA = serializers.BooleanField() + SECURITY_MFA_AUTH = serializers.IntegerField() SECURITY_MFA_VERIFY_TTL = serializers.IntegerField() SECURITY_COMMAND_EXECUTION = serializers.BooleanField() SECURITY_COMMAND_BLACKLIST = serializers.ListField() @@ -41,6 +42,7 @@ class PrivateSettingSerializer(PublicSettingSerializer): AUTH_DINGTALK = serializers.BooleanField() AUTH_FEISHU = serializers.BooleanField() AUTH_LARK = serializers.BooleanField() + AUTH_SLACK = serializers.BooleanField() AUTH_TEMP_TOKEN = serializers.BooleanField() TERMINAL_RAZOR_ENABLED = serializers.BooleanField() diff --git a/apps/settings/tasks/ldap.py b/apps/settings/tasks/ldap.py index e662eeaeb..e600017cb 100644 --- a/apps/settings/tasks/ldap.py +++ b/apps/settings/tasks/ldap.py @@ -9,7 +9,7 @@ from common.utils import get_logger from common.utils.timezone import local_now_display from ops.celery.decorator import after_app_ready_start from ops.celery.utils import ( - create_or_update_celery_periodic_tasks, disable_celery_periodic_task + create_or_update_celery_periodic_tasks, delete_celery_periodic_task ) from orgs.models import Organization from settings.notifications import LDAPImportMessage @@ -69,7 +69,7 @@ def import_ldap_user_periodic(): if not settings.AUTH_LDAP: return task_name = 'import_ldap_user_periodic' - disable_celery_periodic_task(task_name) + delete_celery_periodic_task(task_name) if not settings.AUTH_LDAP_SYNC_IS_PERIODIC: return @@ -86,8 +86,7 @@ def import_ldap_user_periodic(): task_name: { 'task': import_ldap_user.name, 'interval': interval, - 'crontab': crontab, - 'enabled': True, + 'crontab': crontab } } create_or_update_celery_periodic_tasks(tasks) diff --git a/apps/templates/_mfa_login_field.html b/apps/templates/_mfa_login_field.html index ec2477d1f..463e5732e 100644 --- a/apps/templates/_mfa_login_field.html +++ b/apps/templates/_mfa_login_field.html @@ -120,7 +120,7 @@ function onError (responseText, responseJson, status) { setTimeout(function () { - toastr.error(responseJson.detail); + toastr.error(responseJson.detail || responseJson.error); }); }; diff --git a/apps/terminal/applets/chrome/app.py b/apps/terminal/applets/chrome/app.py index d9ae97210..487cd2a07 100644 --- a/apps/terminal/applets/chrome/app.py +++ b/apps/terminal/applets/chrome/app.py @@ -247,8 +247,7 @@ class AppletApplication(BaseApplication): if protocol_setting and protocol_setting.safe_mode: # 加载 extensions extension_paths = load_extensions() - for extension_path in extension_paths: - self._chrome_options.add_argument('--load-extension={}'.format(extension_path)) + self._chrome_options.add_argument('--load-extension={}'.format(','.join(extension_paths))) @wrapper_progress_bar def run(self): diff --git a/apps/terminal/models/component/terminal.py b/apps/terminal/models/component/terminal.py index 0337fce69..8666c5da2 100644 --- a/apps/terminal/models/component/terminal.py +++ b/apps/terminal/models/component/terminal.py @@ -96,9 +96,9 @@ class Terminal(StorageMixin, TerminalStatusMixin, JMSBaseModel): @property def is_active(self): - if self.user and self.user.is_active: - return True - return False + user_active = self.user and self.user.is_active + type_active = self.type in [TypeChoices.core, TypeChoices.celery] + return user_active or type_active @is_active.setter def is_active(self, active): diff --git a/apps/users/serializers/user.py b/apps/users/serializers/user.py index 04b71cd62..beb69b57e 100644 --- a/apps/users/serializers/user.py +++ b/apps/users/serializers/user.py @@ -3,6 +3,7 @@ from functools import partial +from django.conf import settings from django.utils.translation import gettext_lazy as _ from rest_framework import serializers @@ -123,11 +124,12 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, ResourceLa fields_write_only = [ "password", "public_key", ] + # xpack 包含的字段 + fields_xpack = ["wecom_id", "dingtalk_id", "feishu_id", "lark_id", "slack_id"] # small 指的是 不需要计算的直接能从一张表中获取到的数据 fields_small = fields_mini + fields_write_only + [ "email", "wechat", "phone", "mfa_level", "source", - "wecom_id", "dingtalk_id", "feishu_id", "lark_id", - "slack_id", "created_by", "updated_by", "comment", # 通用字段 + *fields_xpack, "created_by", "updated_by", "comment", # 通用字段 ] fields_date = [ "date_expired", "date_joined", "last_login", @@ -156,8 +158,7 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, ResourceLa read_only_fields = [ "date_joined", "last_login", "created_by", - "is_first_login", "wecom_id", "dingtalk_id", - "feishu_id", "lark_id", "date_api_key_last_used", + "is_first_login", *fields_xpack, "date_api_key_last_used", ] fields_only_root_org = ["orgs_roles"] disallow_self_update_fields = ["is_active", "system_roles", "org_roles"] @@ -181,7 +182,7 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, ResourceLa "is_otp_secret_key_bound": {"label": _("Is OTP bound")}, 'mfa_level': {'label': _("MFA level")}, } - + def get_fields(self): fields = super().get_fields() self.pop_fields_if_need(fields) @@ -192,7 +193,7 @@ class UserSerializer(RolesSerializerMixin, CommonBulkSerializerMixin, ResourceLa if not current_org.is_root(): for f in self.Meta.fields_only_root_org: fields.pop(f, None) - + def validate_password(self, password): password_strategy = self.initial_data.get("password_strategy") if self.instance is None and password_strategy != PasswordStrategy.custom: diff --git a/poetry.lock b/poetry.lock index 1ba0c6f97..c59495a67 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "adal" @@ -2836,8 +2836,14 @@ files = [ [package.dependencies] google-auth = ">=2.14.1,<3.0.dev0" googleapis-common-protos = ">=1.56.2,<2.0.dev0" -grpcio = {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} -grpcio-status = {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""} +grpcio = [ + {version = ">=1.33.2,<2.0dev", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] +grpcio-status = [ + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, + {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, +] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" requests = ">=2.18.0,<3.0.0.dev0" @@ -3148,25 +3154,15 @@ reference = "tsinghua" [[package]] name = "httpcore" -version = "1.0.4" -description = "A minimal low-level HTTP client." +version = "1.0.5" +description = "" optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, - {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.25.0)"] - [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" @@ -3579,12 +3575,12 @@ reference = "tsinghua" [[package]] name = "jms-storage" -version = "0.0.57" +version = "0.0.58" description = "Jumpserver storage python sdk tools" optional = false python-versions = "*" files = [ - {file = "jms-storage-0.0.57.tar.gz", hash = "sha256:765fdd0ebfa0965eb37d820b0bce2d26254126523c3f263eb7aab6a7d45253ff"}, + {file = "jms-storage-0.0.58.tar.gz", hash = "sha256:9508864c5b65b2628291c39e3eeccedffd77448545a0359a4cb12c6435592e62"}, ] [package.dependencies] @@ -3919,6 +3915,16 @@ files = [ {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, @@ -4166,7 +4172,6 @@ files = [ {file = "msgpack-1.0.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fbb160554e319f7b22ecf530a80a3ff496d38e8e07ae763b9e82fadfe96f273"}, {file = "msgpack-1.0.8-cp39-cp39-win32.whl", hash = "sha256:f9af38a89b6a5c04b7d18c492c8ccf2aee7048aff1ce8437c4683bb5a1df893d"}, {file = "msgpack-1.0.8-cp39-cp39-win_amd64.whl", hash = "sha256:ed59dd52075f8fc91da6053b12e8c89e37aa043f8986efd89e61fae69dc1b011"}, - {file = "msgpack-1.0.8-py3-none-any.whl", hash = "sha256:24f727df1e20b9876fa6e95f840a2a2651e34c0ad147676356f4bf5fbb0206ca"}, {file = "msgpack-1.0.8.tar.gz", hash = "sha256:95c02b0e27e706e48d0e5426d1710ca78e0f0628d6e89d5b5a5b91a5f12274f3"}, ] @@ -4448,27 +4453,15 @@ reference = "tsinghua" [[package]] name = "openai" -version = "1.13.3" -description = "The official Python library for the openai API" +version = "1.29.0" +description = "" optional = false -python-versions = ">=3.7.1" +python-versions = "*" files = [ - {file = "openai-1.13.3-py3-none-any.whl", hash = "sha256:5769b62abd02f350a8dd1a3a242d8972c947860654466171d60fb0972ae0a41c"}, - {file = "openai-1.13.3.tar.gz", hash = "sha256:ff6c6b3bc7327e715e4b3592a923a5a1c7519ff5dd764a83d69f633d49e77a7b"}, + {file = "openai-1.29.0-py3-none-any.whl", hash = "sha256:c61cd12376c84362d406341f9e2f9a9d6b81c082b133b44484dc0f43954496b1"}, + {file = "openai-1.29.0.tar.gz", hash = "sha256:d5a769f485610cff8bae14343fa45a8b1d346be3d541fa5b28ccd040dbc8baf8"}, ] -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tqdm = ">4" -typing-extensions = ">=4.7,<5" - -[package.extras] -datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] - [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" @@ -5363,23 +5356,15 @@ reference = "tsinghua" [[package]] name = "pydantic" -version = "2.6.3" -description = "Data validation using Python type hints" +version = "2.7.1" +description = "" optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, - {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" -typing-extensions = ">=4.6.1" - -[package.extras] -email = ["email-validator (>=2.0.0)"] - [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" @@ -5387,95 +5372,92 @@ reference = "tsinghua" [[package]] name = "pydantic-core" -version = "2.16.3" +version = "2.18.2" description = "" optional = false -python-versions = ">=3.8" +python-versions = "*" files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, ] -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - [package.source] type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" @@ -5809,9 +5791,11 @@ files = [ {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:049f2e3de919e8e02504780a21ebbf235e21ca8ed5c7538c5b6e705aa6c43d8c"}, {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd86d8e3e346e34f3f03d12e333747b53a1daa74374a727f4714d5b82ee0dd5"}, {file = "pymssql-2.2.8-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:508226a0df7cb6faeda9f8e84e85743690ca427d7b27af9a73d75fcf0c1eef6e"}, + {file = "pymssql-2.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:47859887adeaf184766b5e0bc845dd23611f3808f9521552063bb36eabc10092"}, {file = "pymssql-2.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d873e553374d5b1c57fe1c43bb75e3bcc2920678db1ef26f6bfed396c7d21b30"}, {file = "pymssql-2.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf31b8b76634c826a91f9999e15b7bfb0c051a0f53b319fd56481a67e5b903bb"}, {file = "pymssql-2.2.8-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:821945c2214fe666fd456c61e09a29a00e7719c9e136c801bffb3a254e9c579b"}, + {file = "pymssql-2.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:cc85b609b4e60eac25fa38bbac1ff854fd2c2a276e0ca4a3614c6f97efb644bb"}, {file = "pymssql-2.2.8-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:ebe7f64d5278d807f14bea08951e02512bfbc6219fd4d4f15bb45ded885cf3d4"}, {file = "pymssql-2.2.8-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:253af3d39fc0235627966817262d5c4c94ad09dcbea59664748063470048c29c"}, {file = "pymssql-2.2.8-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c9d109df536dc5f7dd851a88d285a4c9cb12a9314b621625f4f5ab1197eb312"}, @@ -5827,11 +5811,13 @@ files = [ {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3906993300650844ec140aa58772c0f5f3e9e9d5709c061334fd1551acdcf066"}, {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:7309c7352e4a87c9995c3183ebfe0ff4135e955bb759109637673c61c9f0ca8d"}, {file = "pymssql-2.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9b8d603cc1ec7ae585c5a409a1d45e8da067970c79dd550d45c238ae0aa0f79f"}, + {file = "pymssql-2.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:293cb4d0339e221d877d6b19a1905082b658f0100a1e2ccc9dda10de58938901"}, {file = "pymssql-2.2.8-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:895041edd002a2e91d8a4faf0906b6fbfef29d9164bc6beb398421f5927fa40e"}, {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6b2d9c6d38a416c6f2db36ff1cd8e69f9a5387a46f9f4f612623192e0c9404b1"}, {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d63d6f25cf40fe6a03c49be2d4d337858362b8ab944d6684c268e4990807cf0c"}, {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:c83ad3ad20951f3a94894b354fa5fa9666dcd5ebb4a635dad507c7d1dd545833"}, {file = "pymssql-2.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3933f7f082be74698eea835df51798dab9bc727d94d3d280bffc75ab9265f890"}, + {file = "pymssql-2.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:de313375b90b0f554058992f35c4a4beb3f6ec2f5912d8cd6afb649f95b03a9f"}, {file = "pymssql-2.2.8.tar.gz", hash = "sha256:9baefbfbd07d0142756e2dfcaa804154361ac5806ab9381350aad4e780c3033e"}, ] @@ -6320,6 +6306,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -6327,8 +6314,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -6345,6 +6339,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -6352,6 +6347,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -7065,13 +7061,13 @@ reference = "tsinghua" [[package]] name = "tqdm" -version = "4.66.2" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -7909,4 +7905,4 @@ reference = "tsinghua" [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "2924fdefd09ae7c8656999f0d3212cb317fbfba2d603fdfbd11d0fdfb66b3523" +content-hash = "63da026ae0d9d5e6a62b25d265a50c95666e05f60cdae798c2e0443c93544e3a" diff --git a/pyproject.toml b/pyproject.toml index 464bd7055..970bb6c99 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,7 +47,7 @@ pynacl = "1.5.0" python-dateutil = "2.8.2" pyyaml = "6.0.1" requests = "2.31.0" -jms-storage = "0.0.57" +jms-storage = "^0.0.58" simplejson = "3.19.1" six = "1.16.0" sshtunnel = "0.4.0" @@ -144,12 +144,18 @@ ua-parser = "^0.18.0" user-agents = "^2.2.0" django-cors-headers = "^4.3.0" mistune = "2.0.3" -openai = "^1.3.7" +openai = "^1.29.0" xlsxwriter = "^3.1.9" exchangelib = "^5.1.0" xmlsec = "^1.3.13" lxml = "4.9.3" receptorctl = "^1.4.5" +pydantic = "^2.7.1" +pydantic-core = "^2.18.2" +annotated-types = "^0.6.0" +httpx = "^0.27.0" +distro = "1.9.0" +tqdm = "4.66.4" [tool.poetry.group.xpack.dependencies] diff --git a/receptor b/receptor index d32f40889..1efc8cba4 100755 --- a/receptor +++ b/receptor @@ -75,7 +75,6 @@ class ReceptorService: print("\n- PID file is corrupted, starting Receptor...") os.remove(self.pid_file) - os.environ.update({'LOCAL_CONNECTION_ENABLED': '1'}) os.environ.setdefault('ANSIBLE_LIBRARY', DEFAULT_ANSIBLE_MODULES_DIR) os.environ.update({'PYTHONPATH': APPS_DIR}) process = subprocess.Popen(self.receptor_command)