Merge pull request #13236 from jumpserver/dev

v3.10.10-lts
v3.10.10-lts
Bryan 2024-05-16 16:04:07 +08:00 committed by GitHub
commit 1518f792d6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
48 changed files with 787 additions and 554 deletions

View File

@ -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

View File

@ -87,6 +87,7 @@ ARG TOOLS=" \
default-mysql-client \
iputils-ping \
locales \
netcat-openbsd \
nmap \
openssh-client \
patch \

View File

@ -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)

View File

@ -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')},
}

View File

@ -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`"

View File

@ -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')},
}

View File

@ -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")

View File

@ -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))

View File

@ -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

View File

@ -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),
]

View File

@ -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,

View File

@ -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'

View File

@ -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)

View File

@ -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:

1
apps/common/drf/const.py Normal file
View File

@ -0,0 +1 @@
CSV_FILE_ESCAPE_CHARS = ['=', '@', '0']

View File

@ -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

View File

@ -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()

View File

@ -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:

View File

@ -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)

View File

@ -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'
}

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b796ec6f93e1a3855473cc5e4a0bd2ecf44b33ce59b07146fa0e83fd16cd7b46
size 177281
oid sha256:e4baadc170ded5134bed55533c4c04e694be6ea7b8e151d80c1092728e26a75b
size 177500

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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<br>If "
"the user OU structure has been adjusted, click Submit to clear the user DN "
"cache"
msgstr ""
"ユーザーログイン認証時に取得したユーザー DN をキャッシュすることで、ユーザー"
"認証の速度を効果的に向上させることができます"
"認証の速度を効果的に向上させることができます<br>ユーザー 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 "名前が一意ではない"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:baa5feb7e592b529b0a3d5695f236d7542f069f97c236def1ebf9c99f9ea75f8
size 145065
oid sha256:08667579241592ecacd1baf330147a720a9e41171444b925f90778613a7e1d9a
size 145230

View File

@ -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 <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\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<br>If "
"the user OU structure has been adjusted, click Submit to clear the user DN "
"cache"
msgstr ""
"对用户登录认证时查询出的 User DN 进行缓存,可以有效提高用户认证的速度<br>如果"
"用户 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 "名称重复"

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5d73b2f2320bf2be7b4223de27c095e6b69de1b85d21722a0589709bd5315620
size 145170
oid sha256:93fed3f6a027f645520852f40c5f7722a5be579a3a8bb7b7029e3d0bc9794056
size 145341

View File

@ -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 <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\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<br>If "
"the user OU structure has been adjusted, click Submit to clear the user DN "
"cache"
msgstr ""
"對於使用者登錄認證時查詢的使用者 DN 進行快取,可以有效提高使用者認證的速度"
"<br>如果使用者 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 "名稱重複"

View File

@ -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):

View File

@ -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)

View File

@ -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')

View File

@ -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,

View File

@ -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)

View File

@ -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,

View File

@ -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

View File

@ -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'])

View File

@ -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):

View File

@ -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<br>'
'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)'))

View File

@ -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()

View File

@ -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)

View File

@ -120,7 +120,7 @@
function onError (responseText, responseJson, status) {
setTimeout(function () {
toastr.error(responseJson.detail);
toastr.error(responseJson.detail || responseJson.error);
});
};

View File

@ -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):

View File

@ -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):

View File

@ -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:

274
poetry.lock generated
View File

@ -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"

View File

@ -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]

View File

@ -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)