diff --git a/.github/workflows/bkapi-client-core.yml b/.github/workflows/bkapi-client-core.yml index 496d2e2a..3d9c65c8 100644 --- a/.github/workflows/bkapi-client-core.yml +++ b/.github/workflows/bkapi-client-core.yml @@ -34,7 +34,8 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - python -m pip install 'tox==3.23.0' 'tox-gh-actions==2.12.0' + python -m pip install . 'tox-gh-actions==2.12.0' -r requirements_tox.txt + working-directory: sdks/bkapi-client-core - name: Test with tox run: tox diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 40669b94..55ef0536 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,6 +18,7 @@ repos: # Set language to disable pre-commit's virtual-env language: system types: [python] + exclude: "^(sdks/apigw-manager/.*|sdks/bkapi-client-core/.*)$" entry: poetry run isort --settings-path=pyproject.toml - id: black name: black diff --git a/sdks/apigw-manager/CHANGE.md b/sdks/apigw-manager/CHANGE.md index d00ea8da..67853e68 100644 --- a/sdks/apigw-manager/CHANGE.md +++ b/sdks/apigw-manager/CHANGE.md @@ -4,15 +4,34 @@ - 添加指令 add_related_apps,支持为网关添加关联应用 - definition.yaml 添加 spec_version 字段,指定配置文件版本号 - Django Command 中,通过参数 --gateway-name 指定网关 +- 基础镜像 apigw-manager 中,sync-apigateway.sh 中去除指令 apply_apigw_permissions +- 优化请求 bk-apigateway 接口失败时,打印的错误消息 +- 优化 README.md,提供 examples + +Breaking changes: - 基础镜像 apigw-manager 中,调整指令名称 - sync-apigateway 改为 sync-apigateway.sh - apigw-manager 改为 apigw-manager.sh - call_command 改为 call_command_or_warning - call_definition_command 改为 call_definition_command_or_warning - must_call_definition_command 改为 call_definition_command_or_exit -- 基础镜像 apigw-manager 中,sync-apigateway.sh 中去除指令 apply_apigw_permissions -- 优化请求 bk-apigateway 接口失败时,打印的错误消息 -- 优化 README.md,提供 examples +- 以下函数中的参数名 api_name 改为 gateway_name + - ApiGatewayJWTUserMiddleware.get_user + - UserModelBackend.authenticate + - PublicKeyProvider.provide + - SettingsPublicKeyProvider.provide + - CachePublicKeyProvider.provide +- 以下函数中参数名 default_api_name 改为 default_gateway_name + - CachePublicKeyProvider.__init__ + - DefaultJWTProvider.__init__ + - DummyEnvPayloadJWTProvider.__init__ + - JWTProvider.__init__ + - PublicKeyProvider.__init__ + - SettingsPublicKeyProvider.__init__ + +如果项目添加了自定义镜像,或自定义 Django 中间件,需要按照新的规则进行调整,或者锁定版本号 +- 自定义镜像锁定基础镜像 apigw-manager 版本,版本号 < 3.0.0 +- SDK 锁定版本号 < 3.0.0,如 poetry 可设置 `apigw-manager = "<3.0.0"` ### 2.0.1 - 修复镜像 sync-apigateway 中,同步任务失败时,脚本退出码为 0 的问题 diff --git a/sdks/apigw-manager/README.md b/sdks/apigw-manager/README.md index 814420e7..67c18fda 100644 --- a/sdks/apigw-manager/README.md +++ b/sdks/apigw-manager/README.md @@ -237,7 +237,7 @@ AUTHENTICATION_BACKENDS += [ #### ApiGatewayJWTGenericMiddleware 认证 JWT 信息,在 `request` 中注入 `jwt` 对象,有以下属性: -- `api_name`:传入的网关名称; +- `gateway_name`:传入的网关名称; #### ApiGatewayJWTAppMiddleware 解析 JWT 中的应用信息,在 `request` 中注入 `app` 对象,有以下属性: @@ -267,15 +267,15 @@ auth.authenticate(request, username=username, verified=verified) 在 Django settings 中提供如下配置 ```python -BK_APIGW_JWT_PROVIDER_CLS = "apigw-manager.apigw.providers.DummyEnvPayloadJWTProvider" +BK_APIGW_JWT_PROVIDER_CLS = "apigw_manager.apigw.providers.DummyEnvPayloadJWTProvider" ``` 同时提供以下环境变量 ``` -APIGW_MANAGER_DUMMY_API_NAME # JWT 中的 API name -APIGW_MANAGER_DUMMY_PAYLOAD_APP_CODE # JWT payload 中的 app_code -APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME # JWT payload 中的 username +APIGW_MANAGER_DUMMY_GATEWAY_NAME # JWT 中的网关名 +APIGW_MANAGER_DUMMY_PAYLOAD_APP_CODE # JWT payload 中的 app_code +APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME # JWT payload 中的 username ``` ## FAQ @@ -285,4 +285,4 @@ APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME # JWT payload 中的 username 2. 可设置环境变量 `DATABASE_URL`,指定外部数据库,同步后可通过执行以下 SQL 查询: ```sql select value from apigw_manager_context where scope="public_key" and key=""; - ``` \ No newline at end of file + ``` diff --git a/sdks/apigw-manager/README.rst b/sdks/apigw-manager/README.rst index 1341266c..c2b9083b 100644 --- a/sdks/apigw-manager/README.rst +++ b/sdks/apigw-manager/README.rst @@ -273,7 +273,7 @@ ApiGatewayJWTGenericMiddleware 认证 JWT 信息,在 ``request`` 中注入 ``jwt`` 对象,有以下属性: -* ``api_name``\ :传入的网关名称; +* ``gateway_name``\ :传入的网关名称; ApiGatewayJWTAppMiddleware ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -317,15 +317,15 @@ UserModelBackend .. code-block:: python - BK_APIGW_JWT_PROVIDER_CLS = "apigw-manager.apigw.providers.DummyEnvPayloadJWTProvider" + BK_APIGW_JWT_PROVIDER_CLS = "apigw_manager.apigw.providers.DummyEnvPayloadJWTProvider" 同时提供以下环境变量 .. code-block:: - APIGW_MANAGER_DUMMY_API_NAME # JWT 中的 API name - APIGW_MANAGER_DUMMY_PAYLOAD_APP_CODE # JWT payload 中的 app_code - APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME # JWT payload 中的 username + APIGW_MANAGER_DUMMY_GATEWAY_NAME # JWT 中的网关名 + APIGW_MANAGER_DUMMY_PAYLOAD_APP_CODE # JWT payload 中的 app_code + APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME # JWT payload 中的 username FAQ --- diff --git a/sdks/apigw-manager/demo/views.py b/sdks/apigw-manager/demo/views.py index f811b413..c5bfc91f 100644 --- a/sdks/apigw-manager/demo/views.py +++ b/sdks/apigw-manager/demo/views.py @@ -18,7 +18,7 @@ def jwt_info(request): if jwt: data.update( { - "api_name": request.jwt.api_name, + "gateway_name": request.jwt.gateway_name, "payload": request.jwt.payload, } ) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/authentication.py b/sdks/apigw-manager/src/apigw_manager/apigw/authentication.py index 2b72de97..9c55978d 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/authentication.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/authentication.py @@ -54,10 +54,10 @@ def __init__(self, get_response): ) self.provider = jwt_provider_cls( jwt_key_name=self.JWT_KEY_NAME, - default_api_name=configuration.api_name, + default_gateway_name=configuration.gateway_name, algorithm=getattr(settings, "APIGW_JWT_ALGORITHM", self.ALGORITHM), allow_invalid_jwt_token=getattr(settings, "APIGW_ALLOW_INVALID_JWT_TOKEN", False), - public_key_provider=self.PUBLIC_KEY_PROVIDER_CLS(default_api_name=configuration.api_name), + public_key_provider=self.PUBLIC_KEY_PROVIDER_CLS(default_gateway_name=configuration.gateway_name), ) def __call__(self, request): @@ -111,12 +111,14 @@ class ApiGatewayJWTUserMiddleware: def __init__(self, get_response): self.get_response = get_response - def get_user(self, request, api_name=None, bk_username=None, verified=False, **credentials): - # 传递 api_name 参数的用途: + def get_user(self, request, gateway_name=None, bk_username=None, verified=False, **credentials): + # 传递 gateway_name 参数的用途: # 1. 来明确标识这个请求来自于网关 # 2. 用户已经过认证,后端无需再认证 # 3. 避免非预期调用激活对应后端使得用户认证被绕过 - return auth.authenticate(request, api_name=api_name, bk_username=bk_username, verified=verified, **credentials) + return auth.authenticate( + request, gateway_name=gateway_name, bk_username=bk_username, verified=verified, **credentials + ) def __call__(self, request): jwt_info = getattr(request, "jwt", None) @@ -130,7 +132,7 @@ def __call__(self, request): jwt_user = (jwt_info.payload.get("user") or {}).copy() jwt_user.setdefault("bk_username", jwt_user.pop("username", None)) - request.user = self.get_user(request, api_name=jwt_info.api_name, **jwt_user) + request.user = self.get_user(request, gateway_name=jwt_info.gateway_name, **jwt_user) return self.get_response(request) @@ -152,7 +154,7 @@ def make_anonymous_user(self, bk_username=None): user.username = bk_username # type: ignore return user - def authenticate(self, request, api_name, bk_username, verified, **credentials): + def authenticate(self, request, gateway_name, bk_username, verified, **credentials): if not verified: return self.make_anonymous_user(bk_username=bk_username) return self.user_maker(bk_username) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/command.py b/sdks/apigw-manager/src/apigw_manager/apigw/command.py index 9586cea9..5ddd0536 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/command.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/command.py @@ -27,7 +27,7 @@ class ApiCommand(BaseCommand): manager_class: typing.Callable def add_arguments(self, parser): - parser.add_argument("--gateway-name", "--api-name", dest="api_name", help="gateway name") + parser.add_argument("--gateway-name", "--api-name", dest="gateway_name", help="gateway name") parser.add_argument("--host", help="apigateway host with stage of admin api `bk-apigateway`") def get_configuration(self, **kwargs): diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/helper.py b/sdks/apigw-manager/src/apigw_manager/apigw/helper.py index 964fe854..a4697f53 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/helper.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/helper.py @@ -106,62 +106,62 @@ def set_value(self, key, value): class BasePublicKeyManager(ABC): @abstractmethod - def get(self, api_name, issuer=None): + def get(self, gateway_name, issuer=None): return "" @abstractmethod - def set(self, api_name, public_key, issuer=None): + def set(self, gateway_name, public_key, issuer=None): return False - def get_best_matched(self, api_name, issuer=None): - public_key = self.get(api_name, issuer) + def get_best_matched(self, gateway_name, issuer=None): + public_key = self.get(gateway_name, issuer) if public_key: return public_key if issuer: logger.warning( "please re-update %s public_key according to command fetch_apigw_public_key", - api_name, + gateway_name, ) - return self.get(api_name, issuer=None) + return self.get(gateway_name, issuer=None) def current(self): configuration = get_configuration() - return self.get(configuration.api_name) + return self.get(configuration.gateway_name) class PublicKeyManager(ContextManager, BasePublicKeyManager): scope = "public_key" - def get(self, api_name, issuer=None): - key = self._get_key(api_name, issuer) + def get(self, gateway_name, issuer=None): + key = self._get_key(gateway_name, issuer) return self.get_value(key, None) - def set(self, api_name, public_key, issuer=None): - key = self._get_key(api_name, issuer) + def set(self, gateway_name, public_key, issuer=None): + key = self._get_key(gateway_name, issuer) self.set_value(key, public_key) - def _get_key(self, api_name, issuer=None): + def _get_key(self, gateway_name, issuer=None): if issuer: - return "%s:%s" % (issuer, api_name) - return api_name + return "%s:%s" % (issuer, gateway_name) + return gateway_name class ReleaseVersionManager(ContextManager): scope = "release_version" - def increase(self, api_name): + def increase(self, gateway_name): current = 0 with atomic(): try: - current = int(self.get_value(api_name, "v0").strip("v")) + current = int(self.get_value(gateway_name, "v0").strip("v")) except Exception: pass version = "v%s" % str(current + 1) - self.set_value(api_name, version) + self.set_value(gateway_name, version) return version @@ -173,34 +173,34 @@ class ResourceSignatureManager(ContextManager): # 2. 其他明确需要发布的场景,比如同步接口时,发现有资源的增删 # 原则是,如果有涉及到需发布的变更,就要设置 dirty,发布后重置,尽可能避免漏发的情况 - def get(self, api_name): - value = self.get_value(api_name) + def get(self, gateway_name): + value = self.get_value(gateway_name) if not value: return {} return json.loads(value) - def set(self, api_name, is_dirty, signature): - self.set_value(api_name, json.dumps({"is_dirty": is_dirty, "signature": signature})) + def set(self, gateway_name, is_dirty, signature): + self.set_value(gateway_name, json.dumps({"is_dirty": is_dirty, "signature": signature})) - def get_signature(self, api_name): - saved = self.get(api_name) + def get_signature(self, gateway_name): + saved = self.get(gateway_name) return saved.get("signature", "") - def is_dirty(self, api_name, default=False): - saved = self.get(api_name) + def is_dirty(self, gateway_name, default=False): + saved = self.get(gateway_name) return saved.get("is_dirty", default) - def mark_dirty(self, api_name): - self.set(api_name, True, self.get_signature(api_name)) + def mark_dirty(self, gateway_name): + self.set(gateway_name, True, self.get_signature(gateway_name)) - def reset_dirty(self, api_name): - self.set(api_name, False, self.get_signature(api_name)) + def reset_dirty(self, gateway_name): + self.set(gateway_name, False, self.get_signature(gateway_name)) - def update_signature(self, api_name, signature): - saved = self.get(api_name) + def update_signature(self, gateway_name, signature): + saved = self.get(gateway_name) last_signature = saved.get("signature") - self.set(api_name, saved.get("is_dirty") or last_signature != signature, signature) + self.set(gateway_name, saved.get("is_dirty") or last_signature != signature, signature) def make_default_public_key_manager() -> BasePublicKeyManager: diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/k8s_helper.py b/sdks/apigw-manager/src/apigw_manager/apigw/k8s_helper.py index a3cb0a7c..b2c0edbe 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/k8s_helper.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/k8s_helper.py @@ -16,7 +16,7 @@ def __init__(self): config.load_incluster_config(configuration) self.client = CoreV1Api(api_client=api_client.ApiClient(configuration=configuration)) - def get(self, api_name, issuer=None): + def get(self, gateway_name, issuer=None): try: secret = self.client.read_namespaced_secret(self._get_name(issuer), self.namespace) except exceptions.ApiException as err: @@ -27,14 +27,14 @@ def get(self, api_name, issuer=None): public_keys = getattr(secret, "data", None) or {} - if api_name not in public_keys: + if gateway_name not in public_keys: return None - value = public_keys[api_name] + value = public_keys[gateway_name] return base64.b64decode(value).decode() - def set(self, api_name, public_key, issuer=None): + def set(self, gateway_name, public_key, issuer=None): name = self._get_name(issuer) secret = V1Secret( metadata=V1ObjectMeta( @@ -42,12 +42,13 @@ def set(self, api_name, public_key, issuer=None): namespace=self.namespace, annotations={ "bkgateway/issuer": issuer or "", - "bkgateway/api_name": api_name, + "bkgateway/gateway_name": gateway_name, + "bkgateway/api_name": gateway_name, }, ), kind="Secret", type="Opaque", - string_data={api_name: public_key}, + string_data={gateway_name: public_key}, ) try: diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/add_related_apps.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/add_related_apps.py index 75c27aae..227b2308 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/add_related_apps.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/add_related_apps.py @@ -28,4 +28,4 @@ def do(self, manager, definition, *args, **kwargs): print("warning!! Add related apps error, %s" % str(err)) return - print("Add related apps for gateway %s: %s" % (manager.config.api_name, ", ".join(definition))) + print("Add related apps for gateway %s: %s" % (manager.config.gateway_name, ", ".join(definition))) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/apply_apigw_permissions.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/apply_apigw_permissions.py index d7105be5..b3b59945 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/apply_apigw_permissions.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/apply_apigw_permissions.py @@ -27,16 +27,15 @@ def do(self, manager, definition, *args, **kwargs): if permission.get("gateway_name"): permission["api_name"] = permission.get("gateway_name") - grant_dimension = permission.pop("grant_dimension", "api") - if grant_dimension == "gateway": - grant_dimension = "api" + if permission.get("grant_dimension") in [None, "gateway"]: + permission["grant_dimension"] = "api" - result = manager.apply_permission(grant_dimension=grant_dimension, **permission) + result = manager.apply_permission(**permission) print( "Applied permissions for gateway %s, record %s, dimension %s" % ( permission["api_name"], result["record_id"], - grant_dimension, + permission["grant_dimension"], ) ) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py index 8214eee1..5cc87d97 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/create_version_and_release_apigw.py @@ -59,9 +59,9 @@ def _fix_defined_version(self, defined_version): return defined_version - def _should_create_resource_version(self, manager, api_name, defined_version, latest_version): + def _should_create_resource_version(self, manager, gateway_name, defined_version, latest_version): # 版本一致,且没有变更 - if latest_version and defined_version.public == latest_version.public and not manager.is_dirty(api_name): + if latest_version and defined_version.public == latest_version.public and not manager.is_dirty(gateway_name): return False return True @@ -101,13 +101,13 @@ def handle(self, stage, title, comment, generate_sdks, *args, **kwargs): releaser = self.Releaser(configuration) manager = self.ResourceSignatureManager() - api_name = configuration.api_name + gateway_name = configuration.gateway_name # 如何判断是否需要创建新版本? # 1. 使用配置中的版本号与线上最新版本进行比较,如果版本 public 部分不一致,则需要创建新版本 # 2. 如果配置中的版本号与线上最新版本 public 部分一致,为了避免开发者忘记更新版本号的情况,获取同步结果进行判断: # - 如果有资源变更,则需要创建新版本 - if self._should_create_resource_version(manager, api_name, fixed_defined_version, latest_version): + if self._should_create_resource_version(manager, gateway_name, fixed_defined_version, latest_version): exists = self._check_resource_version_exists(fetcher, fixed_defined_version) resource_version = self._create_resource_version( releaser=releaser, @@ -115,7 +115,7 @@ def handle(self, stage, title, comment, generate_sdks, *args, **kwargs): title=title or definition.get("title", ""), comment=comment or definition.get("comment", ""), ) - manager.reset_dirty(api_name) + manager.reset_dirty(gateway_name) else: generate_sdks = False diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_apigw_public_key.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_apigw_public_key.py index 2b095ac6..13abdb87 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_apigw_public_key.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_apigw_public_key.py @@ -36,4 +36,4 @@ def do(self, manager, configuration, print_, no_save, *args, **kwargs): return public_key_manager = helper.make_default_public_key_manager() - public_key_manager.set(configuration.api_name, result["public_key"], result.get("issuer")) + public_key_manager.set(configuration.gateway_name, result["public_key"], result.get("issuer")) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_esb_public_key.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_esb_public_key.py index 737c66b3..adb66c62 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_esb_public_key.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/fetch_esb_public_key.py @@ -15,6 +15,6 @@ class Command(BaseCommand): """Get the esb public key and store it into the database""" - def handle(self, api_name, *args, **kwargs): - for gateway_name in ["bk-esb", "apigw"]: - super(Command, self).handle(gateway_name, *args, **kwargs) + def handle(self, gateway_name, *args, **kwargs): + for _gateway_name in ["bk-esb", "apigw"]: + super(Command, self).handle(_gateway_name, *args, **kwargs) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/grant_apigw_permissions.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/grant_apigw_permissions.py index f2d9038f..68dfeb86 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/grant_apigw_permissions.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/grant_apigw_permissions.py @@ -24,17 +24,16 @@ def do(self, manager, definition, *args, **kwargs): for permission in definition: permission.setdefault("target_app_code", permission.pop("bk_app_code", None)) - grant_dimension = permission.pop("grant_dimension", "api") - if grant_dimension == "gateway": - grant_dimension = "api" + if permission.get("grant_dimension") in [None, "gateway"]: + permission["grant_dimension"] = "api" - manager.grant_permission(grant_dimension=grant_dimension, **permission) + manager.grant_permission(**permission) print( "Granted gateway %s permission for app code %s, dimension %s" % ( - manager.config.api_name, + manager.config.gateway_name, permission["target_app_code"], - grant_dimension, + permission["grant_dimension"], ) ) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/sync_apigw_resources.py b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/sync_apigw_resources.py index 79fd8510..0872f78f 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/sync_apigw_resources.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/management/commands/sync_apigw_resources.py @@ -30,15 +30,15 @@ def add_arguments(self, parser): help="delete extraneous resources from existing resources", ) - def update_signature(self, api_name, definition, added, deleted): + def _update_signature(self, gateway_name, definition, added, deleted): signature = hashlib.md5(json.dumps(definition, sort_keys=True).encode("utf-8")).hexdigest() manager = self.ResourceSignatureManager() - manager.update_signature(api_name, signature) + manager.update_signature(gateway_name, signature) # 管理端明确报告有资源的增删,可能有人工手动修改的原因,签名不一定能发现问题,所以需要显式标记 if added > 0 or deleted > 0: - manager.mark_dirty(api_name) + manager.mark_dirty(gateway_name) def do(self, manager, definition, configuration, *args, **kwargs): result = manager.sync_resources_config(content=definition, delete=kwargs["delete"]) @@ -52,4 +52,4 @@ def do(self, manager, definition, configuration, *args, **kwargs): % (added_count, updated_count, deleted_count) ) - self.update_signature(configuration.api_name, definition, added_count, deleted_count) + self._update_signature(configuration.gateway_name, definition, added_count, deleted_count) diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/providers.py b/sdks/apigw-manager/src/apigw_manager/apigw/providers.py index 53b4362c..9b166493 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/providers.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/providers.py @@ -34,19 +34,19 @@ class JWTTokenInvalid(Exception): class PublicKeyProvider(metaclass=abc.ABCMeta): - def __init__(self, default_api_name: str): - self.default_api_name = default_api_name + def __init__(self, default_gateway_name: str): + self.default_gateway_name = default_gateway_name @abc.abstractmethod - def provide(self, api_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: + def provide(self, gateway_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: """ - provide should return public key base on api_name and jwt_issuer and + provide should return public key base on gateway_name and jwt_issuer and return None when process error """ class SettingsPublicKeyProvider(PublicKeyProvider): - def provide(self, api_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: + def provide(self, gateway_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: """Return the public key specified by Settings""" public_key = getattr(settings, "APIGW_PUBLIC_KEY", None) if not public_key: @@ -71,8 +71,8 @@ class CachePublicKeyProvider(SettingsPublicKeyProvider): CACHE_NAME = "default" CACHE_VERSION = 0 - def __init__(self, default_api_name: str): - super().__init__(default_api_name) + def __init__(self, default_gateway_name: str): + super().__init__(default_gateway_name) self.cache_expires = getattr(settings, "APIGW_JWT_PUBLIC_KEY_CACHE_MINUTES", self.CACHE_MINUTES) * 60 self.cache_version = getattr(settings, "APIGW_JWT_PUBLIC_KEY_CACHE_VERSION", self.CACHE_VERSION) @@ -87,16 +87,16 @@ def __init__(self, default_api_name: str): else: self.cache = DummyCache(cache_name, params={}) - def provide(self, api_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: + def provide(self, gateway_name: str, jwt_issuer: Optional[str] = None) -> Optional[str]: """Get the specified public key from Context model, if not specified, return the default value""" - cache_key = "apigw:public_key:%s:%s" % (jwt_issuer or "", api_name) + cache_key = "apigw:public_key:%s:%s" % (jwt_issuer or "", gateway_name) cached_value = self.cache.get(cache_key) if cached_value: return cached_value - public_key = self.public_key_manager.get_best_matched(api_name or self.default_api_name, jwt_issuer) + public_key = self.public_key_manager.get_best_matched(gateway_name, jwt_issuer) if not public_key: - return super(CachePublicKeyProvider, self).provide(api_name, jwt_issuer) + return super(CachePublicKeyProvider, self).provide(gateway_name, jwt_issuer) self.cache.set(cache_key, public_key, self.cache_expires, self.cache_version) return public_key @@ -106,23 +106,25 @@ def provide(self, api_name: str, jwt_issuer: Optional[str] = None) -> Optional[s class DecodedJWT: - def __init__(self, api_name: str, payload: dict) -> None: - self.api_name = api_name + def __init__(self, gateway_name: str, payload: dict) -> None: + self.gateway_name = gateway_name self.payload = payload + # api_name 保留为保持兼容,其于 gateway_name 一致 + self.api_name = gateway_name class JWTProvider(metaclass=abc.ABCMeta): def __init__( self, jwt_key_name: str, - default_api_name: str, + default_gateway_name: str, algorithm: str, allow_invalid_jwt_token: bool, public_key_provider: PublicKeyProvider, **kwargs, ) -> None: self.jwt_key_name = jwt_key_name - self.default_api_name = default_api_name + self.default_gateway_name = default_gateway_name self.algorithm = algorithm self.allow_invalid_jwt_token = allow_invalid_jwt_token self.public_key_provider = public_key_provider @@ -130,7 +132,7 @@ def __init__( @abc.abstractmethod def provide(self, request: HttpRequest) -> Optional[DecodedJWT]: """ - provide should extract jwt from rquest and return a DecodedJWT + provide should extract jwt from request and return a DecodedJWT and return None when process error """ @@ -153,16 +155,16 @@ def provide(self, request: HttpRequest) -> Optional[DecodedJWT]: try: jwt_header = self._decode_jwt_header(jwt_token) - api_name = jwt_header.get("kid") or self.default_api_name - public_key = self.public_key_provider.provide(api_name, jwt_header.get("iss")) + gateway_name = jwt_header.get("kid") or self.default_gateway_name + public_key = self.public_key_provider.provide(gateway_name, jwt_header.get("iss")) if not public_key: - logger.warning("no public key found") + logger.warning("no public key found, gateway=%s, issuer=%s", gateway_name, jwt_header.get("iss")) return None algorithm = jwt_header.get("alg") or self.algorithm decoded = self._decode_jwt(jwt_token, public_key, algorithm) - return DecodedJWT(api_name=api_name, payload=decoded) + return DecodedJWT(gateway_name=gateway_name, payload=decoded) except jwt.PyJWTError as e: if not self.allow_invalid_jwt_token: @@ -173,8 +175,11 @@ def provide(self, request: HttpRequest) -> Optional[DecodedJWT]: class DummyEnvPayloadJWTProvider(JWTProvider): def provide(self, request: HttpRequest) -> DecodedJWT: + gateway_name = os.getenv("APIGW_MANAGER_DUMMY_GATEWAY_NAME", "") or os.getenv( + "APIGW_MANAGER_DUMMY_API_NAME", "" + ) return DecodedJWT( - api_name=os.getenv("APIGW_MANAGER_DUMMY_API_NAME", ""), + gateway_name=gateway_name, payload={ "app": {"app_code": os.getenv("APIGW_MANAGER_DUMMY_PAYLOAD_APP_CODE", "")}, "user": {"username": os.getenv("APIGW_MANAGER_DUMMY_PAYLOAD_USERNAME", "")}, diff --git a/sdks/apigw-manager/src/apigw_manager/apigw/utils.py b/sdks/apigw-manager/src/apigw_manager/apigw/utils.py index 9b58ce2a..d293bc35 100644 --- a/sdks/apigw-manager/src/apigw_manager/apigw/utils.py +++ b/sdks/apigw-manager/src/apigw_manager/apigw/utils.py @@ -22,7 +22,7 @@ def get_configuration(**kwargs): """Generate management configuration according to the settings""" settings_mappings = [ - ("BK_APIGW_NAME", "api_name"), + ("BK_APIGW_NAME", "gateway_name"), ("BK_APP_CODE", "bk_app_code"), ("BK_APP_SECRET", "bk_app_secret"), ("BK_APIGW_JWT_PROVIDER_CLS", "jwt_provider_cls"), @@ -55,8 +55,9 @@ def _get_host_from_settings(): tmpl = settings.get(SettingKeys.BK_API_URL_TMPL) if tmpl: - # API 网关 admin API 对应网关名为 bk-apigateway - return "%s/prod/" % tmpl.format(api_name="bk-apigateway").rstrip("/") + # API 网关 admin API 对应网关名为 bk-apigateway; + # 兼容 tmpl 中使用 gateway_name, api_name 两种场景 + return "%s/prod/" % tmpl.format(gateway_name="bk-apigateway", api_name="bk-apigateway").rstrip("/") return "" diff --git a/sdks/apigw-manager/src/apigw_manager/core/configuration.py b/sdks/apigw-manager/src/apigw_manager/core/configuration.py index 8a2e6b5a..a561a342 100644 --- a/sdks/apigw-manager/src/apigw_manager/core/configuration.py +++ b/sdks/apigw-manager/src/apigw_manager/core/configuration.py @@ -19,7 +19,7 @@ def __init__( stage=None, bk_app_code=None, bk_app_secret=None, - api_name=None, + gateway_name=None, api_cache=None, access_token=None, jwt_provider_cls=None, @@ -30,7 +30,7 @@ def __init__( self.stage = stage self.bk_app_code = bk_app_code self.bk_app_secret = bk_app_secret - self.api_name = api_name + self.gateway_name = gateway_name self.api_cache = api_cache self.access_token = access_token self.jwt_provider_cls = jwt_provider_cls diff --git a/sdks/apigw-manager/src/apigw_manager/core/handler.py b/sdks/apigw-manager/src/apigw_manager/core/handler.py index 9fc19593..5922cc48 100644 --- a/sdks/apigw-manager/src/apigw_manager/core/handler.py +++ b/sdks/apigw-manager/src/apigw_manager/core/handler.py @@ -61,7 +61,7 @@ def _put_into_cache(self, operation_id, data, result): def _call_with_cache(self, operation, **kwargs): """Call the API instance, allow data to be retrieved from the cache""" cache_key = { - "api_name": kwargs.get("api_name", self.config.api_name), + "gateway_name": kwargs.get("gateway_name", self.config.gateway_name), "kwargs": kwargs, } @@ -79,7 +79,7 @@ def _call_with_cache(self, operation, **kwargs): def _call(self, operation, files=None, **kwargs): """Call the API instance""" data = { - "path_params": {"api_name": kwargs.pop("api_name", self.config.api_name)}, + "path_params": {"api_name": kwargs.pop("gateway_name", self.config.gateway_name)}, "data": kwargs, "headers": { "X-Bkapi-Authorization": kwargs.pop("x_bkapi_authorization", self._get_bkapi_authorization()), diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py b/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py index a9e8334d..342c241a 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_apply_apigw_permissions.py @@ -23,7 +23,7 @@ def test_do(mock_manager, command, configuration): mock_manager, [ {"api_name": "test1"}, - {"api_name": "test2"}, + {"gateway_name": "test2"}, ], ) @@ -35,5 +35,6 @@ def test_do(mock_manager, command, configuration): mock_manager.apply_permission.assert_any_call( target_app_code=configuration.bk_app_code, api_name="test2", + gateway_name="test2", grant_dimension="api", ) diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_sync_apigw_resources.py b/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_sync_apigw_resources.py index 7492d844..f2ce3dbc 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_sync_apigw_resources.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/management/commands/test_sync_apigw_resources.py @@ -47,8 +47,8 @@ def test_do(mocker, configuration, command, manager, resource_signature_manager) content=definition, delete=True, ) - resource_signature_manager.update_signature.assert_called_once_with(configuration.api_name, mocker.ANY) - resource_signature_manager.mark_dirty.assert_called_once_with(configuration.api_name) + resource_signature_manager.update_signature.assert_called_once_with(configuration.gateway_name, mocker.ANY) + resource_signature_manager.mark_dirty.assert_called_once_with(configuration.gateway_name) @pytest.mark.parametrize( @@ -61,10 +61,10 @@ def test_do(mocker, configuration, command, manager, resource_signature_manager) ], ) def test_update_signature(mocker, command, configuration, resource_signature_manager, added, deleted, dirty): - command.update_signature(configuration.api_name, {}, added, deleted) - resource_signature_manager.update_signature(configuration.api_name, mocker.ANY) + command._update_signature(configuration.gateway_name, {}, added, deleted) + resource_signature_manager.update_signature(configuration.gateway_name, mocker.ANY) if dirty: - resource_signature_manager.mark_dirty.assert_called_once_with(configuration.api_name) + resource_signature_manager.mark_dirty.assert_called_once_with(configuration.gateway_name) else: resource_signature_manager.mark_clean.assert_not_called() diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_authentication.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_authentication.py index e9067ed8..c8483946 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_authentication.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_authentication.py @@ -60,9 +60,9 @@ def apigw_request(jwt_encoded, mock_request): @pytest.fixture() -def jwt_request(api_name, jwt_decoded, mock_request): +def jwt_request(fake_gateway_name, jwt_decoded, mock_request): mock_request.jwt = providers.DecodedJWT( - api_name=api_name, + gateway_name=fake_gateway_name, payload=jwt_decoded, ) @@ -80,12 +80,12 @@ def invalid_apigw_request(mock_request): class TestApiGatewayJWTMiddleware: @pytest.fixture(autouse=True) - def _setup_middleware(self, mock_response, api_name): + def _setup_middleware(self, mock_response, fake_gateway_name): self.middleware = authentication.ApiGatewayJWTMiddleware(mock_response) - def test_default_config(self, api_name, jwt_algorithm): + def test_default_config(self, fake_gateway_name, jwt_algorithm): assert isinstance(self.middleware.provider, DefaultJWTProvider) - assert self.middleware.provider.default_api_name == api_name + assert self.middleware.provider.default_gateway_name == fake_gateway_name assert self.middleware.provider.algorithm == jwt_algorithm assert self.middleware.provider.allow_invalid_jwt_token is False assert isinstance(self.middleware.provider.public_key_provider, SettingsPublicKeyProvider) @@ -106,7 +106,7 @@ def test_call_without_public_key(self, settings, apigw_request, mock_response): assert not hasattr(mock_request, "jwt") - def test_call(self, settings, public_key, apigw_request, mock_response, api_name): + def test_call(self, settings, public_key, apigw_request, mock_response, fake_gateway_name): assert self.middleware.JWT_KEY_NAME in apigw_request.META settings.APIGW_PUBLIC_KEY = public_key @@ -114,7 +114,8 @@ def test_call(self, settings, public_key, apigw_request, mock_response, api_name self.middleware(apigw_request) mock_response.assert_called_with(apigw_request) - assert apigw_request.jwt.api_name == api_name + assert apigw_request.jwt.gateway_name == fake_gateway_name + assert apigw_request.jwt.api_name == fake_gateway_name assert apigw_request._dont_enforce_csrf_checks def test_jwt_invalid(self, settings, public_key, invalid_apigw_request, mock_response): @@ -244,11 +245,11 @@ def _setup_backend(self, mocker): self.backend.user_maker = self.user_maker def test_authenticate_user(self, mock_request): - user = self.backend.authenticate(mock_request, api_name="test", bk_username="admin", verified=True) + user = self.backend.authenticate(mock_request, gateway_name="test", bk_username="admin", verified=True) assert not isinstance(user, AnonymousUser) self.user_maker.assert_called_with("admin") def test_authenticate_anonymou_user(self, mock_request): - user = self.backend.authenticate(mock_request, api_name="test", bk_username="admin", verified=False) + user = self.backend.authenticate(mock_request, gateway_name="test", bk_username="admin", verified=False) assert isinstance(user, AnonymousUser) self.user_maker.assert_not_called() diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_command.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_command.py index 40d3eee5..322507c6 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_command.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_command.py @@ -21,15 +21,15 @@ def _setup_command(self): def test_get_configuration(self, configuration): result = self.command.get_configuration() - assert configuration.api_name == result.api_name + assert configuration.gateway_name == result.gateway_name assert configuration.host == result.host def test_get_configuration_with_args(self, faker): - api_name = faker.color + gateway_name = faker.color host = faker.url() - result = self.command.get_configuration(api_name=api_name, host=host) + result = self.command.get_configuration(gateway_name=gateway_name, host=host) - assert api_name == result.api_name + assert gateway_name == result.gateway_name assert host.startswith(result.host) diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_helper.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_helper.py index 81e37063..355955a7 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_helper.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_helper.py @@ -104,33 +104,33 @@ class TestPublicKeyManager: def _setup_manager(self): self.manager = PublicKeyManager() - def test_get_not_found(self, api_name): - assert self.manager.get(api_name) is None + def test_get_not_found(self, fake_gateway_name): + assert self.manager.get(fake_gateway_name) is None - def test_get(self, api_name, faker): + def test_get(self, fake_gateway_name, faker): context = Context.objects.create( scope=self.manager.scope, - key=api_name, + key=fake_gateway_name, value=faker.pystr(), ) - assert self.manager.get(api_name) == context.value + assert self.manager.get(fake_gateway_name) == context.value def test_best_matched(self, faker): jwt_issuer = faker.pystr() - api_name = faker.pystr() + gateway_name = faker.pystr() context1 = Context.objects.create( - key="%s:%s" % (jwt_issuer, api_name), scope=self.manager.scope, value=faker.pystr() + key="%s:%s" % (jwt_issuer, gateway_name), scope=self.manager.scope, value=faker.pystr() ) - context2 = Context.objects.create(key=api_name, scope=self.manager.scope, value=faker.pystr()) + context2 = Context.objects.create(key=gateway_name, scope=self.manager.scope, value=faker.pystr()) - public_key = self.manager.get_best_matched(api_name) + public_key = self.manager.get_best_matched(gateway_name) assert public_key == context2.value - public_key = self.manager.get_best_matched(api_name, jwt_issuer) + public_key = self.manager.get_best_matched(gateway_name, jwt_issuer) assert public_key == context1.value - public_key = self.manager.get_best_matched(api_name, "not-exist") + public_key = self.manager.get_best_matched(gateway_name, "not-exist") assert public_key == context2.value public_key = self.manager.get_best_matched("not-exist") @@ -139,19 +139,19 @@ def test_best_matched(self, faker): public_key = self.manager.get_best_matched("not-exist", jwt_issuer) assert public_key is None - def test_set(self, api_name, faker): - self.manager.set(api_name, faker.pystr()) - self.manager.set(api_name, faker.pystr()) - self.manager.set(api_name, faker.pystr(), faker.pystr()) + def test_set(self, fake_gateway_name, faker): + self.manager.set(fake_gateway_name, faker.pystr()) + self.manager.set(fake_gateway_name, faker.pystr()) + self.manager.set(fake_gateway_name, faker.pystr(), faker.pystr()) def test_get_key(self): assert self.manager._get_key("foo") == "foo" assert self.manager._get_key("foo", "bar") == "bar:foo" - def test_current(self, api_name, faker): + def test_current(self, fake_gateway_name, faker): context = Context.objects.create( scope=self.manager.scope, - key=api_name, + key=fake_gateway_name, value=faker.pystr(), ) @@ -164,10 +164,10 @@ def _setup_manager(self): self.manager = ReleaseVersionManager() def test_increase(self, faker): - api_name = faker.pystr() + gateway_name = faker.pystr() for excepted in ["v1", "v2", "v3"]: - assert self.manager.increase(api_name) == excepted + assert self.manager.increase(gateway_name) == excepted class TestResourceSignatureManager: @@ -179,9 +179,9 @@ def test_get_not_found(self, faker): assert self.manager.get(faker.pystr()) == {} def test_get(self, faker): - api_name = faker.pystr() - self.manager.set(api_name, False, "signature") - assert self.manager.get(api_name) == { + gateway_name = faker.pystr() + self.manager.set(gateway_name, False, "signature") + assert self.manager.get(gateway_name) == { "is_dirty": False, "signature": "signature", } @@ -190,47 +190,47 @@ def test_get_signature_default(self, faker): assert self.manager.get_signature(faker.pystr()) == "" def test_get_signature(self, faker): - api_name = faker.pystr() - self.manager.set(api_name, False, "signature") - assert self.manager.get_signature(api_name) == "signature" + gateway_name = faker.pystr() + self.manager.set(gateway_name, False, "signature") + assert self.manager.get_signature(gateway_name) == "signature" @pytest.mark.parametrize( "is_dirty", [True, False], ) def test_is_dirty(self, faker, is_dirty): - api_name = faker.pystr() - self.manager.set(api_name, is_dirty, "signature") - assert self.manager.is_dirty(api_name) == is_dirty + gateway_name = faker.pystr() + self.manager.set(gateway_name, is_dirty, "signature") + assert self.manager.is_dirty(gateway_name) == is_dirty @pytest.mark.parametrize( "is_dirty", [True, False], ) def test_is_dirty_default(self, faker, is_dirty): - api_name = faker.pystr() - assert self.manager.is_dirty(api_name, is_dirty) == is_dirty + gateway_name = faker.pystr() + assert self.manager.is_dirty(gateway_name, is_dirty) == is_dirty def test_mark_dirty(self, faker): - api_name = faker.pystr() - self.manager.mark_dirty(api_name) - assert self.manager.get(api_name) == { + gateway_name = faker.pystr() + self.manager.mark_dirty(gateway_name) + assert self.manager.get(gateway_name) == { "is_dirty": True, "signature": "", } def test_reset_dirty(self, faker): - api_name = faker.pystr() - self.manager.reset_dirty(api_name) - assert self.manager.get(api_name) == { + gateway_name = faker.pystr() + self.manager.reset_dirty(gateway_name) + assert self.manager.get(gateway_name) == { "is_dirty": False, "signature": "", } def test_update_signature_at_first_time(self, faker): - api_name = faker.pystr() - self.manager.update_signature(api_name, "signature") - assert self.manager.get(api_name) == { + gateway_name = faker.pystr() + self.manager.update_signature(gateway_name, "signature") + assert self.manager.get(gateway_name) == { "is_dirty": True, "signature": "signature", } @@ -240,21 +240,21 @@ def test_update_signature_at_first_time(self, faker): [True, False], ) def test_update_signature_not_change(self, faker, is_dirty): - api_name = faker.pystr() - self.manager.set(api_name, is_dirty, "signature") + gateway_name = faker.pystr() + self.manager.set(gateway_name, is_dirty, "signature") - self.manager.update_signature(api_name, "signature") - assert self.manager.get(api_name) == { + self.manager.update_signature(gateway_name, "signature") + assert self.manager.get(gateway_name) == { "is_dirty": is_dirty, "signature": "signature", } def test_update_signature_changed(self, faker): - api_name = faker.pystr() - self.manager.set(api_name, False, "") + gateway_name = faker.pystr() + self.manager.set(gateway_name, False, "") - self.manager.update_signature(api_name, "signature") - assert self.manager.get(api_name) == { + self.manager.update_signature(gateway_name, "signature") + assert self.manager.get(gateway_name) == { "is_dirty": True, "signature": "signature", } diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_k8s_helper.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_k8s_helper.py index cf652585..157f5d86 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_k8s_helper.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_k8s_helper.py @@ -12,14 +12,14 @@ def public_key(faker): @pytest.fixture() -def public_key_secret(api_name, public_key): +def public_key_secret(fake_gateway_name, public_key): return V1Secret( metadata=V1ObjectMeta( name="bk-apigateway-public-key", namespace="bk-apigateway", ), data={ - api_name: base64.b64encode(public_key.encode()).decode(), + fake_gateway_name: base64.b64encode(public_key.encode()).decode(), }, ) @@ -36,28 +36,28 @@ def _setup_manager(self, issuer, mocker, settings, public_key_secret): self.manager = SecretPublicKeyManager() self.k8s_client = mocker.patch.object(self.manager, "client") - def test_get_secret_not_exists(self, issuer, api_name): + def test_get_secret_not_exists(self, issuer, fake_gateway_name): self.k8s_client.read_namespaced_secret.side_effect = exceptions.ApiException(404) - assert self.manager.get(api_name, issuer) is None + assert self.manager.get(fake_gateway_name, issuer) is None def test_get_public_key_not_found(self, issuer, public_key_secret): self.k8s_client.read_namespaced_secret.return_value = public_key_secret assert self.manager.get("not-found", issuer) is None - def test_get(self, issuer, api_name, public_key_secret): + def test_get(self, issuer, fake_gateway_name, public_key_secret): self.k8s_client.read_namespaced_secret.return_value = public_key_secret - assert self.manager.get(api_name, issuer) + assert self.manager.get(fake_gateway_name, issuer) - def test_set_for_create(self, issuer, api_name, public_key): + def test_set_for_create(self, issuer, fake_gateway_name, public_key): self.k8s_client.patch_namespaced_secret.side_effect = exceptions.ApiException(404) - self.manager.set(api_name, public_key, issuer) + self.manager.set(fake_gateway_name, public_key, issuer) assert self.k8s_client.patch_namespaced_secret.call_count == 1 assert self.k8s_client.create_namespaced_secret.call_count == 1 - def test_set_for_update(self, issuer, api_name, public_key): + def test_set_for_update(self, issuer, fake_gateway_name, public_key): self.k8s_client.patch_namespaced_secret.return_value = public_key_secret - self.manager.set(api_name, public_key, issuer) + self.manager.set(fake_gateway_name, public_key, issuer) assert self.k8s_client.patch_namespaced_secret.call_count == 1 assert self.k8s_client.create_namespaced_secret.call_count == 0 diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_providers.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_providers.py index 1d72d14b..a401e622 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_providers.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_providers.py @@ -39,58 +39,58 @@ class TestSettingsPublicKeyProvider: def _setup_provider(self): self.provider = SettingsPublicKeyProvider("testing") - def test_default_api_name(self): - assert self.provider.default_api_name == "testing" + def test_default_gateway_name(self): + assert self.provider.default_gateway_name == "testing" - def test_provide_public_key_not_set(self, settings, api_name): + def test_provide_public_key_not_set(self, settings, fake_gateway_name): assert not hasattr(settings, "APIGW_PUBLIC_KEY") - assert self.provider.provide(api_name) is None + assert self.provider.provide(fake_gateway_name) is None - def test_provide(self, settings, api_name, public_key): + def test_provide(self, settings, fake_gateway_name, public_key): settings.APIGW_PUBLIC_KEY = public_key - assert self.provider.provide(api_name) == public_key + assert self.provider.provide(fake_gateway_name) == public_key class TestCachePublicKeyProvider: - def test_default_api_name(self): + def test_default_gateway_name(self): provider = CachePublicKeyProvider("testing") - assert provider.default_api_name == "testing" + assert provider.default_gateway_name == "testing" - def test_provide_from_cache(self, api_name, django_jwt_cache): + def test_provide_from_cache(self, fake_gateway_name, django_jwt_cache): jwt_issuer = "blueking" def side_effect(key): data = { - "apigw:public_key::%s" % api_name: "testing-01", - "apigw:public_key:%s:%s" % (jwt_issuer, api_name): "testing-02", + "apigw:public_key::%s" % fake_gateway_name: "testing-01", + "apigw:public_key:%s:%s" % (jwt_issuer, fake_gateway_name): "testing-02", } return data[key] django_jwt_cache.get.side_effect = side_effect provider = CachePublicKeyProvider("testing") - assert provider.provide(api_name) == "testing-01" - assert provider.provide(api_name, jwt_issuer) == "testing-02" + assert provider.provide(fake_gateway_name) == "testing-01" + assert provider.provide(fake_gateway_name, jwt_issuer) == "testing-02" - def test_provide_cache_missed(self, api_name, django_jwt_cache, public_key_in_db): + def test_provide_cache_missed(self, fake_gateway_name, django_jwt_cache, public_key_in_db): django_jwt_cache.get.return_value = None provider = CachePublicKeyProvider("testing") - public_key = provider.provide(api_name) + public_key = provider.provide(fake_gateway_name) assert public_key == public_key_in_db django_jwt_cache.set.assert_called_with( - "apigw:public_key::%s" % api_name, + "apigw:public_key::%s" % fake_gateway_name, public_key_in_db, provider.cache_expires, provider.cache_version, ) - public_key = provider.provide(api_name, "not-exist") + public_key = provider.provide(fake_gateway_name, "not-exist") assert public_key == public_key_in_db django_jwt_cache.set.assert_called_with( - "apigw:public_key:not-exist:%s" % api_name, + "apigw:public_key:not-exist:%s" % fake_gateway_name, public_key_in_db, provider.cache_expires, provider.cache_version, @@ -126,8 +126,9 @@ def test_public_key_not_found(self, public_key_provider, provider, jwt_request): public_key_provider.provide.return_value = None assert provider.provide(jwt_request) is None - def test_provide(self, provider, jwt_request, api_name, jwt_decoded): + def test_provide(self, provider, jwt_request, fake_gateway_name, jwt_decoded): decoded = provider.provide(jwt_request) - assert decoded.api_name == api_name + assert decoded.gateway_name == fake_gateway_name + assert decoded.api_name == fake_gateway_name assert decoded.payload == jwt_decoded diff --git a/sdks/apigw-manager/tests/apigw_manager/apigw/test_utils.py b/sdks/apigw-manager/tests/apigw_manager/apigw/test_utils.py index e1c1073d..ed1c1f3c 100644 --- a/sdks/apigw-manager/tests/apigw_manager/apigw/test_utils.py +++ b/sdks/apigw-manager/tests/apigw_manager/apigw/test_utils.py @@ -26,12 +26,12 @@ def test_app_code(self, settings, faker): assert configuration.bk_app_code == settings.BK_APP_CODE - def test_api_name(self, settings, faker): + def test_gateway_name(self, settings, faker): settings.BK_APIGW_NAME = faker.color() configuration = get_configuration() - assert configuration.api_name == settings.BK_APIGW_NAME + assert configuration.gateway_name == settings.BK_APIGW_NAME def test_app_secret(self, settings, faker): settings.BK_APP_SECRET = faker.color() diff --git a/sdks/apigw-manager/tests/apigw_manager/core/conftest.py b/sdks/apigw-manager/tests/apigw_manager/core/conftest.py index c2857338..01fbf0fa 100644 --- a/sdks/apigw-manager/tests/apigw_manager/core/conftest.py +++ b/sdks/apigw-manager/tests/apigw_manager/core/conftest.py @@ -32,12 +32,6 @@ def bk_app_secret(faker: Faker, config: configuration.Configuration): return config.bk_app_secret -@pytest.fixture() -def api_name(faker: Faker, config: configuration.Configuration): - config.api_name = faker.color - return config.api_name - - @pytest.fixture() def api_cache(mocker: MockerFixture, config: configuration.Configuration): config.api_cache = mocker.MagicMock() diff --git a/sdks/apigw-manager/tests/apigw_manager/core/test_hander.py b/sdks/apigw-manager/tests/apigw_manager/core/test_hander.py index e434d3fa..e50af93f 100644 --- a/sdks/apigw-manager/tests/apigw_manager/core/test_hander.py +++ b/sdks/apigw-manager/tests/apigw_manager/core/test_hander.py @@ -73,17 +73,17 @@ def test_call_with_cache(self, handler: Handler, operation, operation_id, faker, mock_get_from_cache = mocker.patch.object(Handler, "_get_from_cache", return_value=(False, None)) mock_put_into_cache = mocker.patch.object(Handler, "_put_into_cache", return_value=None) - api_name = faker.pystr() + gateway_name = faker.pystr() kwargs = { - "api_name": api_name, + "gateway_name": gateway_name, "foo": "bar", } handler._call_with_cache(operation, **kwargs) cache_key = { - "api_name": api_name, - "kwargs": {"api_name": api_name, "foo": "bar"}, + "gateway_name": gateway_name, + "kwargs": {"gateway_name": gateway_name, "foo": "bar"}, } mock_get_from_cache.assert_called_once_with(operation_id, cache_key) mock_put_into_cache.assert_called_once_with(operation_id, cache_key, result) diff --git a/sdks/apigw-manager/tests/conftest.py b/sdks/apigw-manager/tests/conftest.py index 132b768f..8fee742d 100644 --- a/sdks/apigw-manager/tests/conftest.py +++ b/sdks/apigw-manager/tests/conftest.py @@ -24,10 +24,10 @@ def _mark_django_db(db): @pytest.fixture() -def api_name(settings, faker): - api_name = faker.pystr() - settings.BK_APIGW_NAME = api_name - return api_name +def fake_gateway_name(settings, faker): + gateway_name = faker.pystr() + settings.BK_APIGW_NAME = gateway_name + return gateway_name @pytest.fixture() @@ -65,11 +65,11 @@ def public_key(): @pytest.fixture() -def public_key_context(api_name, public_key): +def public_key_context(fake_gateway_name, public_key): from apigw_manager.apigw.models import Context context, _ = Context.objects.update_or_create( - key=api_name, + key=fake_gateway_name, scope="public_key", defaults={ "value": public_key, @@ -118,8 +118,8 @@ def jwt_decoded(jwt_app, jwt_user): @pytest.fixture() -def jwt_header(api_name, jwt_algorithm): - return {"alg": jwt_algorithm, "kid": api_name, "typ": "JWT"} +def jwt_header(fake_gateway_name, jwt_algorithm): + return {"alg": jwt_algorithm, "kid": fake_gateway_name, "typ": "JWT"} @pytest.fixture() diff --git a/sdks/apigw-manager/tests/demo/test_views.py b/sdks/apigw-manager/tests/demo/test_views.py index 76cb70b7..4524797e 100644 --- a/sdks/apigw-manager/tests/demo/test_views.py +++ b/sdks/apigw-manager/tests/demo/test_views.py @@ -32,11 +32,11 @@ def user_object(jwt_user, faker): return user_model.objects.create_user(username=jwt_user["username"], password=faker.color_name()) -def test_jwt_info(csrf_client: Client, jwt_headers: dict, jwt_decoded: dict, api_name): +def test_jwt_info(csrf_client: Client, jwt_headers: dict, jwt_decoded: dict, fake_gateway_name): response = csrf_client.post("/test/jwt", **jwt_headers) result = response.json() - assert result["api_name"] == api_name + assert result["gateway_name"] == fake_gateway_name assert result["payload"] == jwt_decoded diff --git a/sdks/bkapi-client-core/CHANGE.md b/sdks/bkapi-client-core/CHANGE.md index c3f7a756..e3aa2e8e 100644 --- a/sdks/bkapi-client-core/CHANGE.md +++ b/sdks/bkapi-client-core/CHANGE.md @@ -1,5 +1,9 @@ ## Change logs +## 1.2.1 +- BK_API_URL_TMPL 支持变量名 gateway_name,如 http://{gateway_name}.example.com +- APIGatewayClient 支持使用 _gateway_name 表示网关名 + ## 1.2.0 - BK_API_CLIENT_ENABLE_SSL_VERIFY 默认值设置为 False - Client 添加辅助方法:check_response_apigateway_error diff --git a/sdks/bkapi-client-core/Makefile b/sdks/bkapi-client-core/Makefile index c65b1747..593104af 100644 --- a/sdks/bkapi-client-core/Makefile +++ b/sdks/bkapi-client-core/Makefile @@ -18,14 +18,11 @@ bkapi_client_core/__init__.py: pyproject.toml .PHONY: version version: bkapi_client_core/__init__.py -requirements.txt: poetry.lock +.PHONY: requirements +requirements: poetry.lock poetry export -f requirements.txt --without-hashes | grep -v "index-url" > requirements.txt - -requirements_dev.txt: requirements.txt poetry export -f requirements.txt --without-hashes --with dev | grep -v "index-url" > requirements_dev.txt - -requirements_tox.txt: requirements_dev.txt - grep -E 'pytest|mock|django|prometheus-client' requirements_dev.txt > requirements_tox.txt + poetry export -f requirements.txt --without-hashes --with dev | grep -v "index-url" > requirements_tox.txt .PHONY: isort isort: diff --git a/sdks/bkapi-client-core/README.md b/sdks/bkapi-client-core/README.md index 70c8abb3..db46d9fa 100644 --- a/sdks/bkapi-client-core/README.md +++ b/sdks/bkapi-client-core/README.md @@ -105,17 +105,17 @@ with client: ## SDK 配置说明 SDK 支持通过配置更改一些默认的行为,Django settings 配置优先级高于环境变量。 -| 变量名 | 描述 | 类型 | 格式 | 默认值 | Django 配置 | 环境变量 | 别名 | -| ------------------------------------ | -------------------------------------- | ------ | --------------------------------- | -------------------------- | ----------- | -------- | ----------------- | -| BK_APP_CODE | 应用代号 | string | `"my_app"` | | 支持 | 支持 | BKPAAS_APP_ID | -| BK_APP_SECRET | 应用密钥 | string | `"my_secret"` | | 支持 | 支持 | BKPAAS_APP_SECRET | -| DEFAULT_STAGE_MAPPINGS | 指定对应网关的默认环境 | dict | `{"my_gateway": "prod"}` | | 支持 | | | -| BK_API_CLIENT_ENABLE_SSL_VERIFY | 是否开启 SSL 证书验证 | bool | `True` | `False` | 支持 | | | -| BK_API_AUTHORIZATION_COOKIES_MAPPING | 指定 Cookie 和认证参数的映射关系 | dict | `{"key": "cookie"}` | `{"bk_token": "bk_token"}` | 支持 | | | -| BK_API_URL_TMPL | 网关地址模板,支持 `{api_name}` 占位符 | string | `"http://{api_name}.example.com"` | | 支持 | 支持 | | -| BK_COMPONENT_API_URL | 组件 API 网关地址 | string | `"http://esb.example.com"` | | 支持 | 支持 | | -| DEFAULT_BK_API_VER | 默认组件版本号 | string | `"v1"` | `"v2"` | 支持 | 支持 | | -| BK_API_USE_TEST_ENV | 是否使用组件测试环境 | bool | `False` | `False` | 支持 | | | +| 变量名 | 描述 | 类型 | 格式 | 默认值 | Django 配置 | 环境变量 | 别名 | +| ------------------------------------ | -------------------------------------------------------- | ------ | -------------------------------------------------------------------- | -------------------------- | ----------- | -------- | ----------------- | +| BK_APP_CODE | 应用代号 | string | `"my_app"` | | 支持 | 支持 | BKPAAS_APP_ID | +| BK_APP_SECRET | 应用密钥 | string | `"my_secret"` | | 支持 | 支持 | BKPAAS_APP_SECRET | +| DEFAULT_STAGE_MAPPINGS | 指定对应网关的默认环境 | dict | `{"my_gateway": "prod"}` | | 支持 | | | +| BK_API_CLIENT_ENABLE_SSL_VERIFY | 是否开启 SSL 证书验证 | bool | `True` | `False` | 支持 | | | +| BK_API_AUTHORIZATION_COOKIES_MAPPING | 指定 Cookie 和认证参数的映射关系 | dict | `{"key": "cookie"}` | `{"bk_token": "bk_token"}` | 支持 | | | +| BK_API_URL_TMPL | 网关地址模板,支持 `{gateway_name}`, `{api_name}` 占位符 | string | `http://{gateway_name}.example.com`, `http://{api_name}.example.com` | | 支持 | 支持 | | +| BK_COMPONENT_API_URL | 组件 API 网关地址 | string | `"http://esb.example.com"` | | 支持 | 支持 | | +| DEFAULT_BK_API_VER | 默认组件版本号 | string | `"v1"` | `"v2"` | 支持 | 支持 | | +| BK_API_USE_TEST_ENV | 是否使用组件测试环境 | bool | `False` | `False` | 支持 | | | ## 模型 diff --git a/sdks/bkapi-client-core/bkapi_client_core/__init__.py b/sdks/bkapi-client-core/bkapi_client_core/__init__.py index d17d264b..5bb3dbdb 100644 --- a/sdks/bkapi-client-core/bkapi_client_core/__init__.py +++ b/sdks/bkapi-client-core/bkapi_client_core/__init__.py @@ -8,4 +8,4 @@ * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. """ -__version__ = "1.2.0" +__version__ = "1.2.1" diff --git a/sdks/bkapi-client-core/bkapi_client_core/apigateway/client.py b/sdks/bkapi-client-core/bkapi_client_core/apigateway/client.py index c77421d9..1f36c747 100644 --- a/sdks/bkapi-client-core/bkapi_client_core/apigateway/client.py +++ b/sdks/bkapi-client-core/bkapi_client_core/apigateway/client.py @@ -18,6 +18,8 @@ class APIGatewayClient(BaseClient): _default_stage = "prod" + _gateway_name = "" + # _api_name 为兼容逻辑,推荐使用 _gateway_name _api_name = "" name = "bkapi" @@ -32,7 +34,7 @@ def __init__( self._stage = stage else: stage_mappings = settings.get(SettingKeys.DEFAULT_STAGE_MAPPINGS) or {} - self._stage = stage_mappings.get(self._api_name, self._default_stage) + self._stage = stage_mappings.get(self._get_gateway_name(), self._default_stage) # The path of the APIGateway API contains stage name, # so, add it to endpoint as a path variable, in order to switch stage @@ -41,12 +43,18 @@ def __init__( super(APIGatewayClient, self).__init__( endpoint=endpoint, session=session, - name=self._api_name, + name=self._get_gateway_name(), ) def _get_endpoint(self): # type: (...) -> str - # In order to prevent `api_name`, `stage_name` from conflicting with other path variables, + # In order to prevent `gateway_name`, `api_name`, `stage_name` from conflicting with other path variables, # render the endpoint first. - return self._endpoint.format(api_name=self._api_name, stage_name=self._stage) + gateway_name = self._get_gateway_name() + # 兼容 endpoint 中包含 gateway_name,api_name + return self._endpoint.format(gateway_name=gateway_name, api_name=gateway_name, stage_name=self._stage) + + def _get_gateway_name(self): + # type: (...) -> str + return self._gateway_name or self._api_name diff --git a/sdks/bkapi-client-core/class_diagram.md b/sdks/bkapi-client-core/class_diagram.md index bba01553..dcc18db9 100644 --- a/sdks/bkapi-client-core/class_diagram.md +++ b/sdks/bkapi-client-core/class_diagram.md @@ -52,7 +52,7 @@ ManagerProtocol <|.. BaseClient class APIGatewayClient { _default_stage - _api_name + _gateway_name } BaseClient <|-- APIGatewayClient diff --git a/sdks/bkapi-client-core/demo/client.py b/sdks/bkapi-client-core/demo/client.py index 23d805c4..60c8ccd4 100644 --- a/sdks/bkapi-client-core/demo/client.py +++ b/sdks/bkapi-client-core/demo/client.py @@ -16,6 +16,6 @@ class Group(OperationGroup): class Client(APIGatewayClient): - _api_name = "test" + _gateway_name = "test" api = bind_property(Group) diff --git a/sdks/bkapi-client-core/poetry.lock b/sdks/bkapi-client-core/poetry.lock index 1b75e078..e8ea0340 100644 --- a/sdks/bkapi-client-core/poetry.lock +++ b/sdks/bkapi-client-core/poetry.lock @@ -1,76 +1,13 @@ # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] -name = "aiohttp" -version = "3.7.4.post0" -description = "Async http client/server framework (asyncio)" +name = "atomicwrites" +version = "1.4.1" +description = "Atomic file writes." optional = false -python-versions = ">=3.6" -files = [ - {file = "aiohttp-3.7.4.post0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:3cf75f7cdc2397ed4442594b935a11ed5569961333d49b7539ea741be2cc79d5"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:4b302b45040890cea949ad092479e01ba25911a15e648429c7c5aae9650c67a8"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:fe60131d21b31fd1a14bd43e6bb88256f69dfc3188b3a89d736d6c71ed43ec95"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:393f389841e8f2dfc86f774ad22f00923fdee66d238af89b70ea314c4aefd290"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:c6e9dcb4cb338d91a73f178d866d051efe7c62a7166653a91e7d9fb18274058f"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:5df68496d19f849921f05f14f31bd6ef53ad4b00245da3195048c69934521809"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:0563c1b3826945eecd62186f3f5c7d31abb7391fedc893b7e2b26303b5a9f3fe"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-win32.whl", hash = "sha256:3d78619672183be860b96ed96f533046ec97ca067fd46ac1f6a09cd9b7484287"}, - {file = "aiohttp-3.7.4.post0-cp36-cp36m-win_amd64.whl", hash = "sha256:f705e12750171c0ab4ef2a3c76b9a4024a62c4103e3a55dd6f99265b9bc6fcfc"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:230a8f7e24298dea47659251abc0fd8b3c4e38a664c59d4b89cca7f6c09c9e87"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2e19413bf84934d651344783c9f5e22dee452e251cfd220ebadbed2d9931dbf0"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:e4b2b334e68b18ac9817d828ba44d8fcb391f6acb398bcc5062b14b2cbeac970"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:d012ad7911653a906425d8473a1465caa9f8dea7fcf07b6d870397b774ea7c0f"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:40eced07f07a9e60e825554a31f923e8d3997cfc7fb31dbc1328c70826e04cde"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:209b4a8ee987eccc91e2bd3ac36adee0e53a5970b8ac52c273f7f8fd4872c94c"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:14762875b22d0055f05d12abc7f7d61d5fd4fe4642ce1a249abdf8c700bf1fd8"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-win32.whl", hash = "sha256:7615dab56bb07bff74bc865307aeb89a8bfd9941d2ef9d817b9436da3a0ea54f"}, - {file = "aiohttp-3.7.4.post0-cp37-cp37m-win_amd64.whl", hash = "sha256:d9e13b33afd39ddeb377eff2c1c4f00544e191e1d1dee5b6c51ddee8ea6f0cf5"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:547da6cacac20666422d4882cfcd51298d45f7ccb60a04ec27424d2f36ba3eaf"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:af9aa9ef5ba1fd5b8c948bb11f44891968ab30356d65fd0cc6707d989cd521df"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:64322071e046020e8797117b3658b9c2f80e3267daec409b350b6a7a05041213"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:bb437315738aa441251214dad17428cafda9cdc9729499f1d6001748e1d432f4"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:e54962802d4b8b18b6207d4a927032826af39395a3bd9196a5af43fc4e60b009"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:a00bb73540af068ca7390e636c01cbc4f644961896fa9363154ff43fd37af2f5"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:79ebfc238612123a713a457d92afb4096e2148be17df6c50fb9bf7a81c2f8013"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-win32.whl", hash = "sha256:515dfef7f869a0feb2afee66b957cc7bbe9ad0cdee45aec7fdc623f4ecd4fb16"}, - {file = "aiohttp-3.7.4.post0-cp38-cp38-win_amd64.whl", hash = "sha256:114b281e4d68302a324dd33abb04778e8557d88947875cbf4e842c2c01a030c5"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:7b18b97cf8ee5452fa5f4e3af95d01d84d86d32c5e2bfa260cf041749d66360b"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:15492a6368d985b76a2a5fdd2166cddfea5d24e69eefed4630cbaae5c81d89bd"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:bdb230b4943891321e06fc7def63c7aace16095be7d9cf3b1e01be2f10fba439"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:cffe3ab27871bc3ea47df5d8f7013945712c46a3cc5a95b6bee15887f1675c22"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:f881853d2643a29e643609da57b96d5f9c9b93f62429dcc1cbb413c7d07f0e1a"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:a5ca29ee66f8343ed336816c553e82d6cade48a3ad702b9ffa6125d187e2dedb"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:17c073de315745a1510393a96e680d20af8e67e324f70b42accbd4cb3315c9fb"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-win32.whl", hash = "sha256:932bb1ea39a54e9ea27fc9232163059a0b8855256f4052e776357ad9add6f1c9"}, - {file = "aiohttp-3.7.4.post0-cp39-cp39-win_amd64.whl", hash = "sha256:02f46fc0e3c5ac58b80d4d56eb0a7c7d97fcef69ace9326289fb9f1955e65cfe"}, - {file = "aiohttp-3.7.4.post0.tar.gz", hash = "sha256:493d3299ebe5f5a7c66b9819eacdcfbbaaf1a8e84911ddffcdc48888497afecf"}, -] - -[package.dependencies] -async-timeout = ">=3.0,<4.0" -attrs = ">=17.3.0" -chardet = ">=2.0,<5.0" -multidict = ">=4.5,<7.0" -typing-extensions = ">=3.6.5" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["aiodns", "brotlipy", "cchardet"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "async-timeout" -version = "3.0.1" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.5.3" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ - {file = "async-timeout-3.0.1.tar.gz", hash = "sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f"}, - {file = "async_timeout-3.0.1-py3-none-any.whl", hash = "sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3"}, + {file = "atomicwrites-1.4.1.tar.gz", hash = "sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"}, ] [package.source] @@ -80,43 +17,21 @@ reference = "tencent" [[package]] name = "attrs" -version = "21.2.0" +version = "22.2.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, -] - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "sphinx", "sphinx-notfound-page", "zope.interface"] -docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six", "zope.interface"] -tests-no-zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "mypy", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "six"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "backports.entry-points-selectable" -version = "1.1.0" -description = "Compatibility shim providing selectable entry points for older implementations" -optional = false -python-versions = ">=2.7" +python-versions = ">=3.6" files = [ - {file = "backports.entry_points_selectable-1.1.0-py2.py3-none-any.whl", hash = "sha256:a6d9a871cde5e15b4c4a53e3d43ba890cc6861ec1332c9c2428c92f977192acc"}, - {file = "backports.entry_points_selectable-1.1.0.tar.gz", hash = "sha256:988468260ec1c196dab6ae1149260e2f5472c9110334e5d51adcb77867361f6a"}, + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, ] -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - [package.extras] -docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] [package.source] type = "legacy" @@ -142,24 +57,6 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "cerberus" -version = "1.3.4" -description = "Lightweight, extensible schema and data validation tool for Python dictionaries." -optional = false -python-versions = ">=2.7" -files = [ - {file = "Cerberus-1.3.4.tar.gz", hash = "sha256:d1b21b3954b2498d9a79edf16b3170a3ac1021df88d197dc2ce5928ba519237c"}, -] - -[package.dependencies] -setuptools = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "certifi" version = "2021.5.30" @@ -178,13 +75,13 @@ reference = "tencent" [[package]] name = "cfgv" -version = "3.3.0" +version = "3.3.1" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.6.1" files = [ - {file = "cfgv-3.3.0-py2.py3-none-any.whl", hash = "sha256:b449c9c6118fe8cca7fa5e00b9ec60ba08145d281d52164230a69211c5d597a1"}, - {file = "cfgv-3.3.0.tar.gz", hash = "sha256:9e600479b3b99e8af981ecdfc80a0296104ee610cab48a5ae4ffd0b668650eb1"}, + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] [package.source] @@ -229,13 +126,13 @@ reference = "tencent" [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, + {file = "colorama-0.4.5-py2.py3-none-any.whl", hash = "sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"}, + {file = "colorama-0.4.5.tar.gz", hash = "sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"}, ] [package.source] @@ -243,91 +140,67 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "commonmark" -version = "0.9.1" -description = "Python parser for the CommonMark Markdown spec" -optional = false -python-versions = "*" -files = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] - -[package.extras] -test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "coverage" -version = "5.5" +version = "6.2" description = "Code coverage measurement for Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=3.6" files = [ - {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, - {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, - {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, - {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, - {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, - {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, - {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, - {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, - {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, - {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, - {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, - {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, - {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, - {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, - {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, - {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, - {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, - {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, - {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, - {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, - {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, - {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, - {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, - {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, + {file = "coverage-6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6dbc1536e105adda7a6312c778f15aaabe583b0e9a0b0a324990334fd458c94b"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:174cf9b4bef0db2e8244f82059a5a72bd47e1d40e71c68ab055425172b16b7d0"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:92b8c845527eae547a2a6617d336adc56394050c3ed8a6918683646328fbb6da"}, + {file = "coverage-6.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c7912d1526299cb04c88288e148c6c87c0df600eca76efd99d84396cfe00ef1d"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5d2033d5db1d58ae2d62f095e1aefb6988af65b4b12cb8987af409587cc0739"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3feac4084291642165c3a0d9eaebedf19ffa505016c4d3db15bfe235718d4971"}, + {file = "coverage-6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:276651978c94a8c5672ea60a2656e95a3cce2a3f31e9fb2d5ebd4c215d095840"}, + {file = "coverage-6.2-cp310-cp310-win32.whl", hash = "sha256:f506af4f27def639ba45789fa6fde45f9a217da0be05f8910458e4557eed020c"}, + {file = "coverage-6.2-cp310-cp310-win_amd64.whl", hash = "sha256:3f7c17209eef285c86f819ff04a6d4cbee9b33ef05cbcaae4c0b4e8e06b3ec8f"}, + {file = "coverage-6.2-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:13362889b2d46e8d9f97c421539c97c963e34031ab0cb89e8ca83a10cc71ac76"}, + {file = "coverage-6.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22e60a3ca5acba37d1d4a2ee66e051f5b0e1b9ac950b5b0cf4aa5366eda41d47"}, + {file = "coverage-6.2-cp311-cp311-win_amd64.whl", hash = "sha256:b637c57fdb8be84e91fac60d9325a66a5981f8086c954ea2772efe28425eaf64"}, + {file = "coverage-6.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f467bbb837691ab5a8ca359199d3429a11a01e6dfb3d9dcc676dc035ca93c0a9"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2641f803ee9f95b1f387f3e8f3bf28d83d9b69a39e9911e5bfee832bea75240d"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1219d760ccfafc03c0822ae2e06e3b1248a8e6d1a70928966bafc6838d3c9e48"}, + {file = "coverage-6.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a2b5b52be0a8626fcbffd7e689781bf8c2ac01613e77feda93d96184949a98e"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8e2c35a4c1f269704e90888e56f794e2d9c0262fb0c1b1c8c4ee44d9b9e77b5d"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b09c972ce9200264c35a1d53d43ca55ef61836d9ec60f0d44273a31aa9f17"}, + {file = "coverage-6.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e3db840a4dee542e37e09f30859f1612da90e1c5239a6a2498c473183a50e781"}, + {file = "coverage-6.2-cp36-cp36m-win32.whl", hash = "sha256:4e547122ca2d244f7c090fe3f4b5a5861255ff66b7ab6d98f44a0222aaf8671a"}, + {file = "coverage-6.2-cp36-cp36m-win_amd64.whl", hash = "sha256:01774a2c2c729619760320270e42cd9e797427ecfddd32c2a7b639cdc481f3c0"}, + {file = "coverage-6.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fb8b8ee99b3fffe4fd86f4c81b35a6bf7e4462cba019997af2fe679365db0c49"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:619346d57c7126ae49ac95b11b0dc8e36c1dd49d148477461bb66c8cf13bb521"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a7726f74ff63f41e95ed3a89fef002916c828bb5fcae83b505b49d81a066884"}, + {file = "coverage-6.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cfd9386c1d6f13b37e05a91a8583e802f8059bebfccde61a418c5808dea6bbfa"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:17e6c11038d4ed6e8af1407d9e89a2904d573be29d51515f14262d7f10ef0a64"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c254b03032d5a06de049ce8bca8338a5185f07fb76600afff3c161e053d88617"}, + {file = "coverage-6.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dca38a21e4423f3edb821292e97cec7ad38086f84313462098568baedf4331f8"}, + {file = "coverage-6.2-cp37-cp37m-win32.whl", hash = "sha256:600617008aa82032ddeace2535626d1bc212dfff32b43989539deda63b3f36e4"}, + {file = "coverage-6.2-cp37-cp37m-win_amd64.whl", hash = "sha256:bf154ba7ee2fd613eb541c2bc03d3d9ac667080a737449d1a3fb342740eb1a74"}, + {file = "coverage-6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f9afb5b746781fc2abce26193d1c817b7eb0e11459510fba65d2bd77fe161d9e"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edcada2e24ed68f019175c2b2af2a8b481d3d084798b8c20d15d34f5c733fa58"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a9c8c4283e17690ff1a7427123ffb428ad6a52ed720d550e299e8291e33184dc"}, + {file = "coverage-6.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f614fc9956d76d8a88a88bb41ddc12709caa755666f580af3a688899721efecd"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9365ed5cce5d0cf2c10afc6add145c5037d3148585b8ae0e77cc1efdd6aa2953"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8bdfe9ff3a4ea37d17f172ac0dff1e1c383aec17a636b9b35906babc9f0f5475"}, + {file = "coverage-6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:63c424e6f5b4ab1cf1e23a43b12f542b0ec2e54f99ec9f11b75382152981df57"}, + {file = "coverage-6.2-cp38-cp38-win32.whl", hash = "sha256:49dbff64961bc9bdd2289a2bda6a3a5a331964ba5497f694e2cbd540d656dc1c"}, + {file = "coverage-6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a29311bd6429be317c1f3fe4bc06c4c5ee45e2fa61b2a19d4d1d6111cb94af2"}, + {file = "coverage-6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03b20e52b7d31be571c9c06b74746746d4eb82fc260e594dc662ed48145e9efd"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:215f8afcc02a24c2d9a10d3790b21054b58d71f4b3c6f055d4bb1b15cecce685"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a4bdeb0a52d1d04123b41d90a4390b096f3ef38eee35e11f0b22c2d031222c6c"}, + {file = "coverage-6.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c332d8f8d448ded473b97fefe4a0983265af21917d8b0cdcb8bb06b2afe632c3"}, + {file = "coverage-6.2-cp39-cp39-win32.whl", hash = "sha256:6e1394d24d5938e561fbeaa0cd3d356207579c28bd1792f25a068743f2d5b282"}, + {file = "coverage-6.2-cp39-cp39-win_amd64.whl", hash = "sha256:86f2e78b1eff847609b1ca8050c9e1fa3bd44ce755b2ec30e70f2d3ba3844644"}, + {file = "coverage-6.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:5829192582c0ec8ca4a2532407bc14c2f338d9878a10442f5d03804a95fac9de"}, + {file = "coverage-6.2.tar.gz", hash = "sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8"}, ] [package.dependencies] -toml = {version = "*", optional = true, markers = "extra == \"toml\""} +tomli = {version = "*", optional = true, markers = "extra == \"toml\""} [package.extras] -toml = ["toml"] +toml = ["tomli"] [package.source] type = "legacy" @@ -368,323 +241,15 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "dephell" -version = "0.8.3" -description = "Dependency resolution for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell-0.8.3-py3-none-any.whl", hash = "sha256:3ca3661e2a353b5c67c77034b69b379e360d4c70ce562e8161db32d39064be5a"}, - {file = "dephell-0.8.3.tar.gz", hash = "sha256:a9fcc528a0c6f9f5d721292bdf846e5338e4dca7cd6fef1551fbe71564dfe61e"}, -] - -[package.dependencies] -aiohttp = "*" -attrs = ">=19.2.0" -cerberus = ">=1.3" -certifi = "*" -dephell-archive = ">=0.1.5" -dephell-argparse = ">=0.1.1" -dephell-changelogs = "*" -dephell-discover = ">=0.2.6" -dephell-licenses = ">=0.1.6" -dephell-links = ">=0.1.4" -dephell-markers = ">=1.0.0" -dephell-pythons = ">=0.1.11" -dephell-setuptools = ">=0.2.1" -dephell-shells = ">=0.1.3" -dephell-specifier = ">=0.1.7" -dephell-venvs = ">=0.1.16" -dephell-versioning = "*" -jinja2 = "*" -m2r = "*" -packaging = "*" -pip = ">=18.0,<=19.3.1" -requests = "*" -"ruamel.yaml" = "*" -tomlkit = "*" -yaspin = "*" - -[package.extras] -dev = ["aioresponses", "alabaster", "flake8-isort", "isort[pyproject]", "pygments-github-lexers", "pytest", "recommonmark", "requests-mock", "sphinx"] -docs = ["alabaster", "pygments-github-lexers", "recommonmark", "sphinx"] -full = ["aiofiles", "appdirs", "autopep8", "bowler", "colorama", "docker", "dockerpty", "fissix", "graphviz", "html5lib", "pygments", "python-gnupg", "tabulate", "yapf"] -tests = ["aioresponses", "pytest", "requests-mock"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-archive" -version = "0.1.7" -description = "pathlib for archives" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell-archive-0.1.7.tar.gz", hash = "sha256:bb263492a7d430f9e04cef9a0237b7752cc797ab364bf35e70196af09c73ea37"}, - {file = "dephell_archive-0.1.7-py3-none-any.whl", hash = "sha256:64a688dd8acb780f7d56cdae4622fa01d1e5910fd65788974b3f70fa9a1e517a"}, -] - -[package.dependencies] -attrs = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-argparse" -version = "0.1.3" -description = "Argparse on steroids: groups, commands, colors." -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_argparse-0.1.3-py3-none-any.whl", hash = "sha256:e37a52c511b53e9d6107b606088664754b4b4d9e734578b333e68c46e4ab45b7"}, - {file = "dephell_argparse-0.1.3.tar.gz", hash = "sha256:2ab9b2441f808bb11c338c4849d22ded898cde8325946800ac9e39d2b138735d"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-changelogs" -version = "0.0.1" -description = "Find changelog for github repository, local dir, parse changelog" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_changelogs-0.0.1-py3-none-any.whl", hash = "sha256:963d31346790a3aacc3409bbc7cb0b44cdc0e29c167eec196fb49a131c3035b8"}, - {file = "dephell_changelogs-0.0.1.tar.gz", hash = "sha256:e639a3d08d389e22fbac0cc64181dbe93c4b4ba9f0134e273e6dd3e26ae70b21"}, -] - -[package.dependencies] -requests = "*" - -[package.extras] -dev = ["pytest", "pytest-xdist"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-discover" -version = "0.2.10" -description = "Find project modules and data files (packages and package_data for setup.py)." -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_discover-0.2.10-py3-none-any.whl", hash = "sha256:abf190e9707d4a88f14e91be1f80e996e195b20b5400da2362e98cf19e59a1e4"}, - {file = "dephell_discover-0.2.10.tar.gz", hash = "sha256:a2ad414e5e0fe16c82c537d6a3198afd9818c0c010760eccb23e2d60e5b66df6"}, -] - -[package.dependencies] -attrs = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-licenses" -version = "0.1.7" -description = "Get info about OSS licenses" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell-licenses-0.1.7.tar.gz", hash = "sha256:f175cec822a32bda5b56442f48dae39efbb5c3851275ecd41cfd7e849ddd2ea6"}, - {file = "dephell_licenses-0.1.7-py3-none-any.whl", hash = "sha256:b0b6c93779c4a8d9a82710ef2d5d0fab72e013f335962dc7363831af48570db5"}, -] - -[package.dependencies] -attrs = "*" -requests = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-links" -version = "0.1.5" -description = "Parse dependency links" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_links-0.1.5-py3-none-any.whl", hash = "sha256:a86a08fb42da63d903ae3fee9f9e2491be602321204c0df5b53e33cb19ac4dec"}, - {file = "dephell_links-0.1.5.tar.gz", hash = "sha256:28d694142e2827a59d2c301e7185afb52fb8acdb950b1da38308d69e43418eaa"}, -] - -[package.dependencies] -attrs = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-markers" -version = "1.0.3" -description = "Work with environment markers (PEP-496)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_markers-1.0.3-py3-none-any.whl", hash = "sha256:54ad6807b087d6c9171efc2d94eda3a9e3cad7ea2ca4b27186789d455a6c730a"}, - {file = "dephell_markers-1.0.3.tar.gz", hash = "sha256:525e17914e705acf8652dd8681fccdec912432a747d8def4720f49416817f2d4"}, -] - -[package.dependencies] -attrs = "*" -dephell-specifier = "*" -packaging = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-pythons" -version = "0.1.15" -description = "Work with python versions" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell_pythons-0.1.15-py3-none-any.whl", hash = "sha256:03132d083d0369683b87d03767dc0f0f88b8d92d5cf19cfdb36d8845b70ecdb2"}, - {file = "dephell_pythons-0.1.15.tar.gz", hash = "sha256:804c29afa2147322aa23e791f591d0204fd1e9983afa7d91e1d1452fc7be1c5c"}, -] - -[package.dependencies] -attrs = "*" -dephell-specifier = "*" -packaging = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-setuptools" -version = "0.2.4" -description = "Read metainfo from setup.py" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_setuptools-0.2.4-py3-none-any.whl", hash = "sha256:275f9bec4b276614939ac9efa732a0ae6aef06ae63e3b62371d0f15a19299208"}, - {file = "dephell_setuptools-0.2.4.tar.gz", hash = "sha256:663629e1ebf7b20bf7e372ee2a2e7ebf1a15aeb3bc6d46ad32e1bcb21044ca29"}, -] - -[package.dependencies] -setuptools = "*" - -[package.extras] -dev = ["mypy", "pkginfo", "pytest"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-shells" -version = "0.1.5" -description = "activate virtual environment for current shell" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell_shells-0.1.5-py3-none-any.whl", hash = "sha256:3bdb8aba72640c51259dc5cb0ee40c4cd948cb644e5ceedd7e725766575a5225"}, - {file = "dephell_shells-0.1.5.tar.gz", hash = "sha256:77150b732db135d436f41c2c6f12694e6058a8609214117ee80f6c40234ac2d5"}, -] - -[package.dependencies] -attrs = "*" -pexpect = "*" -shellingham = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-specifier" -version = "0.2.2" -description = "Work with version specifiers." -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell_specifier-0.2.2-py3-none-any.whl", hash = "sha256:021ad2ab3f3f130b5ac5cefa554c12f0e2dbb35d5d52ad9474a1f2c8b420f7c2"}, - {file = "dephell_specifier-0.2.2.tar.gz", hash = "sha256:b5ec6409a1916980c4861da2cb7538246555bff4b95bef2c952c56bd19eb2de6"}, -] - -[package.dependencies] -packaging = ">=17.1" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-venvs" -version = "0.1.18" -description = "Manage virtual environments" -optional = false -python-versions = ">=3.5" -files = [ - {file = "dephell_venvs-0.1.18-py3-none-any.whl", hash = "sha256:bd3ad440702aa9a9dc21bbab9633537fa395296d40451280d40046d9e3372e6d"}, - {file = "dephell_venvs-0.1.18.tar.gz", hash = "sha256:c7307291b754edba325ab27edeb05d85ee4dd2f1487c48872a1ebfc372bf7a2e"}, -] - -[package.dependencies] -attrs = "*" -dephell-pythons = "*" -requests = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "dephell-versioning" -version = "0.1.2" -description = "Library for bumping project version like a pro" -optional = false -python-versions = ">=3.6" -files = [ - {file = "dephell_versioning-0.1.2-py3-none-any.whl", hash = "sha256:28f611bd3ec1644e3d6972f901b9aa67a1fe2ed3fe57566f82afd9c43f5a335a"}, - {file = "dephell_versioning-0.1.2.tar.gz", hash = "sha256:9ba7636704af7bd64af5a64ab8efb482c8b0bf4868699722f5e2647763edf8e5"}, -] - -[package.dependencies] -packaging = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "distlib" -version = "0.3.2" +version = "0.3.7" description = "Distribution utilities" optional = false python-versions = "*" files = [ - {file = "distlib-0.3.2-py2.py3-none-any.whl", hash = "sha256:23e223426b28491b1ced97dc3bbe183027419dfc7982b4fa2f05d5f3ff10711c"}, - {file = "distlib-0.3.2.zip", hash = "sha256:106fef6dc37dd8c0e2c0a60d3fca3e77460a48907f335fa28420463a6f799736"}, + {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, + {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, ] [package.source] @@ -707,43 +272,8 @@ files = [ pytz = "*" [package.extras] -argon2 = ["argon2-cffi (>=16.1.0)"] -bcrypt = ["bcrypt"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "docutils" -version = "0.17.1" -description = "Docutils -- Python Documentation Utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, - {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "exceptiongroup" -version = "1.1.3" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, -] - -[package.extras] -test = ["pytest (>=6)"] +argon2 = ["argon2-cffi (>=16.1.0)"] +bcrypt = ["bcrypt"] [package.source] type = "legacy" @@ -772,15 +302,19 @@ reference = "tencent" [[package]] name = "filelock" -version = "3.0.12" +version = "3.4.1" description = "A platform independent file lock." optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "filelock-3.0.12-py3-none-any.whl", hash = "sha256:929b7d63ec5b7d6b71b0fa5ac14e030b3f70b75747cef1b10da9b879fef15836"}, - {file = "filelock-3.0.12.tar.gz", hash = "sha256:18d82244ee114f543149c66a6e0c14e9c4f8a1044b5cdaadd0f82159d6a6ff59"}, + {file = "filelock-3.4.1-py3-none-any.whl", hash = "sha256:a4bc51381e01502a30e9f06dd4fa19a1712eab852b6fb0f84fd7cce0793d8ca3"}, + {file = "filelock-3.4.1.tar.gz", hash = "sha256:0f12f552b42b5bf60dba233710bf71337d35494fc8bdd4fd6d9f6d082ad45e06"}, ] +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + [package.source] type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" @@ -788,17 +322,17 @@ reference = "tencent" [[package]] name = "identify" -version = "2.2.11" +version = "2.5.24" description = "File identification library for Python" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" files = [ - {file = "identify-2.2.11-py2.py3-none-any.whl", hash = "sha256:7abaecbb414e385752e8ce02d8c494f4fbc780c975074b46172598a28f1ab839"}, - {file = "identify-2.2.11.tar.gz", hash = "sha256:a0e700637abcbd1caae58e0463861250095dfe330a8371733a471af706a4a29a"}, + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, ] [package.extras] -license = ["editdistance-s"] +license = ["ukkonen"] [package.source] type = "legacy" @@ -839,37 +373,23 @@ reference = "tencent" [[package]] name = "importlib-metadata" -version = "2.1.1" +version = "4.8.3" description = "Read metadata from Python packages" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" files = [ - {file = "importlib_metadata-2.1.1-py2.py3-none-any.whl", hash = "sha256:c2d6341ff566f609e89a2acb2db190e5e1d23d5409d6cc8d2fe34d72443876d4"}, - {file = "importlib_metadata-2.1.1.tar.gz", hash = "sha256:b8de9eff2b35fb037368f28a7df1df4e6436f578fa74423505b6c6a778d5b5dd"}, + {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, + {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, ] [package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["rst.linker", "sphinx"] -testing = ["importlib-resources (>=1.3)", "packaging", "pep517", "unittest2"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +perf = ["ipython"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pep517", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy", "pytest-perf (>=0.9.2)"] [package.source] type = "legacy" @@ -877,123 +397,22 @@ url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" [[package]] -name = "jinja2" -version = "3.0.1" -description = "A very fast and expressive template engine." +name = "importlib-resources" +version = "5.4.0" +description = "Read resources from Python packages" optional = false python-versions = ">=3.6" files = [ - {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"}, - {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"}, + {file = "importlib_resources-5.4.0-py3-none-any.whl", hash = "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45"}, + {file = "importlib_resources-5.4.0.tar.gz", hash = "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b"}, ] [package.dependencies] -MarkupSafe = ">=2.0" +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -i18n = ["Babel (>=2.7)"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "m2r" -version = "0.2.1" -description = "Markdown and reStructuredText in a single file." -optional = false -python-versions = "*" -files = [ - {file = "m2r-0.2.1.tar.gz", hash = "sha256:bf90bad66cda1164b17e5ba4a037806d2443f2a4d5ddc9f6a5554a0322aaed99"}, -] - -[package.dependencies] -docutils = "*" -mistune = "*" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.6" -files = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] [package.source] type = "legacy" @@ -1001,14 +420,14 @@ url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" [[package]] -name = "mistune" -version = "0.8.4" -description = "The fastest markdown parser in pure Python" +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" optional = false python-versions = "*" files = [ - {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, - {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] [package.source] @@ -1036,57 +455,6 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "multidict" -version = "5.1.0" -description = "multidict implementation" -optional = false -python-versions = ">=3.6" -files = [ - {file = "multidict-5.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da"}, - {file = "multidict-5.1.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224"}, - {file = "multidict-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26"}, - {file = "multidict-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6"}, - {file = "multidict-5.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9"}, - {file = "multidict-5.1.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37"}, - {file = "multidict-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5"}, - {file = "multidict-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632"}, - {file = "multidict-5.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a"}, - {file = "multidict-5.1.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea"}, - {file = "multidict-5.1.0-cp38-cp38-win32.whl", hash = "sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656"}, - {file = "multidict-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3"}, - {file = "multidict-5.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841"}, - {file = "multidict-5.1.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda"}, - {file = "multidict-5.1.0-cp39-cp39-win32.whl", hash = "sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80"}, - {file = "multidict-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359"}, - {file = "multidict-5.1.0.tar.gz", hash = "sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "mypy" version = "0.971" @@ -1137,13 +505,13 @@ reference = "tencent" [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = "*" +python-versions = ">=3.5" files = [ - {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, - {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [package.source] @@ -1153,33 +521,17 @@ reference = "tencent" [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.8.0" description = "Node.js virtual environment builder" optional = false -python-versions = "*" -files = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "packaging" -version = "20.9" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ - {file = "packaging-20.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"}, - {file = "packaging-20.9.tar.gz", hash = "sha256:5b327ac1320dc863dca72f4514ecc086f31186744b84a230374cc1fd776feae5"}, + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, ] [package.dependencies] -pyparsing = ">=2.0.2" +setuptools = "*" [package.source] type = "legacy" @@ -1187,34 +539,18 @@ url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" [[package]] -name = "pexpect" -version = "4.8.0" -description = "Pexpect allows easy control of interactive console applications." +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] [package.dependencies] -ptyprocess = ">=0.5" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "pip" -version = "19.3.1" -description = "The PyPA recommended tool for installing Python packages." -optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" -files = [ - {file = "pip-19.3.1-py2.py3-none-any.whl", hash = "sha256:6917c65fc3769ecdc61405d3dfd97afdedd75808d200b2838d7d961cebc0c2c7"}, - {file = "pip-19.3.1.tar.gz", hash = "sha256:21207d76c1031e517668898a6b46a9fb1501c7a4710ef5dfd6a40ad9e6757ea7"}, -] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [package.source] type = "legacy" @@ -1223,15 +559,19 @@ reference = "tencent" [[package]] name = "platformdirs" -version = "2.0.2" +version = "2.4.0" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" files = [ - {file = "platformdirs-2.0.2-py2.py3-none-any.whl", hash = "sha256:0b9547541f599d3d242078ae60b927b3e453f0ad52f58b4d4bc3be86aed3ec41"}, - {file = "platformdirs-2.0.2.tar.gz", hash = "sha256:3b00d081227d9037bbbca521a5787796b5ef5000faea1e43fd76f1d44b06fcfa"}, + {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, + {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, ] +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + [package.source] type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" @@ -1239,13 +579,13 @@ reference = "tencent" [[package]] name = "pluggy" -version = "0.13.1" +version = "1.0.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" files = [ - {file = "pluggy-0.13.1-py2.py3-none-any.whl", hash = "sha256:966c145cd83c96502c3c3868f50408687b38434af77734af1e9ca461a4081d2d"}, - {file = "pluggy-0.13.1.tar.gz", hash = "sha256:15b2acde666561e1298d71b523007ed7364de07029219b604cf808bfa1c765b0"}, + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] [package.dependencies] @@ -1253,6 +593,7 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} [package.extras] dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] [package.source] type = "legacy" @@ -1261,13 +602,13 @@ reference = "tencent" [[package]] name = "pre-commit" -version = "2.20.0" +version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.7" files = [ - {file = "pre_commit-2.20.0-py2.py3-none-any.whl", hash = "sha256:51a5ba7c480ae8072ecdb6933df22d2f812dc897d5fe848778116129a681aac7"}, - {file = "pre_commit-2.20.0.tar.gz", hash = "sha256:a978dac7bc9ec0bcee55c18a277d553b0f419d259dadb4b9418ff2d00eb43959"}, + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, ] [package.dependencies] @@ -1276,8 +617,7 @@ identify = ">=1.0.0" importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} nodeenv = ">=0.11.1" pyyaml = ">=5.1" -toml = "*" -virtualenv = ">=20.0.8" +virtualenv = ">=20.10.0" [package.source] type = "legacy" @@ -1303,52 +643,17 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "pygments" -version = "2.16.1" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] -[package.extras] -plugins = ["importlib-metadata"] - [package.source] type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" @@ -1356,15 +661,18 @@ reference = "tencent" [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.7" description = "Python parsing module" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" files = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [package.source] type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" @@ -1372,26 +680,28 @@ reference = "tencent" [[package]] name = "pytest" -version = "7.4.3" +version = "7.0.1" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pytest-7.0.1-py3-none-any.whl", hash = "sha256:9ce3ff477af913ecf6321fe337b93a2c0dcf2a0a1439c43f5452112c1e4280db"}, + {file = "pytest-7.0.1.tar.gz", hash = "sha256:e30905a0c131d3d94b89624a1cc5afec3e0ba2fbdb151867d8e0ebd49850f171"}, ] [package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +py = ">=1.8.2" +tomli = ">=1.0.0" [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [package.source] type = "legacy" @@ -1400,13 +710,13 @@ reference = "tencent" [[package]] name = "pytest-cov" -version = "4.1.0" +version = "4.0.0" description = "Pytest plugin for measuring coverage." optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, - {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, + {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, + {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, ] [package.dependencies] @@ -1446,13 +756,13 @@ reference = "tencent" [[package]] name = "pytest-mock" -version = "3.11.1" +version = "3.6.1" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false -python-versions = ">=3.7" +python-versions = ">=3.6" files = [ - {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, - {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, + {file = "pytest-mock-3.6.1.tar.gz", hash = "sha256:40217a058c52a63f1042f0784f62009e976ba824c418cced42e88d5f40ab0e62"}, + {file = "pytest_mock-3.6.1-py3-none-any.whl", hash = "sha256:30c2f2cc9759e76eee674b81ea28c9f0b94f8f0445a1b87762cadf774f0df7e3"}, ] [package.dependencies] @@ -1466,26 +776,6 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "pytest-pretty" -version = "1.2.0" -description = "pytest plugin for printing summary data as I want it" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_pretty-1.2.0-py3-none-any.whl", hash = "sha256:6f79122bf53864ae2951b6c9e94d7a06a87ef753476acd4588aeac018f062036"}, - {file = "pytest_pretty-1.2.0.tar.gz", hash = "sha256:105a355f128e392860ad2c478ae173ff96d2f03044692f9818ff3d49205d3a60"}, -] - -[package.dependencies] -pytest = ">=7" -rich = ">=12" - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "python-dateutil" version = "2.8.2" @@ -1523,40 +813,61 @@ reference = "tencent" [[package]] name = "pyyaml" -version = "5.4.1" +version = "6.0.1" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.6" files = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, + {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, + {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"}, + {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, + {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"}, + {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, + {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, + {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, + {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, + {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, + {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, + {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"}, + {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, + {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"}, ] [package.source] @@ -1596,13 +907,13 @@ reference = "tencent" [[package]] name = "requests-mock" -version = "1.9.3" +version = "1.11.0" description = "Mock out responses from the requests package" optional = false python-versions = "*" files = [ - {file = "requests-mock-1.9.3.tar.gz", hash = "sha256:8d72abe54546c1fc9696fa1516672f1031d72a55a1d66c85184f972a24ba0eba"}, - {file = "requests_mock-1.9.3-py2.py3-none-any.whl", hash = "sha256:0a2d38a117c08bb78939ec163522976ad59a6b7fdd82b709e23bb98004a44970"}, + {file = "requests-mock-1.11.0.tar.gz", hash = "sha256:ef10b572b489a5f28e09b708697208c4a3b2b89ef80a9f01584340ea357ec3c4"}, + {file = "requests_mock-1.11.0-py2.py3-none-any.whl", hash = "sha256:f7fae383f228633f6bececebdab236c478ace2284d6292c6e7e2867b9ab74d15"}, ] [package.dependencies] @@ -1611,98 +922,7 @@ six = "*" [package.extras] fixture = ["fixtures"] -test = ["fixtures", "mock", "purl", "pytest", "sphinx", "testrepository (>=0.0.18)", "testtools"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "rich" -version = "12.0.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.6.2,<4.0.0" -files = [ - {file = "rich-12.0.1-py3-none-any.whl", hash = "sha256:ce5c714e984a2d185399e4e1dd1f8b2feacb7cecfc576f1522425643a36a57ea"}, - {file = "rich-12.0.1.tar.gz", hash = "sha256:3fba9dd15ebe048e2795a02ac19baee79dc12cc50b074ef70f2958cd651b59a9"}, -] - -[package.dependencies] -commonmark = ">=0.9.0,<0.10.0" -pygments = ">=2.6.0,<3.0.0" -typing-extensions = {version = ">=3.7.4,<5.0", markers = "python_version < \"3.8\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "ruamel.yaml" -version = "0.17.10" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -optional = false -python-versions = ">=3" -files = [ - {file = "ruamel.yaml-0.17.10-py3-none-any.whl", hash = "sha256:ffb9b703853e9e8b7861606dfdab1026cf02505bade0653d1880f4b2db47f815"}, - {file = "ruamel.yaml-0.17.10.tar.gz", hash = "sha256:106bc8d6dc6a0ff7c9196a47570432036f41d556b779c6b4e618085f57e39e67"}, -] - -[package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.1.2", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.10\""} - -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "ruamel.yaml.clib" -version = "0.2.6" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -optional = false -python-versions = ">=3.5" -files = [ - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6e7be2c5bcb297f5b82fee9c665eb2eb7001d1050deaba8471842979293a80b0"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:066f886bc90cc2ce44df8b5f7acfc6a7e2b2e672713f027136464492b0c34d7c"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:221eca6f35076c6ae472a531afa1c223b9c29377e62936f61bc8e6e8bdc5f9e7"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win32.whl", hash = "sha256:1070ba9dd7f9370d0513d649420c3b362ac2d687fe78c6e888f5b12bf8bc7bee"}, - {file = "ruamel.yaml.clib-0.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:77df077d32921ad46f34816a9a16e6356d8100374579bc35e15bab5d4e9377de"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:cfdb9389d888c5b74af297e51ce357b800dd844898af9d4a547ffc143fa56751"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7b2927e92feb51d830f531de4ccb11b320255ee95e791022555971c466af4527"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win32.whl", hash = "sha256:ada3f400d9923a190ea8b59c8f60680c4ef8a4b0dfae134d2f2ff68429adfab5"}, - {file = "ruamel.yaml.clib-0.2.6-cp35-cp35m-win_amd64.whl", hash = "sha256:de9c6b8a1ba52919ae919f3ae96abb72b994dd0350226e28f3686cb4f142165c"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d67f273097c368265a7b81e152e07fb90ed395df6e552b9fa858c6d2c9f42502"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:72a2b8b2ff0a627496aad76f37a652bcef400fd861721744201ef1b45199ab78"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d3c620a54748a3d4cf0bcfe623e388407c8e85a4b06b8188e126302bcab93ea8"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win32.whl", hash = "sha256:9efef4aab5353387b07f6b22ace0867032b900d8e91674b5d8ea9150db5cae94"}, - {file = "ruamel.yaml.clib-0.2.6-cp36-cp36m-win_amd64.whl", hash = "sha256:846fc8336443106fe23f9b6d6b8c14a53d38cef9a375149d61f99d78782ea468"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0847201b767447fc33b9c235780d3aa90357d20dd6108b92be544427bea197dd"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:78988ed190206672da0f5d50c61afef8f67daa718d614377dcd5e3ed85ab4a99"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:210c8fcfeff90514b7133010bf14e3bad652c8efde6b20e00c43854bf94fa5a6"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win32.whl", hash = "sha256:a49e0161897901d1ac9c4a79984b8410f450565bbad64dbfcbf76152743a0cdb"}, - {file = "ruamel.yaml.clib-0.2.6-cp37-cp37m-win_amd64.whl", hash = "sha256:bf75d28fa071645c529b5474a550a44686821decebdd00e21127ef1fd566eabe"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a32f8d81ea0c6173ab1b3da956869114cae53ba1e9f72374032e33ba3118c233"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7f7ecb53ae6848f959db6ae93bdff1740e651809780822270eab111500842a84"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:61bc5e5ca632d95925907c569daa559ea194a4d16084ba86084be98ab1cec1c6"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win32.whl", hash = "sha256:89221ec6d6026f8ae859c09b9718799fea22c0e8da8b766b0b2c9a9ba2db326b"}, - {file = "ruamel.yaml.clib-0.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:31ea73e564a7b5fbbe8188ab8b334393e06d997914a4e184975348f204790277"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dc6a613d6c74eef5a14a214d433d06291526145431c3b964f5e16529b1842bed"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1866cf2c284a03b9524a5cc00daca56d80057c5ce3cdc86a52020f4c720856f0"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:1b4139a6ffbca8ef60fdaf9b33dec05143ba746a6f0ae0f9d11d38239211d335"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win32.whl", hash = "sha256:3fb9575a5acd13031c57a62cc7823e5d2ff8bc3835ba4d94b921b4e6ee664104"}, - {file = "ruamel.yaml.clib-0.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:825d5fccef6da42f3c8eccd4281af399f21c02b32d98e113dbc631ea6a6ecbc7"}, - {file = "ruamel.yaml.clib-0.2.6.tar.gz", hash = "sha256:4ff604ce439abb20794f05613c374759ce10e3595d1867764dd1ae675b85acbd"}, -] +test = ["fixtures", "mock", "purl", "pytest", "requests-futures", "sphinx", "testtools"] [package.source] type = "legacy" @@ -1742,18 +962,18 @@ reference = "tencent" [[package]] name = "setuptools" -version = "65.6.3" +version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-65.6.3-py3-none-any.whl", hash = "sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54"}, - {file = "setuptools-65.6.3.tar.gz", hash = "sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75"}, + {file = "setuptools-68.0.0-py3-none-any.whl", hash = "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f"}, + {file = "setuptools-68.0.0.tar.gz", hash = "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [package.source] @@ -1761,22 +981,6 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "shellingham" -version = "1.4.0" -description = "Tool to Detect Surrounding Shell" -optional = false -python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" -files = [ - {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, - {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "six" version = "1.16.0" @@ -1793,21 +997,6 @@ type = "legacy" url = "https://mirrors.cloud.tencent.com/pypi/simple" reference = "tencent" -[[package]] -name = "termcolor" -version = "1.1.0" -description = "ANSII Color formatting for output in terminal." -optional = false -python-versions = "*" -files = [ - {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - [[package]] name = "toml" version = "0.10.2" @@ -1826,29 +1015,13 @@ reference = "tencent" [[package]] name = "tomli" -version = "2.0.1" +version = "1.2.3" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "tomlkit" -version = "0.7.2" -description = "Style preserving TOML library" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" files = [ - {file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"}, - {file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"}, + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, ] [package.source] @@ -1858,13 +1031,13 @@ reference = "tencent" [[package]] name = "tox" -version = "3.24.0" +version = "3.25.1" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ - {file = "tox-3.24.0-py2.py3-none-any.whl", hash = "sha256:c990028355f0d0b681e3db9baa89dd9f839a6e999c320029339f6a6b36160591"}, - {file = "tox-3.24.0.tar.gz", hash = "sha256:67636634df6569e450c4bc18fdfd8b84d7903b3902d5c65416eb6735f3d4afb8"}, + {file = "tox-3.25.1-py2.py3-none-any.whl", hash = "sha256:c38e15f4733683a9cc0129fba078633e07eb0961f550a010ada879e95fb32632"}, + {file = "tox-3.25.1.tar.gz", hash = "sha256:c138327815f53bc6da4fe56baec5f25f00622ae69ef3fe4e1e385720e22486f9"}, ] [package.dependencies] @@ -1880,7 +1053,7 @@ virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2, [package.extras] docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "pytest-xdist (>=1.22.2)"] +testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)", "psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)"] [package.source] type = "legacy" @@ -1889,41 +1062,52 @@ reference = "tencent" [[package]] name = "typed-ast" -version = "1.4.3" +version = "1.5.5" description = "a fork of Python 2 and 3 ast modules with type comment support" optional = false -python-versions = "*" +python-versions = ">=3.6" files = [ - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c907f561b1e83e93fad565bac5ba9c22d96a54e7ea0267c708bffe863cbe4075"}, - {file = "typed_ast-1.4.3-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:1b3ead4a96c9101bef08f9f7d1217c096f31667617b58de957f690c92378b528"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win32.whl", hash = "sha256:dde816ca9dac1d9c01dd504ea5967821606f02e510438120091b84e852367428"}, - {file = "typed_ast-1.4.3-cp35-cp35m-win_amd64.whl", hash = "sha256:777a26c84bea6cd934422ac2e3b78863a37017618b6e5c08f92ef69853e765d3"}, - {file = "typed_ast-1.4.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f8afcf15cc511ada719a88e013cec87c11aff7b91f019295eb4530f96fe5ef2f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:52b1eb8c83f178ab787f3a4283f68258525f8d70f778a2f6dd54d3b5e5fb4341"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:01ae5f73431d21eead5015997ab41afa53aa1fbe252f9da060be5dad2c730ace"}, - {file = "typed_ast-1.4.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:c190f0899e9f9f8b6b7863debfb739abcb21a5c054f911ca3596d12b8a4c4c7f"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win32.whl", hash = "sha256:398e44cd480f4d2b7ee8d98385ca104e35c81525dd98c519acff1b79bdaac363"}, - {file = "typed_ast-1.4.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bff6ad71c81b3bba8fa35f0f1921fb24ff4476235a6e94a26ada2e54370e6da7"}, - {file = "typed_ast-1.4.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0fb71b8c643187d7492c1f8352f2c15b4c4af3f6338f21681d3681b3dc31a266"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:760ad187b1041a154f0e4d0f6aae3e40fdb51d6de16e5c99aedadd9246450e9e"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5feca99c17af94057417d744607b82dd0a664fd5e4ca98061480fd8b14b18d04"}, - {file = "typed_ast-1.4.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:95431a26309a21874005845c21118c83991c63ea800dd44843e42a916aec5899"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win32.whl", hash = "sha256:aee0c1256be6c07bd3e1263ff920c325b59849dc95392a05f258bb9b259cf39c"}, - {file = "typed_ast-1.4.3-cp37-cp37m-win_amd64.whl", hash = "sha256:9ad2c92ec681e02baf81fdfa056fe0d818645efa9af1f1cd5fd6f1bd2bdfd805"}, - {file = "typed_ast-1.4.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b36b4f3920103a25e1d5d024d155c504080959582b928e91cb608a65c3a49e1a"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:067a74454df670dcaa4e59349a2e5c81e567d8d65458d480a5b3dfecec08c5ff"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7538e495704e2ccda9b234b82423a4038f324f3a10c43bc088a1636180f11a41"}, - {file = "typed_ast-1.4.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:af3d4a73793725138d6b334d9d247ce7e5f084d96284ed23f22ee626a7b88e39"}, - {file = "typed_ast-1.4.3-cp38-cp38-win32.whl", hash = "sha256:f2362f3cb0f3172c42938946dbc5b7843c2a28aec307c49100c8b38764eb6927"}, - {file = "typed_ast-1.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:dd4a21253f42b8d2b48410cb31fe501d32f8b9fbeb1f55063ad102fe9c425e40"}, - {file = "typed_ast-1.4.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f328adcfebed9f11301eaedfa48e15bdece9b519fb27e6a8c01aa52a17ec31b3"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2c726c276d09fc5c414693a2de063f521052d9ea7c240ce553316f70656c84d4"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:cae53c389825d3b46fb37538441f75d6aecc4174f615d048321b716df2757fb0"}, - {file = "typed_ast-1.4.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b9574c6f03f685070d859e75c7f9eeca02d6933273b5e69572e5ff9d5e3931c3"}, - {file = "typed_ast-1.4.3-cp39-cp39-win32.whl", hash = "sha256:209596a4ec71d990d71d5e0d312ac935d86930e6eecff6ccc7007fe54d703808"}, - {file = "typed_ast-1.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:9c6d1a54552b5330bc657b7ef0eae25d00ba7ffe85d9ea8ae6540d2197a3788c"}, - {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bc1efe0ce3ffb74784e06460f01a223ac1f6ab31c6bc0376a21184bf5aabe3b"}, + {file = "typed_ast-1.5.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f7a8c46a8b333f71abd61d7ab9255440d4a588f34a21f126bbfc95f6049e686"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:597fc66b4162f959ee6a96b978c0435bd63791e31e4f410622d19f1686d5e769"}, + {file = "typed_ast-1.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d41b7a686ce653e06c2609075d397ebd5b969d821b9797d029fccd71fdec8e04"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5fe83a9a44c4ce67c796a1b466c270c1272e176603d5e06f6afbc101a572859d"}, + {file = "typed_ast-1.5.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d5c0c112a74c0e5db2c75882a0adf3133adedcdbfd8cf7c9d6ed77365ab90a1d"}, + {file = "typed_ast-1.5.5-cp310-cp310-win_amd64.whl", hash = "sha256:e1a976ed4cc2d71bb073e1b2a250892a6e968ff02aa14c1f40eba4f365ffec02"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c631da9710271cb67b08bd3f3813b7af7f4c69c319b75475436fcab8c3d21bee"}, + {file = "typed_ast-1.5.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b445c2abfecab89a932b20bd8261488d574591173d07827c1eda32c457358b18"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc95ffaaab2be3b25eb938779e43f513e0e538a84dd14a5d844b8f2932593d88"}, + {file = "typed_ast-1.5.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61443214d9b4c660dcf4b5307f15c12cb30bdfe9588ce6158f4a005baeb167b2"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6eb936d107e4d474940469e8ec5b380c9b329b5f08b78282d46baeebd3692dc9"}, + {file = "typed_ast-1.5.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e48bf27022897577d8479eaed64701ecaf0467182448bd95759883300ca818c8"}, + {file = "typed_ast-1.5.5-cp311-cp311-win_amd64.whl", hash = "sha256:83509f9324011c9a39faaef0922c6f720f9623afe3fe220b6d0b15638247206b"}, + {file = "typed_ast-1.5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:44f214394fc1af23ca6d4e9e744804d890045d1643dd7e8229951e0ef39429b5"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:118c1ce46ce58fda78503eae14b7664163aa735b620b64b5b725453696f2a35c"}, + {file = "typed_ast-1.5.5-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4919b808efa61101456e87f2d4c75b228f4e52618621c77f1ddcaae15904fa"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:fc2b8c4e1bc5cd96c1a823a885e6b158f8451cf6f5530e1829390b4d27d0807f"}, + {file = "typed_ast-1.5.5-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:16f7313e0a08c7de57f2998c85e2a69a642e97cb32f87eb65fbfe88381a5e44d"}, + {file = "typed_ast-1.5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:2b946ef8c04f77230489f75b4b5a4a6f24c078be4aed241cfabe9cbf4156e7e5"}, + {file = "typed_ast-1.5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2188bc33d85951ea4ddad55d2b35598b2709d122c11c75cffd529fbc9965508e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0635900d16ae133cab3b26c607586131269f88266954eb04ec31535c9a12ef1e"}, + {file = "typed_ast-1.5.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57bfc3cf35a0f2fdf0a88a3044aafaec1d2f24d8ae8cd87c4f58d615fb5b6311"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fe58ef6a764de7b4b36edfc8592641f56e69b7163bba9f9c8089838ee596bfb2"}, + {file = "typed_ast-1.5.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d09d930c2d1d621f717bb217bf1fe2584616febb5138d9b3e8cdd26506c3f6d4"}, + {file = "typed_ast-1.5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:d40c10326893ecab8a80a53039164a224984339b2c32a6baf55ecbd5b1df6431"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fd946abf3c31fb50eee07451a6aedbfff912fcd13cf357363f5b4e834cc5e71a"}, + {file = "typed_ast-1.5.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ed4a1a42df8a3dfb6b40c3d2de109e935949f2f66b19703eafade03173f8f437"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:045f9930a1550d9352464e5149710d56a2aed23a2ffe78946478f7b5416f1ede"}, + {file = "typed_ast-1.5.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:381eed9c95484ceef5ced626355fdc0765ab51d8553fec08661dce654a935db4"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bfd39a41c0ef6f31684daff53befddae608f9daf6957140228a08e51f312d7e6"}, + {file = "typed_ast-1.5.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8c524eb3024edcc04e288db9541fe1f438f82d281e591c548903d5b77ad1ddd4"}, + {file = "typed_ast-1.5.5-cp38-cp38-win_amd64.whl", hash = "sha256:7f58fabdde8dcbe764cef5e1a7fcb440f2463c1bbbec1cf2a86ca7bc1f95184b"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:042eb665ff6bf020dd2243307d11ed626306b82812aba21836096d229fdc6a10"}, + {file = "typed_ast-1.5.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:622e4a006472b05cf6ef7f9f2636edc51bda670b7bbffa18d26b255269d3d814"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1efebbbf4604ad1283e963e8915daa240cb4bf5067053cf2f0baadc4d4fb51b8"}, + {file = "typed_ast-1.5.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0aefdd66f1784c58f65b502b6cf8b121544680456d1cebbd300c2c813899274"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:48074261a842acf825af1968cd912f6f21357316080ebaca5f19abbb11690c8a"}, + {file = "typed_ast-1.5.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:429ae404f69dc94b9361bb62291885894b7c6fb4640d561179548c849f8492ba"}, + {file = "typed_ast-1.5.5-cp39-cp39-win_amd64.whl", hash = "sha256:335f22ccb244da2b5c296e6f96b06ee9bed46526db0de38d2f0e5a6597b81155"}, + {file = "typed_ast-1.5.5.tar.gz", hash = "sha256:94282f7a354f36ef5dbce0ef3467ebf6a258e370ab33d5b40c249fa996e590dd"}, ] [package.source] @@ -2023,101 +1207,25 @@ reference = "tencent" [[package]] name = "virtualenv" -version = "20.6.0" +version = "20.17.1" description = "Virtual Python Environment builder" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "virtualenv-20.6.0-py2.py3-none-any.whl", hash = "sha256:e4fc84337dce37ba34ef520bf2d4392b392999dbe47df992870dc23230f6b758"}, - {file = "virtualenv-20.6.0.tar.gz", hash = "sha256:51df5d8a2fad5d1b13e088ff38a433475768ff61f202356bb9812c454c20ae45"}, -] - -[package.dependencies] -"backports.entry-points-selectable" = ">=1.0.4" -distlib = ">=0.3.1,<1" -filelock = ">=3.0.0,<4" -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" - -[package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "xonsh (>=0.9.16)"] - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "yarl" -version = "1.6.3" -description = "Yet another URL library" -optional = false python-versions = ">=3.6" files = [ - {file = "yarl-1.6.3-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_i686.whl", hash = "sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76"}, - {file = "yarl-1.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366"}, - {file = "yarl-1.6.3-cp36-cp36m-win32.whl", hash = "sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721"}, - {file = "yarl-1.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643"}, - {file = "yarl-1.6.3-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_i686.whl", hash = "sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f"}, - {file = "yarl-1.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970"}, - {file = "yarl-1.6.3-cp37-cp37m-win32.whl", hash = "sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e"}, - {file = "yarl-1.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50"}, - {file = "yarl-1.6.3-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_i686.whl", hash = "sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2"}, - {file = "yarl-1.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2"}, - {file = "yarl-1.6.3-cp38-cp38-win32.whl", hash = "sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896"}, - {file = "yarl-1.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a"}, - {file = "yarl-1.6.3-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_i686.whl", hash = "sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0"}, - {file = "yarl-1.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4"}, - {file = "yarl-1.6.3-cp39-cp39-win32.whl", hash = "sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424"}, - {file = "yarl-1.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6"}, - {file = "yarl-1.6.3.tar.gz", hash = "sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10"}, + {file = "virtualenv-20.17.1-py3-none-any.whl", hash = "sha256:ce3b1684d6e1a20a3e5ed36795a97dfc6af29bc3970ca8dab93e11ac6094b3c4"}, + {file = "virtualenv-20.17.1.tar.gz", hash = "sha256:f8b927684efc6f1cc206c9db297a570ab9ad0e51c16fa9e45487d36d1905c058"}, ] [package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" -typing-extensions = {version = ">=3.7.4", markers = "python_version < \"3.8\""} - -[package.source] -type = "legacy" -url = "https://mirrors.cloud.tencent.com/pypi/simple" -reference = "tencent" - -[[package]] -name = "yaspin" -version = "2.0.0" -description = "Yet Another Terminal Spinner" -optional = false -python-versions = ">=3.6.2,<4.0.0" -files = [ - {file = "yaspin-2.0.0-py3-none-any.whl", hash = "sha256:9da195db6630b76f0d37612f195dd7c325e280ad398dae4fcf30890a124ceb74"}, - {file = "yaspin-2.0.0.tar.gz", hash = "sha256:0498039b3e110f53824417a9f59418a20843e8752b8b15c26bb81a659d4aec5c"}, -] +distlib = ">=0.3.6,<1" +filelock = ">=3.4.1,<4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.8\""} +importlib-resources = {version = ">=5.4", markers = "python_version < \"3.7\""} +platformdirs = ">=2.4,<3" -[package.dependencies] -termcolor = ">=1.1.0,<2.0.0" +[package.extras] +docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] +testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] [package.source] type = "legacy" @@ -2126,18 +1234,18 @@ reference = "tencent" [[package]] name = "zipp" -version = "1.2.0" +version = "3.6.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=2.7" +python-versions = ">=3.6" files = [ - {file = "zipp-1.2.0-py2.py3-none-any.whl", hash = "sha256:e0d9e63797e483a30d27e09fffd308c59a700d365ec34e93cc100844168bf921"}, - {file = "zipp-1.2.0.tar.gz", hash = "sha256:c70410551488251b0fee67b460fb9a536af8d6f9f008ad10ac51f615b6a521b1"}, + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, ] [package.extras] -docs = ["jaraco.packaging (>=3.2)", "rst.linker (>=1.9)", "sphinx"] -testing = ["func-timeout", "jaraco.itertools", "pathlib2", "unittest2"] +docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"] +testing = ["func-timeout", "jaraco.itertools", "pytest (>=4.6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)", "pytest-flake8", "pytest-mypy"] [package.source] type = "legacy" @@ -2151,4 +1259,4 @@ monitor = ["prometheus-client"] [metadata] lock-version = "2.0" python-versions = "^2.7 || ^3.6" -content-hash = "cb0206bba0c517f668997ce4432d3078b5a305eda4646ed57db4c7e6ba18a92c" +content-hash = "3baac9cc03396b5e940a187cba8e9f7acaa6fe24466102aa8b9ceff3127d6993" diff --git a/sdks/bkapi-client-core/pyproject.toml b/sdks/bkapi-client-core/pyproject.toml index 4fa30168..15bb254a 100644 --- a/sdks/bkapi-client-core/pyproject.toml +++ b/sdks/bkapi-client-core/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "bkapi-client-core" -version = "1.2.0" +version = "1.2.1" description = "A toolkit for buiding blueking API clients." readme = "README.md" authors = ["blueking "] @@ -29,18 +29,16 @@ django=["bkoauth", "prometheus-client"] monitor=["prometheus-client"] [tool.poetry.dev-dependencies] -pytest = {version = "^7.0.1", python = "^3.7"} -pytest-cov = {version = "^4.0.0", python = "^3.7"} -pytest-mock = {version = "^3.6.1", python = "^3.7"} -pytest-django = {version = "^4.5.0", python = "^3.7"} -pytest-pretty = {version = "^1.1.0", python = "~3.7.0"} -Faker = {version = "^14.2.1", python = "^3.7"} +pytest = {version = "^7.0.1", python = "^3.6"} +pytest-cov = {version = "^4.0.0", python = "^3.6"} +pytest-mock = {version = "^3.6.1", python = "^3.6"} +pytest-django = {version = "^4.5.0", python = "^3.6"} +Faker = {version = "^14.2.1", python = "^3.6"} ruff = {version = "^0.1.3", python = "~3.7.0"} mypy = {version = "^0.971", python = "^3.7"} pre-commit = {version = "^2.17.0", python = "^3.7"} requests-mock = {version = "^1.9.3"} -dephell = {version = "^0.8.3", python = "^3.7"} -tox = {version = "^3.23.1", python = "^3.7"} +tox = {version = "^3.23.0", python = "^3.6"} more-itertools = "^5.0" types-requests = {version = "^2.25.0", python = "^3.6"} types-six = {version = "1.16.21.9", python = "^3.6"} @@ -172,19 +170,17 @@ known-first-party = ["bkapi_client_core"] [tool.tox] legacy_tox_ini = """ [tox] -minversion = 3.23 +minversion = 3.23.0 isolated_build = True -envlist = py{27,36,37}-requests2-{20,26} +envlist = py{37}-requests2-{20,26} [gh-actions] python = - 2.7: py27 - 3.6: py36 3.7: py37 [testenv] +allowlist_externals = pytest deps = - -r requirements_tox.txt requests2-20: requests==2.20 requests2-26: requests==2.26 commands = diff --git a/sdks/bkapi-client-core/requirements.txt b/sdks/bkapi-client-core/requirements.txt index 951f22f2..5b46cf2b 100644 --- a/sdks/bkapi-client-core/requirements.txt +++ b/sdks/bkapi-client-core/requirements.txt @@ -1,13 +1,13 @@ -certifi==2021.5.30 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -chardet==4.0.0 ; python_version >= "2.7" and python_version < "3.0" +certifi==2021.5.30 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +chardet==4.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" charset-normalizer==2.0.2 ; python_version >= "3.6" and python_version < "4.0" curlify==2.2.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -idna==2.10 ; python_version >= "2.7" and python_version < "3.0" +idna==2.10 ; python_version >= "2.7" and python_version < "3.0.dev0" idna==3.2 ; python_version >= "3.6" and python_version < "4.0" -prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -requests==2.26.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -six==1.16.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +requests==2.26.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +six==1.16.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" typing-extensions==3.10.0.2 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -typing==3.10.0.0 ; python_version >= "2.7" and python_version < "3.0" -urllib3==1.26.6 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4" +typing==3.10.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" +urllib3==1.26.6 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4" diff --git a/sdks/bkapi-client-core/requirements_dev.txt b/sdks/bkapi-client-core/requirements_dev.txt index de795777..5ece0781 100644 --- a/sdks/bkapi-client-core/requirements_dev.txt +++ b/sdks/bkapi-client-core/requirements_dev.txt @@ -1,106 +1,55 @@ -aiohttp==3.7.4.post0 ; python_version >= "3.7" and python_version < "4.0" -appdirs==1.4.4 ; python_version >= "3.7" and python_version < "4.0" -async-timeout==3.0.1 ; python_version >= "3.7" and python_version < "4.0" -atomicwrites==1.4.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -attrs==21.2.0 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -backports-entry-points-selectable==1.1.0 ; python_version >= "3.7" and python_version < "4.0" -backports-functools-lru-cache==1.6.4 ; python_version >= "2.7" and python_version < "3.0" -black==21.6b0 ; python_version >= "3.7" and python_version < "4.0" -cerberus==1.3.4 ; python_version >= "3.7" and python_version < "4.0" -certifi==2021.5.30 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -cfgv==3.3.0 ; python_version >= "3.7" and python_version < "4.0" -chardet==4.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.7" and python_version < "4.0" -charset-normalizer==2.0.2 ; python_version < "4.0" and python_version >= "3.6" -click==8.0.1 ; python_version >= "3.7" and python_version < "4.0" -colorama==0.4.4 ; python_version >= "2.7" and python_version < "3.0" and sys_platform == "win32" or python_version >= "3.6" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.7" and python_version < "4.0" and platform_system == "Windows" -configparser==4.0.2 ; python_version >= "2.7" and python_version < "3.0" -contextlib2==0.6.0.post1 ; python_version >= "2.7" and python_version < "3.0" -coverage==5.5 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4" +atomicwrites==1.4.1 ; python_version >= "3.6" and python_version < "4.0" and sys_platform == "win32" +attrs==22.2.0 ; python_version >= "3.6" and python_version < "4.0" +certifi==2021.5.30 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +cfgv==3.3.1 ; python_version >= "3.7" and python_version < "4.0" +chardet==4.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" +charset-normalizer==2.0.2 ; python_version >= "3.6" and python_version < "4.0" +colorama==0.4.5 ; python_version >= "3.6" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") +coverage[toml]==6.2 ; python_version >= "3.6" and python_version < "4.0" curlify==2.2.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" dataclasses==0.8 ; python_version >= "3.6" and python_version < "3.7" -dephell-archive==0.1.7 ; python_version >= "3.7" and python_version < "4.0" -dephell-argparse==0.1.3 ; python_version >= "3.7" and python_version < "4.0" -dephell-changelogs==0.0.1 ; python_version >= "3.7" and python_version < "4.0" -dephell-discover==0.2.10 ; python_version >= "3.7" and python_version < "4.0" -dephell-licenses==0.1.7 ; python_version >= "3.7" and python_version < "4.0" -dephell-links==0.1.5 ; python_version >= "3.7" and python_version < "4.0" -dephell-markers==1.0.3 ; python_version >= "3.7" and python_version < "4.0" -dephell-pythons==0.1.15 ; python_version >= "3.7" and python_version < "4.0" -dephell-setuptools==0.2.4 ; python_version >= "3.7" and python_version < "4.0" -dephell-shells==0.1.5 ; python_version >= "3.7" and python_version < "4.0" -dephell-specifier==0.2.2 ; python_version >= "3.7" and python_version < "4.0" -dephell-venvs==0.1.18 ; python_version >= "3.7" and python_version < "4.0" -dephell-versioning==0.1.2 ; python_version >= "3.7" and python_version < "4.0" -dephell==0.8.3 ; python_version >= "3.7" and python_version < "4.0" -distlib==0.3.2 ; python_version >= "3.7" and python_version < "4.0" +distlib==0.3.7 ; python_version >= "3.6" and python_version < "4.0" django==1.11.20 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -docutils==0.17.1 ; python_version >= "3.7" and python_version < "4.0" -faker==3.0.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -filelock==3.0.12 ; python_version >= "3.7" and python_version < "4.0" -flake8==3.9.2 ; python_version >= "3.7" and python_version < "4.0" -funcsigs==1.0.2 ; python_version >= "2.7" and python_version < "3.0" -identify==2.2.11 ; python_version >= "3.7" and python_version < "4.0" -idna==2.10 ; python_version >= "2.7" and python_version < "3.0" -idna==3.2 ; python_version < "4.0" and python_version >= "3.6" -importlib-metadata==2.1.1 ; python_version < "3.8" and python_version >= "3.6" or python_version >= "2.7" and python_version < "3.0" -ipaddress==1.0.23 ; python_version >= "2.7" and python_version < "3.0" -isort==5.9.2 ; python_version >= "3.7" and python_version < "4.0" -jinja2==3.0.1 ; python_version >= "3.7" and python_version < "4.0" -m2r==0.2.1 ; python_version >= "3.7" and python_version < "4.0" -markupsafe==2.0.1 ; python_version >= "3.7" and python_version < "4.0" -mccabe==0.6.1 ; python_version >= "3.7" and python_version < "4.0" -mistune==0.8.4 ; python_version >= "3.7" and python_version < "4.0" -mock==3.0.5 ; python_version >= "2.7" and python_version < "3.0" -more-itertools==5.0.0 ; python_version < "3.0" and python_version >= "2.7" or python_version >= "3.6" and python_version < "4.0" -multidict==5.1.0 ; python_version >= "3.7" and python_version < "4.0" -mypy-extensions==0.4.3 ; python_version >= "3.7" and python_version < "4.0" -mypy==0.910 ; python_version >= "3.7" and python_version < "4.0" -nodeenv==1.6.0 ; python_version >= "3.7" and python_version < "4.0" -packaging==20.9 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -pathlib2==2.3.6 ; python_version >= "2.7" and python_version < "3.0" -pathspec==0.8.1 ; python_version >= "3.7" and python_version < "4.0" -pexpect==4.8.0 ; python_version >= "3.7" and python_version < "4.0" -pip==19.3.1 ; python_version >= "3.7" and python_version < "4.0" -platformdirs==2.0.2 ; python_version >= "3.7" and python_version < "4.0" -pluggy==0.13.1 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -pre-commit==2.13.0 ; python_version >= "3.7" and python_version < "4.0" -prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -ptyprocess==0.7.0 ; python_version >= "3.7" and python_version < "4.0" -py==1.10.0 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -pycodestyle==2.7.0 ; python_version >= "3.7" and python_version < "4.0" -pyflakes==2.3.1 ; python_version >= "3.7" and python_version < "4.0" -pyparsing==2.4.7 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -pyproject-flake8==0.0.1a2 ; python_version >= "3.7" and python_version < "4.0" -pytest-cov==2.12.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-django==3.10.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-faker==2.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-mock==2.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest==4.6.11 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -python-dateutil==2.8.2 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +faker==14.2.1 ; python_version >= "3.6" and python_version < "4.0" +filelock==3.4.1 ; python_version >= "3.6" and python_version < "4.0" +identify==2.5.24 ; python_version >= "3.7" and python_version < "4.0" +idna==2.10 ; python_version >= "2.7" and python_version < "3.0.dev0" +idna==3.2 ; python_version >= "3.6" and python_version < "4.0" +importlib-metadata==4.8.3 ; python_version >= "3.6" and python_version < "3.8" +importlib-resources==5.4.0 ; python_version >= "3.6" and python_version < "3.7" +iniconfig==1.1.1 ; python_version >= "3.6" and python_version < "4.0" +more-itertools==5.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +mypy-extensions==1.0.0 ; python_version >= "3.7" and python_version < "4.0" +mypy==0.971 ; python_version >= "3.7" and python_version < "4.0" +nodeenv==1.8.0 ; python_version >= "3.7" and python_version < "4.0" +packaging==21.3 ; python_version >= "3.6" and python_version < "4.0" +platformdirs==2.4.0 ; python_version >= "3.6" and python_version < "4.0" +pluggy==1.0.0 ; python_version >= "3.6" and python_version < "4.0" +pre-commit==2.21.0 ; python_version >= "3.7" and python_version < "4.0" +prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +py==1.11.0 ; python_version >= "3.6" and python_version < "4.0" +pyparsing==3.0.7 ; python_version >= "3.6" and python_version < "4.0" +pytest-cov==4.0.0 ; python_version >= "3.6" and python_version < "4.0" +pytest-django==4.5.2 ; python_version >= "3.6" and python_version < "4.0" +pytest-mock==3.6.1 ; python_version >= "3.6" and python_version < "4.0" +pytest==7.0.1 ; python_version >= "3.6" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.6" and python_version < "4.0" pytz==2021.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pyyaml==5.4.1 ; python_version >= "3.7" and python_version < "4.0" -regex==2021.7.6 ; python_version >= "3.7" and python_version < "4.0" -requests-mock==1.9.3 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -requests==2.26.0 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -ruamel-yaml-clib==0.2.6 ; platform_python_implementation == "CPython" and python_version < "3.10" and python_version >= "3.7" -ruamel-yaml==0.17.10 ; python_version >= "3.7" and python_version < "4.0" -scandir==1.10.0 ; python_version >= "2.7" and python_version < "3.0" -setuptools==65.6.3 ; python_version >= "3.7" and python_version < "4.0" -shellingham==1.4.0 ; python_version >= "3.7" and python_version < "4.0" -six==1.16.0 ; python_version < "3.0" and python_version >= "2.7" or python_version < "4.0" and python_version >= "3.6" -termcolor==1.1.0 ; python_version >= "3.7" and python_version < "4.0" -text-unidecode==1.3 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -toml==0.10.2 ; python_version < "4.0" and python_version >= "3.6" or python_version >= "2.7" and python_version < "3.0" -tomlkit==0.7.2 ; python_version >= "3.7" and python_version < "4.0" -tox==3.24.0 ; python_version >= "3.7" and python_version < "4.0" -typed-ast==1.4.3 ; python_version >= "3.7" and python_version < "3.8" +pyyaml==6.0.1 ; python_version >= "3.7" and python_version < "4.0" +requests-mock==1.11.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +requests==2.26.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +ruff==0.1.4 ; python_version >= "3.7" and python_full_version < "3.8.0" +setuptools==68.0.0 ; python_version >= "3.7" and python_version < "4.0" +six==1.16.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.6" and python_version < "4.0" +tomli==1.2.3 ; python_version >= "3.6" and python_version < "4.0" +tox==3.25.1 ; python_version >= "3.6" and python_version < "4.0" +typed-ast==1.5.5 ; python_version >= "3.7" and python_version < "3.8" types-requests==2.25.0 ; python_version >= "3.6" and python_version < "4.0" -typing-extensions==3.10.0.2 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4.0" and python_version >= "3.6" -typing==3.10.0.0 ; python_version >= "2.7" and python_version < "3.0" -urllib3==1.26.6 ; python_version >= "2.7" and python_version < "3.0" or python_version < "4" and python_version >= "3.6" -virtualenv==20.6.0 ; python_version >= "3.7" and python_version < "4.0" -wcwidth==0.2.5 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -yarl==1.6.3 ; python_version >= "3.7" and python_version < "4.0" -yaspin==2.0.0 ; python_version >= "3.7" and python_version < "4.0" -zipp==1.2.0 ; python_version < "3.8" and python_version >= "3.6" or python_version >= "2.7" and python_version < "3.0" +types-six==1.16.21.9 ; python_version >= "3.6" and python_version < "4.0" +typing-extensions==3.10.0.2 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +typing==3.10.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" +urllib3==1.26.6 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4" +virtualenv==20.17.1 ; python_version >= "3.6" and python_version < "4.0" +zipp==3.6.0 ; python_version >= "3.6" and python_version < "3.8" diff --git a/sdks/bkapi-client-core/requirements_tox.txt b/sdks/bkapi-client-core/requirements_tox.txt index 1935c211..5ece0781 100644 --- a/sdks/bkapi-client-core/requirements_tox.txt +++ b/sdks/bkapi-client-core/requirements_tox.txt @@ -1,9 +1,55 @@ + +atomicwrites==1.4.1 ; python_version >= "3.6" and python_version < "4.0" and sys_platform == "win32" +attrs==22.2.0 ; python_version >= "3.6" and python_version < "4.0" +certifi==2021.5.30 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +cfgv==3.3.1 ; python_version >= "3.7" and python_version < "4.0" +chardet==4.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" +charset-normalizer==2.0.2 ; python_version >= "3.6" and python_version < "4.0" +colorama==0.4.5 ; python_version >= "3.6" and python_version < "4.0" and (sys_platform == "win32" or platform_system == "Windows") +coverage[toml]==6.2 ; python_version >= "3.6" and python_version < "4.0" +curlify==2.2.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +dataclasses==0.8 ; python_version >= "3.6" and python_version < "3.7" +distlib==0.3.7 ; python_version >= "3.6" and python_version < "4.0" django==1.11.20 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -mock==3.0.5 ; python_version >= "2.7" and python_version < "3.0" -prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-cov==2.12.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-django==3.10.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-faker==2.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest-mock==2.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -pytest==4.6.11 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" -requests-mock==1.9.3 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +faker==14.2.1 ; python_version >= "3.6" and python_version < "4.0" +filelock==3.4.1 ; python_version >= "3.6" and python_version < "4.0" +identify==2.5.24 ; python_version >= "3.7" and python_version < "4.0" +idna==2.10 ; python_version >= "2.7" and python_version < "3.0.dev0" +idna==3.2 ; python_version >= "3.6" and python_version < "4.0" +importlib-metadata==4.8.3 ; python_version >= "3.6" and python_version < "3.8" +importlib-resources==5.4.0 ; python_version >= "3.6" and python_version < "3.7" +iniconfig==1.1.1 ; python_version >= "3.6" and python_version < "4.0" +more-itertools==5.0.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +mypy-extensions==1.0.0 ; python_version >= "3.7" and python_version < "4.0" +mypy==0.971 ; python_version >= "3.7" and python_version < "4.0" +nodeenv==1.8.0 ; python_version >= "3.7" and python_version < "4.0" +packaging==21.3 ; python_version >= "3.6" and python_version < "4.0" +platformdirs==2.4.0 ; python_version >= "3.6" and python_version < "4.0" +pluggy==1.0.0 ; python_version >= "3.6" and python_version < "4.0" +pre-commit==2.21.0 ; python_version >= "3.7" and python_version < "4.0" +prometheus-client==0.12.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +py==1.11.0 ; python_version >= "3.6" and python_version < "4.0" +pyparsing==3.0.7 ; python_version >= "3.6" and python_version < "4.0" +pytest-cov==4.0.0 ; python_version >= "3.6" and python_version < "4.0" +pytest-django==4.5.2 ; python_version >= "3.6" and python_version < "4.0" +pytest-mock==3.6.1 ; python_version >= "3.6" and python_version < "4.0" +pytest==7.0.1 ; python_version >= "3.6" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.6" and python_version < "4.0" +pytz==2021.1 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +pyyaml==6.0.1 ; python_version >= "3.7" and python_version < "4.0" +requests-mock==1.11.0 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +requests==2.26.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +ruff==0.1.4 ; python_version >= "3.7" and python_full_version < "3.8.0" +setuptools==68.0.0 ; python_version >= "3.7" and python_version < "4.0" +six==1.16.0 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4.0" +toml==0.10.2 ; python_version >= "3.6" and python_version < "4.0" +tomli==1.2.3 ; python_version >= "3.6" and python_version < "4.0" +tox==3.25.1 ; python_version >= "3.6" and python_version < "4.0" +typed-ast==1.5.5 ; python_version >= "3.7" and python_version < "3.8" +types-requests==2.25.0 ; python_version >= "3.6" and python_version < "4.0" +types-six==1.16.21.9 ; python_version >= "3.6" and python_version < "4.0" +typing-extensions==3.10.0.2 ; python_version >= "2.7" and python_version < "3.0" or python_version >= "3.6" and python_version < "4.0" +typing==3.10.0.0 ; python_version >= "2.7" and python_version < "3.0.dev0" +urllib3==1.26.6 ; python_version >= "2.7" and python_version < "3.0.dev0" or python_version >= "3.6" and python_version < "4" +virtualenv==20.17.1 ; python_version >= "3.6" and python_version < "4.0" +zipp==3.6.0 ; python_version >= "3.6" and python_version < "3.8" diff --git a/sdks/bkapi-client-core/tests/apigateway/test_client.py b/sdks/bkapi-client-core/tests/apigateway/test_client.py index a4a7825f..1fe5df2b 100644 --- a/sdks/bkapi-client-core/tests/apigateway/test_client.py +++ b/sdks/bkapi-client-core/tests/apigateway/test_client.py @@ -27,6 +27,13 @@ class MyClient(APIGatewayClient): client = MyClient() assert client.name == "my_api" + def test_client_name_with_gateway_name(self): + class MyClient(APIGatewayClient): + _gateway_name = "my_api" + + client = MyClient() + assert client.name == "my_api" + def test_init_with_args(self, faker): endpoint = faker.pystr() stage = faker.pystr() diff --git a/sdks/bkapi-client-core/tests/apigateway/test_django_helper.py b/sdks/bkapi-client-core/tests/apigateway/test_django_helper.py index 87dab1bf..3640d822 100644 --- a/sdks/bkapi-client-core/tests/apigateway/test_django_helper.py +++ b/sdks/bkapi-client-core/tests/apigateway/test_django_helper.py @@ -18,6 +18,7 @@ [ ("http://example.com", "http://", "http://example.com"), (None, "http://{api_name}.example.com", "http://{api_name}.example.com"), + (None, "http://{gateway_name}.example.com", "http://{gateway_name}.example.com"), (None, "http://{bkapi_api_name}.example.com", "http://{bkapi_api_name}.example.com"), (None, "http://{test}.example.com", "http://{test}.example.com"), (None, "", ""),