diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 9b48b32..2b1bee5 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -2,7 +2,7 @@ "name": "Default Linux Universal", "image": "mcr.microsoft.com/devcontainers/universal:2-linux", "features": { - "ghcr.io/devcontainers-contrib/features/poetry:1": {} + "ghcr.io/devcontainers-extra/features/poetry:1": {} }, "postCreateCommand": "poetry config virtualenvs.in-project true && poetry install && poetry run pre-commit install", "customizations": { @@ -11,9 +11,9 @@ "python.analysis.diagnosticMode": "workspace", "python.analysis.typeCheckingMode": "basic", "[python]": { - "editor.defaultFormatter": "ms-python.black-formatter", + "editor.defaultFormatter": "ms-python.python", "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" } }, "[javascript]": { @@ -45,8 +45,6 @@ "extensions": [ "ms-python.python", "ms-python.vscode-pylance", - "ms-python.isort", - "ms-python.black-formatter", "EditorConfig.EditorConfig", "esbenp.prettier-vscode" ] diff --git a/.gitignore b/.gitignore index d7c26f5..8eec4f4 100644 --- a/.gitignore +++ b/.gitignore @@ -413,6 +413,7 @@ ipython_config.py # in version control. # https://pdm.fming.dev/#use-with-ide .pdm.toml +.pdm-python # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm __pypackages__/ @@ -524,3 +525,7 @@ dist-ssr *.sw? openapi.json + +.claude + +testbot/ \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index be6618f..6c9e0ba 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -7,26 +7,26 @@ ci: autoupdate_commit_msg: ":arrow_up: auto update by pre-commit hooks" repos: - repo: https://github.com/hadialqattan/pycln - rev: v2.1.3 + rev: v2.6.0 hooks: - id: pycln args: [--config, pyproject.toml] stages: [commit] - repo: https://github.com/pycqa/isort - rev: 5.12.0 + rev: 9.0.0a3 hooks: - id: isort stages: [commit] - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 26.5.0 hooks: - id: black stages: [commit] - repo: https://github.com/pre-commit/mirrors-prettier - rev: v3.0.3 + rev: v4.0.0-alpha.8 hooks: - id: prettier stages: [commit] diff --git a/README.md b/README.md index c80d38f..3b77d20 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ _✨ NoneBot2 命令行工具 前端可视化页面(WebUI) 插件 ✨_ - + diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs index 50ee96f..e7ab8f6 100644 --- a/frontend/.eslintrc.cjs +++ b/frontend/.eslintrc.cjs @@ -1,15 +1,15 @@ /* eslint-env node */ -require('@rushstack/eslint-patch/modern-module-resolution') +require("@rushstack/eslint-patch/modern-module-resolution"); module.exports = { root: true, extends: [ - 'plugin:vue/vue3-essential', - 'eslint:recommended', - '@vue/eslint-config-typescript', - '@vue/eslint-config-prettier/skip-formatting' + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/eslint-config-typescript", + "@vue/eslint-config-prettier/skip-formatting", ], parserOptions: { - ecmaVersion: 'latest' - } -} + ecmaVersion: "latest", + }, +}; diff --git a/frontend/openapi-ts.config.ts b/frontend/openapi-ts.config.ts index e4279b9..642c32f 100644 --- a/frontend/openapi-ts.config.ts +++ b/frontend/openapi-ts.config.ts @@ -1,13 +1,13 @@ -import { defineConfig } from '@hey-api/openapi-ts' +import { defineConfig } from "@hey-api/openapi-ts"; export default defineConfig({ - client: '@hey-api/client-fetch', - input: '../openapi.json', + client: "@hey-api/client-fetch", + input: "../openapi.json", output: { - format: 'prettier', - path: './src/client/api' + format: "prettier", + path: "./src/client/api", }, services: { - asClass: true - } -}) + asClass: true, + }, +}); diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js index ffde384..750d0a3 100644 --- a/frontend/postcss.config.js +++ b/frontend/postcss.config.js @@ -1,8 +1,8 @@ export default { plugins: { - 'postcss-import': {}, - 'tailwindcss/nesting': 'postcss-nesting', + "postcss-import": {}, + "tailwindcss/nesting": "postcss-nesting", tailwindcss: {}, - autoprefixer: {} - } -} + autoprefixer: {}, + }, +}; diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 13c4a63..e2af2f2 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,9 +1,9 @@ diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 98e23e3..f20d7f2 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -1,4 +1,4 @@ -@import 'material-symbols'; +@import "material-symbols"; @tailwind base; @tailwind components; diff --git a/frontend/src/client/api/index.ts b/frontend/src/client/api/index.ts index d4894af..1cb041d 100644 --- a/frontend/src/client/api/index.ts +++ b/frontend/src/client/api/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export * from './schemas.gen' -export * from './services.gen' -export * from './types.gen' +export * from "./schemas.gen"; +export * from "./services.gen"; +export * from "./types.gen"; diff --git a/frontend/src/client/api/schemas.gen.ts b/frontend/src/client/api/schemas.gen.ts index e1a5050..672b2f8 100644 --- a/frontend/src/client/api/schemas.gen.ts +++ b/frontend/src/client/api/schemas.gen.ts @@ -1,1267 +1,1269 @@ // This file is auto-generated by @hey-api/openapi-ts export const AdapterSchema = { - title: 'Adapter', - type: 'object', + title: "Adapter", + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string', - default: '0.0.0' + title: "Version", + type: "string", + default: "0.0.0", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false - } - } -} as const + title: "Is Download", + type: "boolean", + default: false, + }, + }, +} as const; export const AddProjectDataSchema = { - title: 'AddProjectData', - required: ['project_name', 'project_dir', 'mirror_url'], - type: 'object', + title: "AddProjectData", + required: ["project_name", "project_dir", "mirror_url"], + type: "object", properties: { project_name: { - title: 'Project Name', - type: 'string' + title: "Project Name", + type: "string", }, project_dir: { - title: 'Project Dir', - type: 'string' + title: "Project Dir", + type: "string", }, mirror_url: { - title: 'Mirror Url', - type: 'string' + title: "Mirror Url", + type: "string", }, adapters: { - title: 'Adapters', - type: 'array', + title: "Adapters", + type: "array", items: { - type: 'string' + type: "string", }, - default: [] + default: [], }, plugins: { - title: 'Plugins', - type: 'array', + title: "Plugins", + type: "array", items: { - type: 'string' + type: "string", }, - default: [] + default: [], }, plugin_dirs: { - title: 'Plugin Dirs', - type: 'array', + title: "Plugin Dirs", + type: "array", items: { - type: 'string' + type: "string", }, - default: [] + default: [], }, builtin_plugins: { - title: 'Builtin Plugins', - type: 'array', + title: "Builtin Plugins", + type: "array", items: { - type: 'string' + type: "string", }, - default: [] - } - } -} as const + default: [], + }, + }, +} as const; export const Body_search_nonebot_store_item_v1_store_nonebot_search_postSchema = { - title: 'Body_search_nonebot_store_item_v1_store_nonebot_search_post', - required: ['data'], - type: 'object', + title: "Body_search_nonebot_store_item_v1_store_nonebot_search_post", + required: ["data"], + type: "object", properties: { data: { - $ref: '#/components/schemas/SearchRequest' - } - } -} as const + $ref: "#/components/schemas/SearchRequest", + }, + }, +} as const; export const ConfigTypeSchema = { - title: 'ConfigType', - enum: ['project', 'toml'], - type: 'string', - description: 'An enumeration.' -} as const + title: "ConfigType", + enum: ["project", "toml"], + type: "string", + description: "An enumeration.", +} as const; export const CreateProjectDataSchema = { - title: 'CreateProjectData', + title: "CreateProjectData", required: [ - 'is_bootstrap', - 'project_name', - 'project_dir', - 'mirror_url', - 'drivers', - 'adapters', - 'use_src' + "is_bootstrap", + "project_name", + "project_dir", + "mirror_url", + "drivers", + "adapters", + "use_src", ], - type: 'object', + type: "object", properties: { is_bootstrap: { - title: 'Is Bootstrap', - type: 'boolean' + title: "Is Bootstrap", + type: "boolean", }, project_name: { - title: 'Project Name', - type: 'string' + title: "Project Name", + type: "string", }, project_dir: { - title: 'Project Dir', - type: 'string' + title: "Project Dir", + type: "string", }, mirror_url: { - title: 'Mirror Url', - type: 'string' + title: "Mirror Url", + type: "string", }, drivers: { - title: 'Drivers', - type: 'array', + title: "Drivers", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo", + }, }, adapters: { - title: 'Adapters', - type: 'array', + title: "Adapters", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo", + }, }, use_src: { - title: 'Use Src', - type: 'boolean' - } - } -} as const + title: "Use Src", + type: "boolean", + }, + }, +} as const; export const DriverSchema = { - title: 'Driver', - type: 'object', + title: "Driver", + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string', - default: '0.0.0' + title: "Version", + type: "string", + default: "0.0.0", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false - } - } -} as const + title: "Is Download", + type: "boolean", + default: false, + }, + }, +} as const; export const FileInfoSchema = { - title: 'FileInfo', - required: ['name', 'is_dir', 'path', 'modified_time', 'absolute_path'], - type: 'object', + title: "FileInfo", + required: ["name", "is_dir", "path", "modified_time", "absolute_path"], + type: "object", properties: { name: { - title: 'Name', - type: 'string' + title: "Name", + type: "string", }, is_dir: { - title: 'Is Dir', - type: 'boolean' + title: "Is Dir", + type: "boolean", }, path: { - title: 'Path', - type: 'string' + title: "Path", + type: "string", }, modified_time: { - title: 'Modified Time', - type: 'string' + title: "Modified Time", + type: "string", }, absolute_path: { - title: 'Absolute Path', - type: 'string' - } - } -} as const + title: "Absolute Path", + type: "string", + }, + }, +} as const; export const FileResponseSchema = { - title: 'FileResponse', - required: ['detail'], - type: 'object', + title: "FileResponse", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - $ref: '#/components/schemas/FileInfo' - } - } - } -} as const + $ref: "#/components/schemas/FileInfo", + }, + }, + }, +} as const; export const GenericResponse_List_nb_cli_plugin_webui_app_handlers_process_schemas_ProcessLog__Schema = { - title: 'GenericResponse[List[nb_cli_plugin_webui.app.handlers.process.schemas.ProcessLog]]', - required: ['detail'], - type: 'object', + title: + "GenericResponse[List[nb_cli_plugin_webui.app.handlers.process.schemas.ProcessLog]]", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - $ref: '#/components/schemas/ProcessLog' - } - } - } - } as const + $ref: "#/components/schemas/ProcessLog", + }, + }, + }, + } as const; -export const GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__Schema = { - title: 'GenericResponse[List[nb_cli_plugin_webui.app.models.base.ModuleInfo]]', - required: ['detail'], - type: 'object', - properties: { - detail: { - title: 'Detail', - type: 'array', - items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo' - } - } - } -} as const +export const GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__Schema = + { + title: "GenericResponse[List[nb_cli_plugin_webui.app.models.base.ModuleInfo]]", + required: ["detail"], + type: "object", + properties: { + detail: { + title: "Detail", + type: "array", + items: { + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo", + }, + }, + }, + } as const; export const GenericResponse_List_nb_cli_plugin_webui_app_models_base_Plugin__Schema = { - title: 'GenericResponse[List[nb_cli_plugin_webui.app.models.base.Plugin]]', - required: ['detail'], - type: 'object', + title: "GenericResponse[List[nb_cli_plugin_webui.app.models.base.Plugin]]", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__Plugin' - } - } - } -} as const + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__Plugin", + }, + }, + }, +} as const; export const GenericResponse_List_str__Schema = { - title: 'GenericResponse[List[str]]', - required: ['detail'], - type: 'object', + title: "GenericResponse[List[str]]", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - type: 'string' - } - } - } -} as const + type: "string", + }, + }, + }, +} as const; export const GenericResponse_NoneBotProjectMeta_Schema = { - title: 'GenericResponse[NoneBotProjectMeta]', - required: ['detail'], - type: 'object', + title: "GenericResponse[NoneBotProjectMeta]", + required: ["detail"], + type: "object", properties: { detail: { - $ref: '#/components/schemas/NoneBotProjectMeta' - } - } -} as const + $ref: "#/components/schemas/NoneBotProjectMeta", + }, + }, +} as const; export const GenericResponse_ProjectTomlDetail_Schema = { - title: 'GenericResponse[ProjectTomlDetail]', - required: ['detail'], - type: 'object', + title: "GenericResponse[ProjectTomlDetail]", + required: ["detail"], + type: "object", properties: { detail: { - $ref: '#/components/schemas/ProjectTomlDetail' - } - } -} as const + $ref: "#/components/schemas/ProjectTomlDetail", + }, + }, +} as const; export const GenericResponse_int_Schema = { - title: 'GenericResponse[int]', - required: ['detail'], - type: 'object', + title: "GenericResponse[int]", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'integer' - } - } -} as const + title: "Detail", + type: "integer", + }, + }, +} as const; export const GenericResponse_str_Schema = { - title: 'GenericResponse[str]', - required: ['detail'], - type: 'object', + title: "GenericResponse[str]", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'string' - } - } -} as const + title: "Detail", + type: "string", + }, + }, +} as const; export const HTTPValidationErrorSchema = { - title: 'HTTPValidationError', - type: 'object', + title: "HTTPValidationError", + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - $ref: '#/components/schemas/ValidationError' - } - } - } -} as const + $ref: "#/components/schemas/ValidationError", + }, + }, + }, +} as const; export const ItemSchema = { - title: 'Item', - required: ['type'], - type: 'object', + title: "Item", + required: ["type"], + type: "object", properties: { enum: { - title: 'Enum', - type: 'array', - items: {} + title: "Enum", + type: "array", + items: {}, }, type: { - title: 'Type', - type: 'string' - } - } -} as const + title: "Type", + type: "string", + }, + }, +} as const; export const ListProjectResponseSchema = { - title: 'ListProjectResponse', - required: ['detail'], - type: 'object', + title: "ListProjectResponse", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'object', + title: "Detail", + type: "object", additionalProperties: { - $ref: '#/components/schemas/NoneBotProjectMeta' - } - } - } -} as const + $ref: "#/components/schemas/NoneBotProjectMeta", + }, + }, + }, +} as const; export const LogLevelSchema = { - title: 'LogLevel', - enum: ['STDOUT', 'INFO', 'WARNING', 'ERROR', 'DEBUG'], - type: 'string', - description: 'An enumeration.' -} as const + title: "LogLevel", + enum: ["STDOUT", "INFO", "WARNING", "ERROR", "DEBUG"], + type: "string", + description: "An enumeration.", +} as const; export const LoginRequestSchema = { - title: 'LoginRequest', - required: ['token', 'mark'], - type: 'object', + title: "LoginRequest", + required: ["token", "mark"], + type: "object", properties: { token: { - title: 'Token', - type: 'string' + title: "Token", + type: "string", }, mark: { - title: 'Mark', - type: 'string' - } - } -} as const + title: "Mark", + type: "string", + }, + }, +} as const; export const ModuleConfigChildSchema = { - title: 'ModuleConfigChild', - required: ['title', 'name', 'conf_type', 'unique_items', 'is_secret'], - type: 'object', + title: "ModuleConfigChild", + required: ["title", "name", "conf_type", "unique_items", "is_secret"], + type: "object", properties: { title: { - title: 'Title', - type: 'string' + title: "Title", + type: "string", }, description: { - title: 'Description', - type: 'string' + title: "Description", + type: "string", }, name: { - title: 'Name', - type: 'string' + title: "Name", + type: "string", }, default: { - title: 'Default' + title: "Default", }, conf_type: { - title: 'Conf Type', - type: 'string' + title: "Conf Type", + type: "string", }, enum: { - title: 'Enum', - type: 'array', - items: {} + title: "Enum", + type: "array", + items: {}, }, configured: { - title: 'Configured' + title: "Configured", }, items: { - $ref: '#/components/schemas/Item' + $ref: "#/components/schemas/Item", }, unique_items: { - title: 'Unique Items', - type: 'boolean' + title: "Unique Items", + type: "boolean", }, is_secret: { - title: 'Is Secret', - type: 'boolean' + title: "Is Secret", + type: "boolean", }, latest_change: { - title: 'Latest Change', - type: 'string', - default: '.env' - } - } -} as const + title: "Latest Change", + type: "string", + default: ".env", + }, + }, +} as const; export const ModuleConfigFatherSchema = { - title: 'ModuleConfigFather', - required: ['title', 'name', 'module_type', 'properties'], - type: 'object', + title: "ModuleConfigFather", + required: ["title", "name", "module_type", "properties"], + type: "object", properties: { title: { - title: 'Title', - type: 'string' + title: "Title", + type: "string", }, description: { - title: 'Description', - type: 'string' + title: "Description", + type: "string", }, name: { - title: 'Name', - type: 'string' + title: "Name", + type: "string", }, module_type: { - title: 'Module Type', + title: "Module Type", anyOf: [ { - $ref: '#/components/schemas/ModuleType' + $ref: "#/components/schemas/ModuleType", }, { - $ref: '#/components/schemas/ConfigType' - } - ] + $ref: "#/components/schemas/ConfigType", + }, + ], }, properties: { - title: 'Properties', - type: 'array', + title: "Properties", + type: "array", items: { - $ref: '#/components/schemas/ModuleConfigChild' - } - } - } -} as const + $ref: "#/components/schemas/ModuleConfigChild", + }, + }, + }, +} as const; export const ModuleConfigResponseSchema = { - title: 'ModuleConfigResponse', - required: ['detail'], - type: 'object', + title: "ModuleConfigResponse", + required: ["detail"], + type: "object", properties: { detail: { - title: 'Detail', - type: 'array', + title: "Detail", + type: "array", items: { - $ref: '#/components/schemas/ModuleConfigFather' - } - } - } -} as const + $ref: "#/components/schemas/ModuleConfigFather", + }, + }, + }, +} as const; export const ModuleConfigUpdateRequestSchema = { - title: 'ModuleConfigUpdateRequest', - required: ['env', 'conf_type', 'k'], - type: 'object', + title: "ModuleConfigUpdateRequest", + required: ["env", "conf_type", "k"], + type: "object", properties: { env: { - title: 'Env', - type: 'string' + title: "Env", + type: "string", }, conf_type: { - title: 'Conf Type', - type: 'string' + title: "Conf Type", + type: "string", }, k: { - title: 'K', - type: 'string' + title: "K", + type: "string", }, v: { - title: 'V' - } - } -} as const + title: "V", + }, + }, +} as const; export const ModuleTagSchema = { - title: 'ModuleTag', - required: ['label', 'color'], - type: 'object', + title: "ModuleTag", + required: ["label", "color"], + type: "object", properties: { label: { - title: 'Label', - type: 'string' + title: "Label", + type: "string", }, color: { - title: 'Color', - type: 'string' - } - } -} as const + title: "Color", + type: "string", + }, + }, +} as const; export const ModuleTypeSchema = { - title: 'ModuleType', - enum: ['module', 'plugin', 'adapter', 'driver'], - type: 'string', - description: 'An enumeration.' -} as const + title: "ModuleType", + enum: ["module", "plugin", "adapter", "driver"], + type: "string", + description: "An enumeration.", +} as const; export const NoneBotProjectMetaSchema = { - title: 'NoneBotProjectMeta', + title: "NoneBotProjectMeta", required: [ - 'project_id', - 'project_name', - 'project_dir', - 'mirror_url', - 'adapters', - 'drivers', - 'plugins', - 'plugin_dirs', - 'builtin_plugins' + "project_id", + "project_name", + "project_dir", + "mirror_url", + "adapters", + "drivers", + "plugins", + "plugin_dirs", + "builtin_plugins", ], - type: 'object', + type: "object", properties: { project_id: { - title: 'Project Id', - type: 'string' + title: "Project Id", + type: "string", }, project_name: { - title: 'Project Name', - type: 'string' + title: "Project Name", + type: "string", }, project_dir: { - title: 'Project Dir', - type: 'string' + title: "Project Dir", + type: "string", }, mirror_url: { - title: 'Mirror Url', - type: 'string' + title: "Mirror Url", + type: "string", }, adapters: { - title: 'Adapters', - type: 'array', + title: "Adapters", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo", + }, }, drivers: { - title: 'Drivers', - type: 'array', + title: "Drivers", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__ModuleInfo", + }, }, plugins: { - title: 'Plugins', - type: 'array', + title: "Plugins", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__base__Plugin' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__base__Plugin", + }, }, plugin_dirs: { - title: 'Plugin Dirs', - type: 'array', + title: "Plugin Dirs", + type: "array", items: { - type: 'string' - } + type: "string", + }, }, builtin_plugins: { - title: 'Builtin Plugins', - type: 'array', + title: "Builtin Plugins", + type: "array", items: { - type: 'string' - } + type: "string", + }, }, is_running: { - title: 'Is Running', - type: 'boolean', - default: false + title: "Is Running", + type: "boolean", + default: false, }, use_env: { - title: 'Use Env', - type: 'string', - default: '.env' + title: "Use Env", + type: "string", + default: ".env", }, use_run_script: { - title: 'Use Run Script', - type: 'boolean', - default: false + title: "Use Run Script", + type: "boolean", + default: false, }, run_script_name: { - title: 'Run Script Name', - type: 'string', - default: 'bot.py' - } - } -} as const + title: "Run Script Name", + type: "string", + default: "bot.py", + }, + }, +} as const; export const PluginTypeSchema = { - title: 'PluginType', - enum: ['application', 'library'], - type: 'string', + title: "PluginType", + enum: ["application", "library"], + type: "string", description: `类型参考: -- https://github.com/nonebot/noneflow/blob/main/src/utils/validation/constants.py#L17` -} as const +- https://github.com/nonebot/noneflow/blob/main/src/utils/validation/constants.py#L17`, +} as const; export const ProcessLogSchema = { - title: 'ProcessLog', - required: ['message'], - type: 'object', + title: "ProcessLog", + required: ["message"], + type: "object", properties: { time: { - title: 'Time', + title: "Time", anyOf: [ { - type: 'string', - format: 'date-time' + type: "string", + format: "date-time", }, { - type: 'string' - } - ] + type: "string", + }, + ], }, level: { allOf: [ { - $ref: '#/components/schemas/LogLevel' - } + $ref: "#/components/schemas/LogLevel", + }, ], - default: 'STDOUT' + default: "STDOUT", }, message: { - title: 'Message', - type: 'string' - } - } -} as const + title: "Message", + type: "string", + }, + }, +} as const; export const ProjectTomlDetailSchema = { - title: 'ProjectTomlDetail', - required: ['project_name', 'adapters', 'plugins', 'plugin_dirs', 'builtin_plugins'], - type: 'object', + title: "ProjectTomlDetail", + required: ["project_name", "adapters", "plugins", "plugin_dirs", "builtin_plugins"], + type: "object", properties: { project_name: { - title: 'Project Name', - type: 'string' + title: "Project Name", + type: "string", }, adapters: { - title: 'Adapters', - type: 'array', + title: "Adapters", + type: "array", items: { - type: 'object', + type: "object", additionalProperties: { - type: 'string' - } - } + type: "string", + }, + }, }, plugins: { - title: 'Plugins', - type: 'array', + title: "Plugins", + type: "array", items: { - type: 'string' - } + type: "string", + }, }, plugin_dirs: { - title: 'Plugin Dirs', - type: 'array', + title: "Plugin Dirs", + type: "array", items: { - type: 'string' - } + type: "string", + }, }, builtin_plugins: { - title: 'Builtin Plugins', - type: 'array', + title: "Builtin Plugins", + type: "array", items: { - type: 'string' - } - } - } -} as const + type: "string", + }, + }, + }, +} as const; export const SearchRequestSchema = { - title: 'SearchRequest', - required: ['module_type', 'content'], - type: 'object', + title: "SearchRequest", + required: ["module_type", "content"], + type: "object", properties: { module_type: { - $ref: '#/components/schemas/ModuleType' + $ref: "#/components/schemas/ModuleType", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__store__SearchTag' + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__store__SearchTag", }, - default: [] + default: [], }, content: { - title: 'Content', - type: 'string' - } - } -} as const + title: "Content", + type: "string", + }, + }, +} as const; export const SimpleModelSchema = { - title: 'SimpleModel', - required: ['name', 'is_dir', 'path'], - type: 'object', + title: "SimpleModel", + required: ["name", "is_dir", "path"], + type: "object", properties: { name: { - title: 'Name', - type: 'string' + title: "Name", + type: "string", }, is_dir: { - title: 'Is Dir', - type: 'boolean' + title: "Is Dir", + type: "boolean", }, path: { - title: 'Path', - type: 'string' - } - } -} as const + title: "Path", + type: "string", + }, + }, +} as const; export const StoreListResponseSchema = { - title: 'StoreListResponse', - required: ['detail', 'now_page', 'total_page', 'total_item'], - type: 'object', + title: "StoreListResponse", + required: ["detail", "now_page", "total_page", "total_item"], + type: "object", properties: { detail: { - title: 'Detail', + title: "Detail", anyOf: [ { - type: 'array', + type: "array", items: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__store__Plugin' - } + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__store__Plugin", + }, }, { - type: 'array', + type: "array", items: { - $ref: '#/components/schemas/Adapter' - } + $ref: "#/components/schemas/Adapter", + }, }, { - type: 'array', + type: "array", items: { - $ref: '#/components/schemas/Driver' - } - } - ] + $ref: "#/components/schemas/Driver", + }, + }, + ], }, now_page: { - title: 'Now Page', - type: 'integer' + title: "Now Page", + type: "integer", }, total_page: { - title: 'Total Page', - type: 'integer' + title: "Total Page", + type: "integer", }, total_item: { - title: 'Total Item', - type: 'integer' - } - } -} as const + title: "Total Item", + type: "integer", + }, + }, +} as const; export const ValidationErrorSchema = { - title: 'ValidationError', - required: ['loc', 'msg', 'type'], - type: 'object', + title: "ValidationError", + required: ["loc", "msg", "type"], + type: "object", properties: { loc: { - title: 'Location', - type: 'array', + title: "Location", + type: "array", items: { anyOf: [ { - type: 'string' + type: "string", }, { - type: 'integer' - } - ] - } + type: "integer", + }, + ], + }, }, msg: { - title: 'Message', - type: 'string' + title: "Message", + type: "string", }, type: { - title: 'Error Type', - type: 'string' - } - } -} as const + title: "Error Type", + type: "string", + }, + }, +} as const; export const VerifyRequestSchema = { - title: 'VerifyRequest', - required: ['jwt_token'], - type: 'object', + title: "VerifyRequest", + required: ["jwt_token"], + type: "object", properties: { jwt_token: { - title: 'Jwt Token', - type: 'string' - } - } -} as const + title: "Jwt Token", + type: "string", + }, + }, +} as const; export const nb_cli_plugin_webui__app__models__base__ModuleInfoSchema = { - title: 'ModuleInfo', - type: 'object', + title: "ModuleInfo", + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string', - default: '0.0.0' + title: "Version", + type: "string", + default: "0.0.0", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false - } - } -} as const + title: "Is Download", + type: "boolean", + default: false, + }, + }, +} as const; export const nb_cli_plugin_webui__app__models__base__PluginSchema = { - title: 'Plugin', - type: 'object', + title: "Plugin", + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string', - default: '0.0.0' + title: "Version", + type: "string", + default: "0.0.0", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false + title: "Is Download", + type: "boolean", + default: false, }, config: { - title: 'Config', - type: 'object', - default: {} - } - } -} as const + title: "Config", + type: "object", + default: {}, + }, + }, +} as const; export const nb_cli_plugin_webui__app__models__store__ModuleInfoSchema = { - title: 'ModuleInfo', - type: 'object', + title: "ModuleInfo", + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string', - default: '0.0.0' + title: "Version", + type: "string", + default: "0.0.0", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false + title: "Is Download", + type: "boolean", + default: false, }, module_type: { - title: 'Module Type', - enum: ['module'], - type: 'string', - default: 'module' - } - } -} as const + title: "Module Type", + enum: ["module"], + type: "string", + default: "module", + }, + }, +} as const; export const nb_cli_plugin_webui__app__models__store__PluginSchema = { - title: 'Plugin', - required: ['version', 'valid', 'time', 'skip_test'], - type: 'object', + title: "Plugin", + required: ["version", "valid", "time", "skip_test"], + type: "object", properties: { module_name: { - title: 'Module Name', - type: 'string', - default: 'unknown' + title: "Module Name", + type: "string", + default: "unknown", }, project_link: { - title: 'Project Link', - type: 'string', - default: 'unknown' + title: "Project Link", + type: "string", + default: "unknown", }, name: { - title: 'Name', - type: 'string', - default: 'unknown' + title: "Name", + type: "string", + default: "unknown", }, desc: { - title: 'Desc', - type: 'string', - default: 'unknown' + title: "Desc", + type: "string", + default: "unknown", }, author: { - title: 'Author', - type: 'string', - default: 'unknown' + title: "Author", + type: "string", + default: "unknown", }, homepage: { - title: 'Homepage', - type: 'string', - default: 'unknown' + title: "Homepage", + type: "string", + default: "unknown", }, usage: { - title: 'Usage', - type: 'string', - default: 'unknown' + title: "Usage", + type: "string", + default: "unknown", }, extra: { - title: 'Extra', - type: 'object' + title: "Extra", + type: "object", }, tags: { - title: 'Tags', - type: 'array', + title: "Tags", + type: "array", items: { - $ref: '#/components/schemas/ModuleTag' - } + $ref: "#/components/schemas/ModuleTag", + }, }, is_official: { - title: 'Is Official', - type: 'boolean', - default: false + title: "Is Official", + type: "boolean", + default: false, }, version: { - title: 'Version', - type: 'string' + title: "Version", + type: "string", }, is_download: { - title: 'Is Download', - type: 'boolean', - default: false + title: "Is Download", + type: "boolean", + default: false, }, config: { - title: 'Config', - type: 'object', - default: {} + title: "Config", + type: "object", + default: {}, }, type: { - $ref: '#/components/schemas/PluginType' + $ref: "#/components/schemas/PluginType", }, supported_adapters: { - title: 'Supported Adapters', - type: 'array', + title: "Supported Adapters", + type: "array", items: { - type: 'string' - } + type: "string", + }, }, valid: { - title: 'Valid', - type: 'boolean' + title: "Valid", + type: "boolean", }, time: { - title: 'Time', - type: 'string' + title: "Time", + type: "string", }, skip_test: { - title: 'Skip Test', - type: 'boolean' + title: "Skip Test", + type: "boolean", }, module_type: { - title: 'Module Type', - enum: ['plugin'], - type: 'string', - default: 'plugin' - } + title: "Module Type", + enum: ["plugin"], + type: "string", + default: "plugin", + }, }, description: `结构参考: -- https://github.com/nonebot/noneflow/blob/main/src/utils/store_test/models.py#L14` -} as const +- https://github.com/nonebot/noneflow/blob/main/src/utils/store_test/models.py#L14`, +} as const; export const nb_cli_plugin_webui__app__models__store__SearchTagSchema = { - title: 'SearchTag', - required: ['label'], - type: 'object', + title: "SearchTag", + required: ["label"], + type: "object", properties: { label: { - $ref: '#/components/schemas/nb_cli_plugin_webui__app__models__types__SearchTag' + $ref: "#/components/schemas/nb_cli_plugin_webui__app__models__types__SearchTag", }, text: { - title: 'Text', - type: 'string', - default: '' - } - } -} as const + title: "Text", + type: "string", + default: "", + }, + }, +} as const; export const nb_cli_plugin_webui__app__models__types__SearchTagSchema = { - title: 'SearchTag', - enum: ['official', 'valid', 'latest', 'downloaded', 'author', 'tag'], - type: 'string', - description: 'An enumeration.' -} as const + title: "SearchTag", + enum: ["official", "valid", "latest", "downloaded", "author", "tag"], + type: "string", + description: "An enumeration.", +} as const; diff --git a/frontend/src/client/api/services.gen.ts b/frontend/src/client/api/services.gen.ts index 3292094..c1f1095 100644 --- a/frontend/src/client/api/services.gen.ts +++ b/frontend/src/client/api/services.gen.ts @@ -1,6 +1,6 @@ // This file is auto-generated by @hey-api/openapi-ts -import { createClient, createConfig, type Options } from '@hey-api/client-fetch' +import { createClient, createConfig, type Options } from "@hey-api/client-fetch"; import type { AuthTokenV1AuthLoginPostData, AuthTokenV1AuthLoginPostError, @@ -96,10 +96,10 @@ import type { GetAdaptersV1ProjectAdaptersGetResponse, GetDriversV1ProjectDriversGetData, GetDriversV1ProjectDriversGetError, - GetDriversV1ProjectDriversGetResponse -} from './types.gen' + GetDriversV1ProjectDriversGetResponse, +} from "./types.gen"; -export const client = createClient(createConfig()) +export const client = createClient(createConfig()); export class AuthService { /** @@ -107,7 +107,7 @@ export class AuthService { * - 登录, 成功后返回 JWT 密钥 */ public static authTokenV1AuthLoginPost( - options: Options + options: Options, ) { return (options?.client ?? client).post< AuthTokenV1AuthLoginPostResponse, @@ -115,8 +115,8 @@ export class AuthService { ThrowOnError >({ ...options, - url: '/v1/auth/login' - }) + url: "/v1/auth/login", + }); } /** @@ -124,7 +124,7 @@ export class AuthService { * - 验证 JWT 密钥是否可用, 返回到期时间戳 */ public static verifyTokenV1AuthVerifyPost( - options: Options + options: Options, ) { return (options?.client ?? client).post< VerifyTokenV1AuthVerifyPostResponse, @@ -132,8 +132,8 @@ export class AuthService { ThrowOnError >({ ...options, - url: '/v1/auth/verify' - }) + url: "/v1/auth/verify", + }); } } @@ -143,7 +143,7 @@ export class FileService { * - 根据提供的路径, 基于 base_dir 返回文件列表 */ public static getFileListV1FileListGet( - options: Options + options: Options, ) { return (options?.client ?? client).get< GetFileListV1FileListGetResponse, @@ -151,8 +151,8 @@ export class FileService { ThrowOnError >({ ...options, - url: '/v1/file/list' - }) + url: "/v1/file/list", + }); } /** @@ -160,7 +160,7 @@ export class FileService { * - 根据提供的路径, 基于 base_dir 创建文件 */ public static createFileV1FileCreatePost( - options: Options + options: Options, ) { return (options?.client ?? client).post< CreateFileV1FileCreatePostResponse, @@ -168,8 +168,8 @@ export class FileService { ThrowOnError >({ ...options, - url: '/v1/file/create' - }) + url: "/v1/file/create", + }); } /** @@ -177,7 +177,7 @@ export class FileService { * - 根据提供的路径, 基于 base_dir 删除文件 */ public static deleteFileV1FileDeleteDelete( - options: Options + options: Options, ) { return (options?.client ?? client).delete< DeleteFileV1FileDeleteDeleteResponse, @@ -185,8 +185,8 @@ export class FileService { ThrowOnError >({ ...options, - url: '/v1/file/delete' - }) + url: "/v1/file/delete", + }); } } @@ -195,17 +195,17 @@ export class StoreService { * Install Nonebot Module * - 安装模块至 NoneBot 实例 */ - public static installNonebotModuleV1StoreNonebotInstallPost( - options: Options - ) { + public static installNonebotModuleV1StoreNonebotInstallPost< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).post< InstallNonebotModuleV1StoreNonebotInstallPostResponse, InstallNonebotModuleV1StoreNonebotInstallPostError, ThrowOnError >({ ...options, - url: '/v1/store/nonebot/install' - }) + url: "/v1/store/nonebot/install", + }); } /** @@ -213,33 +213,35 @@ export class StoreService { * - 卸载 NoneBot 实例中的模块 */ public static uninstallNonebotModuleV1StoreNonebotUninstallPost< - ThrowOnError extends boolean = false - >(options: Options) { + ThrowOnError extends boolean = false, + >( + options: Options, + ) { return (options?.client ?? client).post< UninstallNonebotModuleV1StoreNonebotUninstallPostResponse, UninstallNonebotModuleV1StoreNonebotUninstallPostError, ThrowOnError >({ ...options, - url: '/v1/store/nonebot/uninstall' - }) + url: "/v1/store/nonebot/uninstall", + }); } /** * Get Nonebot Store Items * - 获取 NoneBot Store 中的模块列表 */ - public static getNonebotStoreItemsV1StoreNonebotListGet( - options: Options - ) { + public static getNonebotStoreItemsV1StoreNonebotListGet< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).get< GetNonebotStoreItemsV1StoreNonebotListGetResponse, GetNonebotStoreItemsV1StoreNonebotListGetError, ThrowOnError >({ ...options, - url: '/v1/store/nonebot/list' - }) + url: "/v1/store/nonebot/list", + }); } /** @@ -247,7 +249,7 @@ export class StoreService { * - 搜索 NoneBot Store 中的模块 */ public static searchNonebotStoreItemV1StoreNonebotSearchPost< - ThrowOnError extends boolean = false + ThrowOnError extends boolean = false, >(options: Options) { return (options?.client ?? client).post< SearchNonebotStoreItemV1StoreNonebotSearchPostResponse, @@ -255,8 +257,8 @@ export class StoreService { ThrowOnError >({ ...options, - url: '/v1/store/nonebot/search' - }) + url: "/v1/store/nonebot/search", + }); } } @@ -266,7 +268,7 @@ export class ProcessService { * - 运行 NoneBot 实例 */ public static runProcessV1ProcessRunPost( - options: Options + options: Options, ) { return (options?.client ?? client).post< RunProcessV1ProcessRunPostResponse, @@ -274,8 +276,8 @@ export class ProcessService { ThrowOnError >({ ...options, - url: '/v1/process/run' - }) + url: "/v1/process/run", + }); } /** @@ -283,7 +285,7 @@ export class ProcessService { * - 终止 NoneBot 实例 */ public static stopProcessV1ProcessStopPost( - options: Options + options: Options, ) { return (options?.client ?? client).post< StopProcessV1ProcessStopPostResponse, @@ -291,8 +293,8 @@ export class ProcessService { ThrowOnError >({ ...options, - url: '/v1/process/stop' - }) + url: "/v1/process/stop", + }); } /** @@ -300,7 +302,7 @@ export class ProcessService { * - 向 NoneBot 实例进程写入数据 */ public static writeToProcessV1ProcessWritePost( - options: Options + options: Options, ) { return (options?.client ?? client).post< WriteToProcessV1ProcessWritePostResponse, @@ -308,8 +310,8 @@ export class ProcessService { ThrowOnError >({ ...options, - url: '/v1/process/write' - }) + url: "/v1/process/write", + }); } /** @@ -317,7 +319,7 @@ export class ProcessService { * - 获取历史进程日志 */ public static getLogHistoryV1ProcessLogHistoryGet( - options: Options + options: Options, ) { return (options?.client ?? client).get< GetLogHistoryV1ProcessLogHistoryGetResponse, @@ -325,8 +327,8 @@ export class ProcessService { ThrowOnError >({ ...options, - url: '/v1/process/log/history' - }) + url: "/v1/process/log/history", + }); } } @@ -335,34 +337,34 @@ export class ProjectService { * Get Project Env List * - 获取 NoneBot 实例中的环境文件列表 */ - public static getProjectEnvListV1ProjectConfigEnvListGet( - options: Options - ) { + public static getProjectEnvListV1ProjectConfigEnvListGet< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).get< GetProjectEnvListV1ProjectConfigEnvListGetResponse, GetProjectEnvListV1ProjectConfigEnvListGetError, ThrowOnError >({ ...options, - url: '/v1/project/config/env/list' - }) + url: "/v1/project/config/env/list", + }); } /** * Create Project Env * - 创建 NoneBot 实例中的环境文件 */ - public static createProjectEnvV1ProjectConfigEnvCreatePost( - options: Options - ) { + public static createProjectEnvV1ProjectConfigEnvCreatePost< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).post< CreateProjectEnvV1ProjectConfigEnvCreatePostResponse, CreateProjectEnvV1ProjectConfigEnvCreatePostError, ThrowOnError >({ ...options, - url: '/v1/project/config/env/create' - }) + url: "/v1/project/config/env/create", + }); } /** @@ -370,7 +372,7 @@ export class ProjectService { * - 删除 NoneBot 实例中的环境文件 */ public static deleteProjectEnvV1ProjectConfigEnvDeleteDelete< - ThrowOnError extends boolean = false + ThrowOnError extends boolean = false, >(options: Options) { return (options?.client ?? client).delete< DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteResponse, @@ -378,25 +380,25 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/config/env/delete' - }) + url: "/v1/project/config/env/delete", + }); } /** * Use Project Env * - 切换 NoneBot 实例所应用的环境文件 */ - public static useProjectEnvV1ProjectConfigEnvUsePost( - options: Options - ) { + public static useProjectEnvV1ProjectConfigEnvUsePost< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).post< UseProjectEnvV1ProjectConfigEnvUsePostResponse, UseProjectEnvV1ProjectConfigEnvUsePostError, ThrowOnError >({ ...options, - url: '/v1/project/config/env/use' - }) + url: "/v1/project/config/env/use", + }); } /** @@ -404,16 +406,18 @@ export class ProjectService { * - 获取 NoneBot 实例在 .toml 中的配置信息 */ public static getProjectMetaConfigV1ProjectConfigMetaDetailGet< - ThrowOnError extends boolean = false - >(options: Options) { + ThrowOnError extends boolean = false, + >( + options: Options, + ) { return (options?.client ?? client).get< GetProjectMetaConfigV1ProjectConfigMetaDetailGetResponse, GetProjectMetaConfigV1ProjectConfigMetaDetailGetError, ThrowOnError >({ ...options, - url: '/v1/project/config/meta/detail' - }) + url: "/v1/project/config/meta/detail", + }); } /** @@ -421,16 +425,21 @@ export class ProjectService { * - 获取 NoneBot 实例配置信息 */ public static getProjectNonebotConfigV1ProjectConfigNonebotDetailGet< - ThrowOnError extends boolean = false - >(options: Options) { + ThrowOnError extends boolean = false, + >( + options: Options< + GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetData, + ThrowOnError + >, + ) { return (options?.client ?? client).get< GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetResponse, GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetError, ThrowOnError >({ ...options, - url: '/v1/project/config/nonebot/detail' - }) + url: "/v1/project/config/nonebot/detail", + }); } /** @@ -438,12 +447,12 @@ export class ProjectService { * - 获取 NoneBot 实例中所有 NoneBot 插件设置信息 */ public static getProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGet< - ThrowOnError extends boolean = false + ThrowOnError extends boolean = false, >( options: Options< GetProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGetData, ThrowOnError - > + >, ) { return (options?.client ?? client).get< GetProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGetResponse, @@ -451,8 +460,8 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/config/nonebot/plugin/detail' - }) + url: "/v1/project/config/nonebot/plugin/detail", + }); } /** @@ -461,51 +470,51 @@ export class ProjectService { * - 说明: * * `module_type` 仅作 WebUI 更新自身存储的实例信息,不会影响实例本体 */ - public static updateProjectConfigV1ProjectConfigUpdatePost( - options: Options - ) { + public static updateProjectConfigV1ProjectConfigUpdatePost< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).post< UpdateProjectConfigV1ProjectConfigUpdatePostResponse, UpdateProjectConfigV1ProjectConfigUpdatePostError, ThrowOnError >({ ...options, - url: '/v1/project/config/update' - }) + url: "/v1/project/config/update", + }); } /** * Get Dotenv File * - 获取环境文件内容 */ - public static getDotenvFileV1ProjectConfigDotenvGet( - options: Options - ) { + public static getDotenvFileV1ProjectConfigDotenvGet< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).get< GetDotenvFileV1ProjectConfigDotenvGetResponse, GetDotenvFileV1ProjectConfigDotenvGetError, ThrowOnError >({ ...options, - url: '/v1/project/config/dotenv' - }) + url: "/v1/project/config/dotenv", + }); } /** * Update Dotenv File * - 更新环境文件内容 */ - public static updateDotenvFileV1ProjectConfigDotenvPut( - options: Options - ) { + public static updateDotenvFileV1ProjectConfigDotenvPut< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).put< UpdateDotenvFileV1ProjectConfigDotenvPutResponse, UpdateDotenvFileV1ProjectConfigDotenvPutError, ThrowOnError >({ ...options, - url: '/v1/project/config/dotenv' - }) + url: "/v1/project/config/dotenv", + }); } /** @@ -514,7 +523,7 @@ export class ProjectService { * - 返回对应的日志密钥, 用于日志展现 */ public static createProjectV1ProjectCreatePost( - options: Options + options: Options, ) { return (options?.client ?? client).post< CreateProjectV1ProjectCreatePostResponse, @@ -522,8 +531,8 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/create' - }) + url: "/v1/project/create", + }); } /** @@ -532,7 +541,7 @@ export class ProjectService { * - 返回对应的日志密钥, 用于日志展现 */ public static addProjectV1ProjectAddPost( - options: Options + options: Options, ) { return (options?.client ?? client).post< AddProjectV1ProjectAddPostResponse, @@ -540,25 +549,25 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/add' - }) + url: "/v1/project/add", + }); } /** * Get Project Profile * - 获取 NoneBot 实例的配置信息 */ - public static getProjectProfileV1ProjectProfileGet( - options: Options - ) { + public static getProjectProfileV1ProjectProfileGet< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).get< GetProjectProfileV1ProjectProfileGetResponse, GetProjectProfileV1ProjectProfileGetError, ThrowOnError >({ ...options, - url: '/v1/project/profile' - }) + url: "/v1/project/profile", + }); } /** @@ -566,7 +575,7 @@ export class ProjectService { * - 删除 NoneBot 实例 */ public static deleteProjectV1ProjectDeleteDelete( - options: Options + options: Options, ) { return (options?.client ?? client).delete< DeleteProjectV1ProjectDeleteDeleteResponse, @@ -574,8 +583,8 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/delete' - }) + url: "/v1/project/delete", + }); } /** @@ -583,7 +592,7 @@ export class ProjectService { * - 获取所有 NoneBot 实例基本信息 */ public static listProjectV1ProjectListGet( - options?: Options + options?: Options, ) { return (options?.client ?? client).get< ListProjectV1ProjectListGetResponse, @@ -591,25 +600,25 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/list' - }) + url: "/v1/project/list", + }); } /** * Check Project Toml * - 检查 NoneBot 实例的 toml 文件并从中获取所需信息 */ - public static checkProjectTomlV1ProjectCheckTomlPost( - options: Options - ) { + public static checkProjectTomlV1ProjectCheckTomlPost< + ThrowOnError extends boolean = false, + >(options: Options) { return (options?.client ?? client).post< CheckProjectTomlV1ProjectCheckTomlPostResponse, CheckProjectTomlV1ProjectCheckTomlPostError, ThrowOnError >({ ...options, - url: '/v1/project/check_toml' - }) + url: "/v1/project/check_toml", + }); } /** @@ -617,7 +626,7 @@ export class ProjectService { * - 获取实例的插件列表 */ public static getPluginsV1ProjectPluginsGet( - options: Options + options: Options, ) { return (options?.client ?? client).get< GetPluginsV1ProjectPluginsGetResponse, @@ -625,8 +634,8 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/plugins' - }) + url: "/v1/project/plugins", + }); } /** @@ -634,7 +643,7 @@ export class ProjectService { * - 获取实例的适配器列表 */ public static getAdaptersV1ProjectAdaptersGet( - options: Options + options: Options, ) { return (options?.client ?? client).get< GetAdaptersV1ProjectAdaptersGetResponse, @@ -642,8 +651,8 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/adapters' - }) + url: "/v1/project/adapters", + }); } /** @@ -651,7 +660,7 @@ export class ProjectService { * - 获取实例的驱动器列表 */ public static getDriversV1ProjectDriversGet( - options: Options + options: Options, ) { return (options?.client ?? client).get< GetDriversV1ProjectDriversGetResponse, @@ -659,7 +668,7 @@ export class ProjectService { ThrowOnError >({ ...options, - url: '/v1/project/drivers' - }) + url: "/v1/project/drivers", + }); } } diff --git a/frontend/src/client/api/types.gen.ts b/frontend/src/client/api/types.gen.ts index de836a2..c7d534a 100644 --- a/frontend/src/client/api/types.gen.ts +++ b/frontend/src/client/api/types.gen.ts @@ -1,682 +1,693 @@ // This file is auto-generated by @hey-api/openapi-ts export type Adapter = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version?: string - is_download?: boolean -} + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version?: string; + is_download?: boolean; +}; export type AddProjectData = { - project_name: string - project_dir: string - mirror_url: string - adapters?: Array - plugins?: Array - plugin_dirs?: Array - builtin_plugins?: Array -} + project_name: string; + project_dir: string; + mirror_url: string; + adapters?: Array; + plugins?: Array; + plugin_dirs?: Array; + builtin_plugins?: Array; +}; export type Body_search_nonebot_store_item_v1_store_nonebot_search_post = { - data: SearchRequest -} + data: SearchRequest; +}; /** * An enumeration. */ -export type ConfigType = 'project' | 'toml' +export type ConfigType = "project" | "toml"; export type CreateProjectData = { - is_bootstrap: boolean - project_name: string - project_dir: string - mirror_url: string - drivers: Array - adapters: Array - use_src: boolean -} + is_bootstrap: boolean; + project_name: string; + project_dir: string; + mirror_url: string; + drivers: Array; + adapters: Array; + use_src: boolean; +}; export type Driver = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version?: string - is_download?: boolean -} + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version?: string; + is_download?: boolean; +}; export type FileInfo = { - name: string - is_dir: boolean - path: string - modified_time: string - absolute_path: string -} + name: string; + is_dir: boolean; + path: string; + modified_time: string; + absolute_path: string; +}; export type FileResponse = { - detail: Array -} + detail: Array; +}; -export type GenericResponse_List_nb_cli_plugin_webui_app_handlers_process_schemas_ProcessLog__ = { - detail: Array -} +export type GenericResponse_List_nb_cli_plugin_webui_app_handlers_process_schemas_ProcessLog__ = + { + detail: Array; + }; export type GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__ = { - detail: Array -} + detail: Array; +}; export type GenericResponse_List_nb_cli_plugin_webui_app_models_base_Plugin__ = { - detail: Array -} + detail: Array; +}; export type GenericResponse_List_str__ = { - detail: Array -} + detail: Array; +}; export type GenericResponse_NoneBotProjectMeta_ = { - detail: NoneBotProjectMeta -} + detail: NoneBotProjectMeta; +}; export type GenericResponse_ProjectTomlDetail_ = { - detail: ProjectTomlDetail -} + detail: ProjectTomlDetail; +}; export type GenericResponse_int_ = { - detail: number -} + detail: number; +}; export type GenericResponse_str_ = { - detail: string -} + detail: string; +}; export type HTTPValidationError = { - detail?: Array -} + detail?: Array; +}; export type Item = { - enum?: Array - type: string -} + enum?: Array; + type: string; +}; export type ListProjectResponse = { detail: { - [key: string]: NoneBotProjectMeta - } -} + [key: string]: NoneBotProjectMeta; + }; +}; /** * An enumeration. */ -export type LogLevel = 'STDOUT' | 'INFO' | 'WARNING' | 'ERROR' | 'DEBUG' +export type LogLevel = "STDOUT" | "INFO" | "WARNING" | "ERROR" | "DEBUG"; export type LoginRequest = { - token: string - mark: string -} + token: string; + mark: string; +}; export type ModuleConfigChild = { - title: string - description?: string - name: string - default?: unknown - conf_type: string - enum?: Array - configured?: unknown - items?: Item - unique_items: boolean - is_secret: boolean - latest_change?: string -} + title: string; + description?: string; + name: string; + default?: unknown; + conf_type: string; + enum?: Array; + configured?: unknown; + items?: Item; + unique_items: boolean; + is_secret: boolean; + latest_change?: string; +}; export type ModuleConfigFather = { - title: string - description?: string - name: string - module_type: ModuleType | ConfigType - properties: Array -} + title: string; + description?: string; + name: string; + module_type: ModuleType | ConfigType; + properties: Array; +}; export type ModuleConfigResponse = { - detail: Array -} + detail: Array; +}; export type ModuleConfigUpdateRequest = { - env: string - conf_type: string - k: string - v?: unknown -} + env: string; + conf_type: string; + k: string; + v?: unknown; +}; export type ModuleTag = { - label: string - color: string -} + label: string; + color: string; +}; /** * An enumeration. */ -export type ModuleType = 'module' | 'plugin' | 'adapter' | 'driver' +export type ModuleType = "module" | "plugin" | "adapter" | "driver"; export type NoneBotProjectMeta = { - project_id: string - project_name: string - project_dir: string - mirror_url: string - adapters: Array - drivers: Array - plugins: Array - plugin_dirs: Array - builtin_plugins: Array - is_running?: boolean - use_env?: string - use_run_script?: boolean - run_script_name?: string -} + project_id: string; + project_name: string; + project_dir: string; + mirror_url: string; + adapters: Array; + drivers: Array; + plugins: Array; + plugin_dirs: Array; + builtin_plugins: Array; + is_running?: boolean; + use_env?: string; + use_run_script?: boolean; + run_script_name?: string; +}; /** * 类型参考: * - https://github.com/nonebot/noneflow/blob/main/src/utils/validation/constants.py#L17 */ -export type PluginType = 'application' | 'library' +export type PluginType = "application" | "library"; export type ProcessLog = { - time?: string - level?: LogLevel - message: string -} + time?: string; + level?: LogLevel; + message: string; +}; export type ProjectTomlDetail = { - project_name: string + project_name: string; adapters: Array<{ - [key: string]: string - }> - plugins: Array - plugin_dirs: Array - builtin_plugins: Array -} + [key: string]: string; + }>; + plugins: Array; + plugin_dirs: Array; + builtin_plugins: Array; +}; export type SearchRequest = { - module_type: ModuleType - tags?: Array - content: string -} + module_type: ModuleType; + tags?: Array; + content: string; +}; export type SimpleModel = { - name: string - is_dir: boolean - path: string -} + name: string; + is_dir: boolean; + path: string; +}; export type StoreListResponse = { - detail: Array | Array | Array - now_page: number - total_page: number - total_item: number -} + detail: + | Array + | Array + | Array; + now_page: number; + total_page: number; + total_item: number; +}; export type ValidationError = { - loc: Array - msg: string - type: string -} + loc: Array; + msg: string; + type: string; +}; export type VerifyRequest = { - jwt_token: string -} + jwt_token: string; +}; export type nb_cli_plugin_webui__app__models__base__ModuleInfo = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version?: string - is_download?: boolean -} + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version?: string; + is_download?: boolean; +}; export type nb_cli_plugin_webui__app__models__base__Plugin = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version?: string - is_download?: boolean + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version?: string; + is_download?: boolean; config?: { - [key: string]: unknown - } -} + [key: string]: unknown; + }; +}; export type nb_cli_plugin_webui__app__models__store__ModuleInfo = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version?: string - is_download?: boolean - module_type?: 'module' -} + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version?: string; + is_download?: boolean; + module_type?: "module"; +}; -export type module_type = 'module' +export type module_type = "module"; /** * 结构参考: * - https://github.com/nonebot/noneflow/blob/main/src/utils/store_test/models.py#L14 */ export type nb_cli_plugin_webui__app__models__store__Plugin = { - module_name?: string - project_link?: string - name?: string - desc?: string - author?: string - homepage?: string - usage?: string + module_name?: string; + project_link?: string; + name?: string; + desc?: string; + author?: string; + homepage?: string; + usage?: string; extra?: { - [key: string]: unknown - } - tags?: Array - is_official?: boolean - version: string - is_download?: boolean + [key: string]: unknown; + }; + tags?: Array; + is_official?: boolean; + version: string; + is_download?: boolean; config?: { - [key: string]: unknown - } - type?: PluginType - supported_adapters?: Array - valid: boolean - time: string - skip_test: boolean - module_type?: 'plugin' -} - -export type module_type2 = 'plugin' + [key: string]: unknown; + }; + type?: PluginType; + supported_adapters?: Array; + valid: boolean; + time: string; + skip_test: boolean; + module_type?: "plugin"; +}; + +export type module_type2 = "plugin"; export type nb_cli_plugin_webui__app__models__store__SearchTag = { - label: nb_cli_plugin_webui__app__models__types__SearchTag - text?: string -} + label: nb_cli_plugin_webui__app__models__types__SearchTag; + text?: string; +}; /** * An enumeration. */ export type nb_cli_plugin_webui__app__models__types__SearchTag = - | 'official' - | 'valid' - | 'latest' - | 'downloaded' - | 'author' - | 'tag' + | "official" + | "valid" + | "latest" + | "downloaded" + | "author" + | "tag"; export type AuthTokenV1AuthLoginPostData = { - body: LoginRequest -} + body: LoginRequest; +}; -export type AuthTokenV1AuthLoginPostResponse = GenericResponse_str_ +export type AuthTokenV1AuthLoginPostResponse = GenericResponse_str_; -export type AuthTokenV1AuthLoginPostError = HTTPValidationError +export type AuthTokenV1AuthLoginPostError = HTTPValidationError; export type VerifyTokenV1AuthVerifyPostData = { - body: VerifyRequest -} + body: VerifyRequest; +}; -export type VerifyTokenV1AuthVerifyPostResponse = GenericResponse_str_ +export type VerifyTokenV1AuthVerifyPostResponse = GenericResponse_str_; -export type VerifyTokenV1AuthVerifyPostError = HTTPValidationError +export type VerifyTokenV1AuthVerifyPostError = HTTPValidationError; export type GetFileListV1FileListGetData = { query: { - path: string - } -} + path: string; + }; +}; -export type GetFileListV1FileListGetResponse = FileResponse +export type GetFileListV1FileListGetResponse = FileResponse; -export type GetFileListV1FileListGetError = HTTPValidationError +export type GetFileListV1FileListGetError = HTTPValidationError; export type CreateFileV1FileCreatePostData = { - body: SimpleModel -} + body: SimpleModel; +}; -export type CreateFileV1FileCreatePostResponse = FileResponse +export type CreateFileV1FileCreatePostResponse = FileResponse; -export type CreateFileV1FileCreatePostError = HTTPValidationError +export type CreateFileV1FileCreatePostError = HTTPValidationError; export type DeleteFileV1FileDeleteDeleteData = { query: { - path: string - } -} + path: string; + }; +}; -export type DeleteFileV1FileDeleteDeleteResponse = FileResponse +export type DeleteFileV1FileDeleteDeleteResponse = FileResponse; -export type DeleteFileV1FileDeleteDeleteError = HTTPValidationError +export type DeleteFileV1FileDeleteDeleteError = HTTPValidationError; export type InstallNonebotModuleV1StoreNonebotInstallPostData = { body: | nb_cli_plugin_webui__app__models__store__ModuleInfo - | nb_cli_plugin_webui__app__models__store__Plugin + | nb_cli_plugin_webui__app__models__store__Plugin; query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type InstallNonebotModuleV1StoreNonebotInstallPostResponse = GenericResponse_str_ +export type InstallNonebotModuleV1StoreNonebotInstallPostResponse = GenericResponse_str_; -export type InstallNonebotModuleV1StoreNonebotInstallPostError = HTTPValidationError +export type InstallNonebotModuleV1StoreNonebotInstallPostError = HTTPValidationError; export type UninstallNonebotModuleV1StoreNonebotUninstallPostData = { body: | nb_cli_plugin_webui__app__models__store__ModuleInfo - | nb_cli_plugin_webui__app__models__store__Plugin + | nb_cli_plugin_webui__app__models__store__Plugin; query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type UninstallNonebotModuleV1StoreNonebotUninstallPostResponse = GenericResponse_str_ +export type UninstallNonebotModuleV1StoreNonebotUninstallPostResponse = + GenericResponse_str_; -export type UninstallNonebotModuleV1StoreNonebotUninstallPostError = HTTPValidationError +export type UninstallNonebotModuleV1StoreNonebotUninstallPostError = HTTPValidationError; export type GetNonebotStoreItemsV1StoreNonebotListGetData = { query: { - is_search?: boolean - module_type: ModuleType - page: number - project_id?: string - show_all?: boolean - } -} + is_search?: boolean; + module_type: ModuleType; + page: number; + project_id?: string; + show_all?: boolean; + }; +}; -export type GetNonebotStoreItemsV1StoreNonebotListGetResponse = StoreListResponse +export type GetNonebotStoreItemsV1StoreNonebotListGetResponse = StoreListResponse; -export type GetNonebotStoreItemsV1StoreNonebotListGetError = HTTPValidationError +export type GetNonebotStoreItemsV1StoreNonebotListGetError = HTTPValidationError; export type SearchNonebotStoreItemV1StoreNonebotSearchPostData = { - body: Body_search_nonebot_store_item_v1_store_nonebot_search_post + body: Body_search_nonebot_store_item_v1_store_nonebot_search_post; query: { - project_id: string - } -} + project_id: string; + }; +}; -export type SearchNonebotStoreItemV1StoreNonebotSearchPostResponse = StoreListResponse +export type SearchNonebotStoreItemV1StoreNonebotSearchPostResponse = StoreListResponse; -export type SearchNonebotStoreItemV1StoreNonebotSearchPostError = HTTPValidationError +export type SearchNonebotStoreItemV1StoreNonebotSearchPostError = HTTPValidationError; export type RunProcessV1ProcessRunPostData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type RunProcessV1ProcessRunPostResponse = GenericResponse_str_ +export type RunProcessV1ProcessRunPostResponse = GenericResponse_str_; -export type RunProcessV1ProcessRunPostError = HTTPValidationError +export type RunProcessV1ProcessRunPostError = HTTPValidationError; export type StopProcessV1ProcessStopPostData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type StopProcessV1ProcessStopPostResponse = GenericResponse_str_ +export type StopProcessV1ProcessStopPostResponse = GenericResponse_str_; -export type StopProcessV1ProcessStopPostError = HTTPValidationError +export type StopProcessV1ProcessStopPostError = HTTPValidationError; export type WriteToProcessV1ProcessWritePostData = { query: { - content: string - project_id: string - } -} + content: string; + project_id: string; + }; +}; -export type WriteToProcessV1ProcessWritePostResponse = GenericResponse_int_ +export type WriteToProcessV1ProcessWritePostResponse = GenericResponse_int_; -export type WriteToProcessV1ProcessWritePostError = HTTPValidationError +export type WriteToProcessV1ProcessWritePostError = HTTPValidationError; export type GetLogHistoryV1ProcessLogHistoryGetData = { query: { - log_count: number - log_id: string - } -} + log_count: number; + log_id: string; + }; +}; export type GetLogHistoryV1ProcessLogHistoryGetResponse = - GenericResponse_List_nb_cli_plugin_webui_app_handlers_process_schemas_ProcessLog__ + GenericResponse_List_nb_cli_plugin_webui_app_handlers_process_schemas_ProcessLog__; -export type GetLogHistoryV1ProcessLogHistoryGetError = HTTPValidationError +export type GetLogHistoryV1ProcessLogHistoryGetError = HTTPValidationError; export type GetProjectEnvListV1ProjectConfigEnvListGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type GetProjectEnvListV1ProjectConfigEnvListGetResponse = GenericResponse_List_str__ +export type GetProjectEnvListV1ProjectConfigEnvListGetResponse = + GenericResponse_List_str__; -export type GetProjectEnvListV1ProjectConfigEnvListGetError = HTTPValidationError +export type GetProjectEnvListV1ProjectConfigEnvListGetError = HTTPValidationError; export type CreateProjectEnvV1ProjectConfigEnvCreatePostData = { query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type CreateProjectEnvV1ProjectConfigEnvCreatePostResponse = GenericResponse_str_ +export type CreateProjectEnvV1ProjectConfigEnvCreatePostResponse = GenericResponse_str_; -export type CreateProjectEnvV1ProjectConfigEnvCreatePostError = HTTPValidationError +export type CreateProjectEnvV1ProjectConfigEnvCreatePostError = HTTPValidationError; export type DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteData = { query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteResponse = GenericResponse_str_ +export type DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteResponse = GenericResponse_str_; -export type DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteError = HTTPValidationError +export type DeleteProjectEnvV1ProjectConfigEnvDeleteDeleteError = HTTPValidationError; export type UseProjectEnvV1ProjectConfigEnvUsePostData = { query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type UseProjectEnvV1ProjectConfigEnvUsePostResponse = GenericResponse_str_ +export type UseProjectEnvV1ProjectConfigEnvUsePostResponse = GenericResponse_str_; -export type UseProjectEnvV1ProjectConfigEnvUsePostError = HTTPValidationError +export type UseProjectEnvV1ProjectConfigEnvUsePostError = HTTPValidationError; export type GetProjectMetaConfigV1ProjectConfigMetaDetailGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type GetProjectMetaConfigV1ProjectConfigMetaDetailGetResponse = ModuleConfigResponse +export type GetProjectMetaConfigV1ProjectConfigMetaDetailGetResponse = + ModuleConfigResponse; -export type GetProjectMetaConfigV1ProjectConfigMetaDetailGetError = HTTPValidationError +export type GetProjectMetaConfigV1ProjectConfigMetaDetailGetError = HTTPValidationError; export type GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetResponse = ModuleConfigResponse +export type GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetResponse = + ModuleConfigResponse; -export type GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetError = HTTPValidationError +export type GetProjectNonebotConfigV1ProjectConfigNonebotDetailGetError = + HTTPValidationError; export type GetProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; export type GetProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGetResponse = - ModuleConfigResponse + ModuleConfigResponse; export type GetProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGetError = - HTTPValidationError + HTTPValidationError; export type UpdateProjectConfigV1ProjectConfigUpdatePostData = { - body: ModuleConfigUpdateRequest + body: ModuleConfigUpdateRequest; query: { - module_type: ModuleType | ConfigType - project_id: string - } -} + module_type: ModuleType | ConfigType; + project_id: string; + }; +}; -export type UpdateProjectConfigV1ProjectConfigUpdatePostResponse = GenericResponse_str_ +export type UpdateProjectConfigV1ProjectConfigUpdatePostResponse = GenericResponse_str_; -export type UpdateProjectConfigV1ProjectConfigUpdatePostError = HTTPValidationError +export type UpdateProjectConfigV1ProjectConfigUpdatePostError = HTTPValidationError; export type GetDotenvFileV1ProjectConfigDotenvGetData = { query: { - env: string - project_id: string - } -} + env: string; + project_id: string; + }; +}; -export type GetDotenvFileV1ProjectConfigDotenvGetResponse = GenericResponse_str_ +export type GetDotenvFileV1ProjectConfigDotenvGetResponse = GenericResponse_str_; -export type GetDotenvFileV1ProjectConfigDotenvGetError = HTTPValidationError +export type GetDotenvFileV1ProjectConfigDotenvGetError = HTTPValidationError; export type UpdateDotenvFileV1ProjectConfigDotenvPutData = { query: { - data: string - env: string - project_id: string - } -} + data: string; + env: string; + project_id: string; + }; +}; -export type UpdateDotenvFileV1ProjectConfigDotenvPutResponse = GenericResponse_str_ +export type UpdateDotenvFileV1ProjectConfigDotenvPutResponse = GenericResponse_str_; -export type UpdateDotenvFileV1ProjectConfigDotenvPutError = HTTPValidationError +export type UpdateDotenvFileV1ProjectConfigDotenvPutError = HTTPValidationError; export type CreateProjectV1ProjectCreatePostData = { - body: CreateProjectData -} + body: CreateProjectData; +}; -export type CreateProjectV1ProjectCreatePostResponse = GenericResponse_str_ +export type CreateProjectV1ProjectCreatePostResponse = GenericResponse_str_; -export type CreateProjectV1ProjectCreatePostError = HTTPValidationError +export type CreateProjectV1ProjectCreatePostError = HTTPValidationError; export type AddProjectV1ProjectAddPostData = { - body: AddProjectData -} + body: AddProjectData; +}; -export type AddProjectV1ProjectAddPostResponse = GenericResponse_str_ +export type AddProjectV1ProjectAddPostResponse = GenericResponse_str_; -export type AddProjectV1ProjectAddPostError = HTTPValidationError +export type AddProjectV1ProjectAddPostError = HTTPValidationError; export type GetProjectProfileV1ProjectProfileGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; -export type GetProjectProfileV1ProjectProfileGetResponse = GenericResponse_NoneBotProjectMeta_ +export type GetProjectProfileV1ProjectProfileGetResponse = + GenericResponse_NoneBotProjectMeta_; -export type GetProjectProfileV1ProjectProfileGetError = HTTPValidationError +export type GetProjectProfileV1ProjectProfileGetError = HTTPValidationError; export type DeleteProjectV1ProjectDeleteDeleteData = { query: { - delete_fully?: boolean - project_id: string - } -} + delete_fully?: boolean; + project_id: string; + }; +}; -export type DeleteProjectV1ProjectDeleteDeleteResponse = GenericResponse_str_ +export type DeleteProjectV1ProjectDeleteDeleteResponse = GenericResponse_str_; -export type DeleteProjectV1ProjectDeleteDeleteError = HTTPValidationError +export type DeleteProjectV1ProjectDeleteDeleteError = HTTPValidationError; -export type ListProjectV1ProjectListGetResponse = ListProjectResponse +export type ListProjectV1ProjectListGetResponse = ListProjectResponse; -export type ListProjectV1ProjectListGetError = unknown +export type ListProjectV1ProjectListGetError = unknown; export type CheckProjectTomlV1ProjectCheckTomlPostData = { query: { - project_dir: string - } -} + project_dir: string; + }; +}; -export type CheckProjectTomlV1ProjectCheckTomlPostResponse = GenericResponse_ProjectTomlDetail_ +export type CheckProjectTomlV1ProjectCheckTomlPostResponse = + GenericResponse_ProjectTomlDetail_; -export type CheckProjectTomlV1ProjectCheckTomlPostError = HTTPValidationError +export type CheckProjectTomlV1ProjectCheckTomlPostError = HTTPValidationError; export type GetPluginsV1ProjectPluginsGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; export type GetPluginsV1ProjectPluginsGetResponse = - GenericResponse_List_nb_cli_plugin_webui_app_models_base_Plugin__ + GenericResponse_List_nb_cli_plugin_webui_app_models_base_Plugin__; -export type GetPluginsV1ProjectPluginsGetError = HTTPValidationError +export type GetPluginsV1ProjectPluginsGetError = HTTPValidationError; export type GetAdaptersV1ProjectAdaptersGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; export type GetAdaptersV1ProjectAdaptersGetResponse = - GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__ + GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__; -export type GetAdaptersV1ProjectAdaptersGetError = HTTPValidationError +export type GetAdaptersV1ProjectAdaptersGetError = HTTPValidationError; export type GetDriversV1ProjectDriversGetData = { query: { - project_id: string - } -} + project_id: string; + }; +}; export type GetDriversV1ProjectDriversGetResponse = - GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__ + GenericResponse_List_nb_cli_plugin_webui_app_models_base_ModuleInfo__; -export type GetDriversV1ProjectDriversGetError = HTTPValidationError +export type GetDriversV1ProjectDriversGetError = HTTPValidationError; diff --git a/frontend/src/client/init.ts b/frontend/src/client/init.ts index 907a8ff..a3bc8a7 100644 --- a/frontend/src/client/init.ts +++ b/frontend/src/client/init.ts @@ -1,65 +1,64 @@ -import { createApp, type App as VueAPP } from 'vue' -import { createPinia } from 'pinia' -import router from '@/router' -import { client, AuthService } from './api' -import { useNoneBotStore, useToastStore } from '@/stores' -import App from '@/App.vue' -import './useMonacoWorker' +import { createApp, type App as VueAPP } from "vue"; +import { createPinia } from "pinia"; +import router from "@/router"; +import { client, AuthService } from "./api"; +import { useNoneBotStore, useToastStore } from "@/stores"; +import App from "@/App.vue"; +import "./useMonacoWorker"; const installVuePlugins = (app: VueAPP) => { - app.use(createPinia()) - app.use(router) -} + app.use(createPinia()); + app.use(router); +}; export const initWebUI = async () => { - const app = createApp(App) - installVuePlugins(app) - app.mount('#app') + const app = createApp(App); + installVuePlugins(app); + app.mount("#app"); - const token = localStorage.getItem('token') || '' - const base = localStorage.getItem('debugUrl') || '' + client.setConfig({ + baseUrl: "/api", + }); + + const token = localStorage.getItem("token") || ""; if (!token) { - router.push('/login') - return + router.push("/login"); + return; } - - client.setConfig({ - baseUrl: base - }) client.interceptors.request.use((request) => { - request.headers.set('Authorization', `Bearer ${token}`) - return request - }) + request.headers.set("Authorization", `Bearer ${token}`); + return request; + }); - const toast = useToastStore() + const toast = useToastStore(); const { data, error, response } = await AuthService.verifyTokenV1AuthVerifyPost({ body: { - jwt_token: token - } - }) + jwt_token: token, + }, + }); if (error && response.status === 403) { - localStorage.clear() - router.push('/login') - toast.add('warning', 'Token 已失效, 请重新登陆', '', 5000) - return + localStorage.clear(); + router.push("/login"); + toast.add("warning", "Token 已失效, 请重新登陆", "", 5000); + return; } if (data) { - const expire = Number(data.detail) - const now = Date.now() / 1000 - const diff = expire - now + const expire = Number(data.detail); + const now = Date.now() / 1000; + const diff = expire - now; toast.add( - 'info', + "info", `Token 有效还剩: ${Math.floor((diff % 86400) / 3600)}h${Math.floor( - (diff % 3600) / 60 + (diff % 3600) / 60, )}m${Math.floor(diff % 60)}s`, - '', - 10000 - ) + "", + 10000, + ); } - const store = useNoneBotStore() - await store.loadBots() -} + const store = useNoneBotStore(); + await store.loadBots(); +}; diff --git a/frontend/src/client/useMonacoWorker.ts b/frontend/src/client/useMonacoWorker.ts index 03e8aef..c76757e 100644 --- a/frontend/src/client/useMonacoWorker.ts +++ b/frontend/src/client/useMonacoWorker.ts @@ -1,7 +1,7 @@ -import * as monaco from 'monaco-editor/esm/vs/editor/editor.api.js' +import * as monaco from "monaco-editor/esm/vs/editor/editor.api.js"; self.MonacoEnvironment = { getWorkerUrl: () => { - return './editor.worker.bundle.js' - } -} + return "./editor.worker.bundle.js"; + }, +}; diff --git a/frontend/src/client/utils.ts b/frontend/src/client/utils.ts index 507e89a..710966b 100644 --- a/frontend/src/client/utils.ts +++ b/frontend/src/client/utils.ts @@ -1,62 +1,69 @@ -import { client } from './api' +import { client } from "./api"; export const covertTimestampToDateString = ( timestamp: string, options: any = { - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - } + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + }, ) => { - const fixedTimestamp = Number(timestamp) * 1000 - const date = new Date(fixedTimestamp) - return date.toLocaleDateString(navigator.language, options) -} + const fixedTimestamp = Number(timestamp) * 1000; + const date = new Date(fixedTimestamp); + return date.toLocaleDateString(navigator.language, options); +}; export const limitContentShow = (content: string, limit: number) => { if (content.length <= limit) { - return content + return content; } - return content.slice(0, limit) + '...' -} + return content.slice(0, limit) + "..."; +}; export const generateURLForWebUI = (path: string, isWebsocket = false) => { - const base = client.getConfig().baseUrl! - const protocol = isWebsocket ? 'ws' : 'http' - return `${protocol}://${base}${path}` -} + const base = client.getConfig().baseUrl!; + const protocol = isWebsocket + ? window.location.protocol === "https:" + ? "wss" + : "ws" + : window.location.protocol === "https:" + ? "https" + : "http"; + const host = window.location.host; + return `${protocol}://${host}${base}${path}`; +}; export const sleep = (ms: number) => { - return new Promise((resolve) => setTimeout(resolve, ms)) -} + return new Promise((resolve) => setTimeout(resolve, ms)); +}; export const compareSemanticVersion = (v1: string, v2: string) => { const parseVersion = (v: string) => { - const [main, pre] = v.split('-') - const parts = main.split('.').map(Number) - return { parts, pre: pre || null } - } + const [main, pre] = v.split("-"); + const parts = main.split(".").map(Number); + return { parts, pre: pre || null }; + }; - const v1Parsed = parseVersion(v1) - const v2Parsed = parseVersion(v2) + const v1Parsed = parseVersion(v1); + const v2Parsed = parseVersion(v2); // 逐位比较主版本号 - const maxLength = Math.max(v1Parsed.parts.length, v2Parsed.parts.length) + const maxLength = Math.max(v1Parsed.parts.length, v2Parsed.parts.length); for (let i = 0; i < maxLength; i++) { - const part1 = v1Parsed.parts[i] || 0 - const part2 = v2Parsed.parts[i] || 0 + const part1 = v1Parsed.parts[i] || 0; + const part2 = v2Parsed.parts[i] || 0; - if (part1 > part2) return 1 - if (part1 < part2) return -1 + if (part1 > part2) return 1; + if (part1 < part2) return -1; } // 比较预发行版本 - if (!v1Parsed.pre && v2Parsed.pre) return 1 // v1 是正式版,v2 是预发行版 - if (v1Parsed.pre && !v2Parsed.pre) return -1 // v1 是预发行版,v2 是正式版 - if (v1Parsed.pre && v2Parsed.pre) return v1Parsed.pre.localeCompare(v2Parsed.pre) // 按字典顺序比较预发行版本 + if (!v1Parsed.pre && v2Parsed.pre) return 1; // v1 是正式版,v2 是预发行版 + if (v1Parsed.pre && !v2Parsed.pre) return -1; // v1 是预发行版,v2 是正式版 + if (v1Parsed.pre && v2Parsed.pre) return v1Parsed.pre.localeCompare(v2Parsed.pre); // 按字典顺序比较预发行版本 - return 0 // 完全相等 -} + return 0; // 完全相等 +}; diff --git a/frontend/src/components/ChartItem.vue b/frontend/src/components/ChartItem.vue index ece3c5a..e79c87c 100644 --- a/frontend/src/components/ChartItem.vue +++ b/frontend/src/components/ChartItem.vue @@ -1,82 +1,84 @@ diff --git a/frontend/src/components/DrawerItem.vue b/frontend/src/components/DrawerItem.vue index ca3f600..3b07482 100644 --- a/frontend/src/components/DrawerItem.vue +++ b/frontend/src/components/DrawerItem.vue @@ -1,21 +1,21 @@ @@ -36,7 +36,7 @@ const hiddenDrawer = () => { 'fixed top-0 right-0 z-50 h-screen bg-base-100 shadow-2xl transition shrink-0 flex flex-col': true, 'w-full md:w-2/5 xl:w-1/4 ': true, 'translate-x-0 opacity-100': isShow, - 'translate-x-full opacity-0': !isShow + 'translate-x-full opacity-0': !isShow, }" > @@ -75,9 +75,9 @@ const hiddenDrawer = () => { .material-symbols-outlined { font-variation-settings: - 'FILL' 0, - 'wght' 300, - 'GRAD' 0, - 'opsz' 24; + "FILL" 0, + "wght" 300, + "GRAD" 0, + "opsz" 24; } diff --git a/frontend/src/components/EditorItem.vue b/frontend/src/components/EditorItem.vue index e4875c6..2c44d36 100644 --- a/frontend/src/components/EditorItem.vue +++ b/frontend/src/components/EditorItem.vue @@ -1,35 +1,35 @@ diff --git a/frontend/src/components/Modals/AddBot/AddBotIndex.vue b/frontend/src/components/Modals/AddBot/AddBotIndex.vue index 35568ee..829ca33 100644 --- a/frontend/src/components/Modals/AddBot/AddBotIndex.vue +++ b/frontend/src/components/Modals/AddBot/AddBotIndex.vue @@ -1,58 +1,62 @@ - + 添加 NoneBot 实例 -import { ProjectService } from '@/client/api' -import { ref } from 'vue' -import { useAddBotStore } from '.' +import { ProjectService } from "@/client/api"; +import { ref } from "vue"; +import { useAddBotStore } from "."; -const store = useAddBotStore() +const store = useAddBotStore(); -const inputValue = ref('') +const inputValue = ref(""); const search = async () => { if (!inputValue.value) { - store.warningMessage = '请输入实例路径' - return + store.warningMessage = "请输入实例路径"; + return; } const { data, error } = await ProjectService.checkProjectTomlV1ProjectCheckTomlPost({ query: { - project_dir: inputValue.value - } - }) + project_dir: inputValue.value, + }, + }); if (error) { - store.warningMessage = error.detail?.toString() ?? '' + store.warningMessage = error.detail?.toString() ?? ""; } if (data) { - const detail = data.detail - store.projectName = detail.project_name - store.adapters = detail.adapters - store.plugins = detail.plugins - store.pluginDirs = detail.plugin_dirs - store.projectPath = inputValue.value + const detail = data.detail; + store.projectName = detail.project_name; + store.adapters = detail.adapters; + store.plugins = detail.plugins; + store.pluginDirs = detail.plugin_dirs; + store.projectPath = inputValue.value; - store.searchBotSuccess = true - store.warningMessage = '' - inputValue.value = '' + store.searchBotSuccess = true; + store.warningMessage = ""; + inputValue.value = ""; } -} +}; - + 实例绝对路径 @@ -64,11 +67,11 @@ const search = async () => { - {{ store.adapters.length ? '已有适配器:' : '未找到适配器' }} + {{ store.adapters.length ? "已有适配器:" : "未找到适配器" }} { - {{ store.plugins.length ? '已有插件:' : '未找到插件' }} + {{ store.plugins.length ? "已有插件:" : "未找到插件" }} { - {{ store.pluginDirs.length ? '已有插件目录:' : '未找到插件目录' }} + {{ store.pluginDirs.length ? "已有插件目录:" : "未找到插件目录" }} { 重新扫描 @@ -144,7 +147,7 @@ const search = async () => { diff --git a/frontend/src/components/Modals/AddBot/InstallationItem.vue b/frontend/src/components/Modals/AddBot/InstallationItem.vue index c935497..d1f5eb9 100644 --- a/frontend/src/components/Modals/AddBot/InstallationItem.vue +++ b/frontend/src/components/Modals/AddBot/InstallationItem.vue @@ -1,34 +1,34 @@ @@ -128,7 +132,9 @@ onUnmounted(() => { > {{ adapter.name }} - 未找到适配器 + + 未找到适配器 + @@ -141,7 +147,9 @@ onUnmounted(() => { > {{ plugin }} - 未找到插件 + + 未找到插件 + @@ -170,14 +178,14 @@ onUnmounted(() => { :class="{ 'flex font-mono': true, 'bg-error/50': log.level === 'ERROR', - 'bg-warning/50': log.level === 'WARNING' + 'bg-warning/50': log.level === 'WARNING', }" > {{ log.time }} {{ log.level }} - {{ log.message }} + {{ log.message }} @@ -187,7 +195,7 @@ onUnmounted(() => { @@ -199,7 +207,7 @@ onUnmounted(() => { 取消 @@ -207,17 +215,19 @@ onUnmounted(() => { - 完成 + + 完成 + - {{ isFailed ? '重试' : '安装' }} + {{ isFailed ? "重试" : "安装" }} diff --git a/frontend/src/components/Modals/AddBot/MirrorSelect.vue b/frontend/src/components/Modals/AddBot/MirrorSelect.vue index 34a2c48..537d947 100644 --- a/frontend/src/components/Modals/AddBot/MirrorSelect.vue +++ b/frontend/src/components/Modals/AddBot/MirrorSelect.vue @@ -1,41 +1,41 @@ @@ -74,11 +74,13 @@ const mirrors: MirrorItem[] = [ - 上一步 + + 上一步 + diff --git a/frontend/src/components/Modals/AddBot/index.ts b/frontend/src/components/Modals/AddBot/index.ts index 9425725..4e0636f 100644 --- a/frontend/src/components/Modals/AddBot/index.ts +++ b/frontend/src/components/Modals/AddBot/index.ts @@ -1,32 +1,32 @@ -import { defineStore } from 'pinia' -import { ref } from 'vue' +import { defineStore } from "pinia"; +import { ref } from "vue"; -export const useAddBotStore = defineStore('addBotStore', () => { - const step = ref(0) - const warningMessage = ref('') - const projectName = ref('') - const projectPath = ref('') - const pythonMirror = ref('') - const adapters = ref[]>([]) - const plugins = ref([]) - const pluginDirs = ref([]) - const isInstalling = ref(false) - const addBotSuccess = ref(false) - const searchBotSuccess = ref(false) +export const useAddBotStore = defineStore("addBotStore", () => { + const step = ref(0); + const warningMessage = ref(""); + const projectName = ref(""); + const projectPath = ref(""); + const pythonMirror = ref(""); + const adapters = ref[]>([]); + const plugins = ref([]); + const pluginDirs = ref([]); + const isInstalling = ref(false); + const addBotSuccess = ref(false); + const searchBotSuccess = ref(false); const reset = () => { - step.value = 0 - warningMessage.value = '' - projectName.value = '' - projectPath.value = '' - pythonMirror.value = '' - adapters.value = [] - plugins.value = [] - pluginDirs.value = [] - isInstalling.value = false - addBotSuccess.value = false - searchBotSuccess.value = false - } + step.value = 0; + warningMessage.value = ""; + projectName.value = ""; + projectPath.value = ""; + pythonMirror.value = ""; + adapters.value = []; + plugins.value = []; + pluginDirs.value = []; + isInstalling.value = false; + addBotSuccess.value = false; + searchBotSuccess.value = false; + }; return { step, @@ -40,6 +40,6 @@ export const useAddBotStore = defineStore('addBotStore', () => { isInstalling, addBotSuccess, searchBotSuccess, - reset - } -}) + reset, + }; +}); diff --git a/frontend/src/components/Modals/CreateBot/AdapterSelect.vue b/frontend/src/components/Modals/CreateBot/AdapterSelect.vue index b443dd4..04bb77f 100644 --- a/frontend/src/components/Modals/CreateBot/AdapterSelect.vue +++ b/frontend/src/components/Modals/CreateBot/AdapterSelect.vue @@ -1,25 +1,29 @@ @@ -27,12 +31,14 @@ if (data) { - 上一步 + + 上一步 + diff --git a/frontend/src/components/Modals/CreateBot/BotBasic.vue b/frontend/src/components/Modals/CreateBot/BotBasic.vue index ecc82f4..cd60597 100644 --- a/frontend/src/components/Modals/CreateBot/BotBasic.vue +++ b/frontend/src/components/Modals/CreateBot/BotBasic.vue @@ -1,16 +1,16 @@ @@ -38,7 +38,10 @@ const acceptModalData = (data: string) => { 选择文件夹 - + 当前选择: (Base Dir)/{{ limitContentShow(store.projectPath, 30) }} @@ -46,14 +49,16 @@ const acceptModalData = (data: string) => { - 上一步 + + 上一步 + diff --git a/frontend/src/components/Modals/CreateBot/CreateBotIndex.vue b/frontend/src/components/Modals/CreateBot/CreateBotIndex.vue index 759343d..9abff90 100644 --- a/frontend/src/components/Modals/CreateBot/CreateBotIndex.vue +++ b/frontend/src/components/Modals/CreateBot/CreateBotIndex.vue @@ -1,65 +1,67 @@ - + 创建 NoneBot 实例 @@ -67,12 +69,14 @@ const steps: StepItem[] = [ v-for="(step, index) in steps" :key="step.title" :role=" - step.pass() && !store.isInstalling && !store.createBotSuccess ? 'button' : undefined + step.pass() && !store.isInstalling && !store.createBotSuccess + ? 'button' + : undefined " :data-content="index < store.step ? '✓' : index + 1" :class="{ step: true, - 'step-primary': index <= store.step + 'step-primary': index <= store.step, }" @click=" step.pass() && !store.isInstalling && !store.createBotSuccess diff --git a/frontend/src/components/Modals/CreateBot/DriverSelect.vue b/frontend/src/components/Modals/CreateBot/DriverSelect.vue index 5066c16..c504adb 100644 --- a/frontend/src/components/Modals/CreateBot/DriverSelect.vue +++ b/frontend/src/components/Modals/CreateBot/DriverSelect.vue @@ -1,25 +1,29 @@ @@ -27,12 +31,14 @@ if (data) { - 上一步 + + 上一步 + diff --git a/frontend/src/components/Modals/CreateBot/InstallationItem.vue b/frontend/src/components/Modals/CreateBot/InstallationItem.vue index 99a8d5f..a39309f 100644 --- a/frontend/src/components/Modals/CreateBot/InstallationItem.vue +++ b/frontend/src/components/Modals/CreateBot/InstallationItem.vue @@ -1,105 +1,109 @@ @@ -113,11 +117,11 @@ onUnmounted(() => { 实例类型 - {{ store.template === 'bootstrap' ? '初学者 / 普通用户' : '开发者' }} + {{ store.template === "bootstrap" ? "初学者 / 普通用户" : "开发者" }} 实例插件加载位置 - {{ store.useSrc ? '/src' : `/${store.projectName}` }} + {{ store.useSrc ? "/src" : `/${store.projectName}` }} 实例路径 @@ -154,12 +158,14 @@ onUnmounted(() => { :class="{ 'flex font-mono': true, 'bg-error/50': item.level === 'ERROR', - 'bg-warning/50': item.level === 'WARNING' + 'bg-warning/50': item.level === 'WARNING', }" > - {{ item.time }} + + {{ item.time }} + {{ item.level }} - {{ item.message }} + {{ item.message }} @@ -169,7 +175,7 @@ onUnmounted(() => { @@ -181,7 +187,7 @@ onUnmounted(() => { 取消 @@ -189,17 +195,19 @@ onUnmounted(() => { - 完成 + + 完成 + - {{ isFailed ? '重试' : '安装' }} + {{ isFailed ? "重试" : "安装" }} diff --git a/frontend/src/components/Modals/CreateBot/ItemSelect.vue b/frontend/src/components/Modals/CreateBot/ItemSelect.vue index 0b5bf5b..c6e2ff9 100644 --- a/frontend/src/components/Modals/CreateBot/ItemSelect.vue +++ b/frontend/src/components/Modals/CreateBot/ItemSelect.vue @@ -1,55 +1,55 @@ @@ -58,8 +58,11 @@ const updateItem = (data: T) => { expand_less @@ -67,9 +70,9 @@ const updateItem = (data: T) => { expand_more @@ -96,8 +99,14 @@ const updateItem = (data: T) => { > {{ limitContentShow(item.name!, 10) }} - - check_circle + + + check_circle + {{ limitContentShow(item.desc!, 20) }} @@ -138,9 +147,9 @@ const updateItem = (data: T) => { diff --git a/frontend/src/components/Modals/CreateBot/MirrorSelect.vue b/frontend/src/components/Modals/CreateBot/MirrorSelect.vue index eb443e6..26afd2f 100644 --- a/frontend/src/components/Modals/CreateBot/MirrorSelect.vue +++ b/frontend/src/components/Modals/CreateBot/MirrorSelect.vue @@ -1,41 +1,41 @@ @@ -80,7 +80,7 @@ const mirrors: MirrorItem[] = [ diff --git a/frontend/src/components/Modals/CreateBot/TemplateSelect.vue b/frontend/src/components/Modals/CreateBot/TemplateSelect.vue index 906d2be..abbb118 100644 --- a/frontend/src/components/Modals/CreateBot/TemplateSelect.vue +++ b/frontend/src/components/Modals/CreateBot/TemplateSelect.vue @@ -1,23 +1,23 @@ @@ -31,7 +31,7 @@ const options: OptionItem[] = [ :key="i.text" :class="{ 'w-full md:w-1/3 btn btn-primary font-normal text-base-100': true, - 'btn-outline': store.template !== i.value + 'btn-outline': store.template !== i.value, }" @click="store.template = i.value" > @@ -76,7 +76,7 @@ const options: OptionItem[] = [ diff --git a/frontend/src/components/Modals/CreateBot/index.ts b/frontend/src/components/Modals/CreateBot/index.ts index db51661..d3fad6f 100644 --- a/frontend/src/components/Modals/CreateBot/index.ts +++ b/frontend/src/components/Modals/CreateBot/index.ts @@ -1,33 +1,33 @@ -import type { Adapter, Driver } from '@/client/api' -import { defineStore } from 'pinia' -import { ref } from 'vue' +import type { Adapter, Driver } from "@/client/api"; +import { defineStore } from "pinia"; +import { ref } from "vue"; -export const useCreateBotStore = defineStore('createBotStore', () => { - const step = ref(0) - const warningMessage = ref('') - const template = ref('') - const useSrc = ref(false) - const projectName = ref('') - const projectPath = ref('') - const pythonMirror = ref('') - const drivers = ref([]) - const adapters = ref([]) - const isInstalling = ref(false) - const createBotSuccess = ref(false) +export const useCreateBotStore = defineStore("createBotStore", () => { + const step = ref(0); + const warningMessage = ref(""); + const template = ref(""); + const useSrc = ref(false); + const projectName = ref(""); + const projectPath = ref(""); + const pythonMirror = ref(""); + const drivers = ref([]); + const adapters = ref([]); + const isInstalling = ref(false); + const createBotSuccess = ref(false); const reset = () => { - step.value = 0 - warningMessage.value = '' - template.value = '' - useSrc.value = false - projectName.value = '' - projectPath.value = '' - pythonMirror.value = '' - drivers.value = [] - adapters.value = [] - isInstalling.value = false - createBotSuccess.value = false - } + step.value = 0; + warningMessage.value = ""; + template.value = ""; + useSrc.value = false; + projectName.value = ""; + projectPath.value = ""; + pythonMirror.value = ""; + drivers.value = []; + adapters.value = []; + isInstalling.value = false; + createBotSuccess.value = false; + }; return { step, @@ -41,6 +41,6 @@ export const useCreateBotStore = defineStore('createBotStore', () => { adapters, isInstalling, createBotSuccess, - reset - } -}) + reset, + }; +}); diff --git a/frontend/src/components/Modals/Global/FolderSelect.vue b/frontend/src/components/Modals/Global/FolderSelect.vue index 4fb1178..9e40ec2 100644 --- a/frontend/src/components/Modals/Global/FolderSelect.vue +++ b/frontend/src/components/Modals/Global/FolderSelect.vue @@ -1,83 +1,83 @@ @@ -99,7 +99,7 @@ const selectFolder = (path: string, isFolder: boolean) => { .split('/') .slice(0, index + 1) .join('/'), - true + true, ) " > @@ -129,7 +129,7 @@ const selectFolder = (path: string, isFolder: boolean) => { > - {{ file.is_dir ? 'folder' : 'draft' }} + {{ file.is_dir ? "folder" : "draft" }} {{ limitContentShow(file.name, 10) }} @@ -138,12 +138,14 @@ const selectFolder = (path: string, isFolder: boolean) => { {{ covertTimestampToDateString(file.modified_time) }} - {{ file.is_dir ? '文件夹' : '文件' }} + {{ file.is_dir ? "文件夹" : "文件" }} - check + + check + { - 刷新 - 新建文件夹 - 选中当前目录 + + 刷新 + + + 新建文件夹 + + + 选中当前目录 + @@ -181,9 +189,9 @@ const selectFolder = (path: string, isFolder: boolean) => { 确认 @@ -204,11 +212,17 @@ const selectFolder = (path: string, isFolder: boolean) => { /> - + 取消 确认 @@ -221,9 +235,9 @@ const selectFolder = (path: string, isFolder: boolean) => { diff --git a/frontend/src/components/Modals/Global/LogView.vue b/frontend/src/components/Modals/Global/LogView.vue index 5e1302e..9627a8c 100644 --- a/frontend/src/components/Modals/Global/LogView.vue +++ b/frontend/src/components/Modals/Global/LogView.vue @@ -1,91 +1,95 @@ @@ -102,12 +106,14 @@ watch( :class="{ 'flex font-mono': true, 'bg-error/50': log.level === 'ERROR', - 'bg-warning/50': log.level === 'WARNING' + 'bg-warning/50': log.level === 'WARNING', }" > - {{ log.time }} + + {{ log.time }} + {{ log.level }} - {{ log.message }} + {{ log.message }} @@ -132,9 +138,9 @@ watch( 完成 diff --git a/frontend/src/components/ToastItem.vue b/frontend/src/components/ToastItem.vue index 81c86ad..6a33d99 100644 --- a/frontend/src/components/ToastItem.vue +++ b/frontend/src/components/ToastItem.vue @@ -1,25 +1,37 @@ - + check_circle - + cancel - + info - + error @@ -37,9 +49,9 @@ const store = useToastStore() diff --git a/frontend/src/components/header/BotChoose.vue b/frontend/src/components/header/BotChoose.vue index d8dc760..2f98911 100644 --- a/frontend/src/components/header/BotChoose.vue +++ b/frontend/src/components/header/BotChoose.vue @@ -1,13 +1,13 @@ @@ -45,7 +45,9 @@ const drawerRef = ref | null>(null) > 选择中 - 运行中 + + 运行中 + @@ -72,9 +74,9 @@ const drawerRef = ref | null>(null) diff --git a/frontend/src/components/header/HeaderIndex.vue b/frontend/src/components/header/HeaderIndex.vue index b0ac264..2e71f93 100644 --- a/frontend/src/components/header/HeaderIndex.vue +++ b/frontend/src/components/header/HeaderIndex.vue @@ -1,22 +1,24 @@ - + + + diff --git a/frontend/src/components/header/NotificationItem.vue b/frontend/src/components/header/NotificationItem.vue index b91fd7d..760fcab 100644 --- a/frontend/src/components/header/NotificationItem.vue +++ b/frontend/src/components/header/NotificationItem.vue @@ -1,12 +1,12 @@ @@ -70,7 +70,7 @@ const drawerRef = ref | null>(null) - {{ toast.from ? `From: ${toast.from}` : '' }} + {{ toast.from ? `From: ${toast.from}` : "" }} @@ -91,9 +91,9 @@ const drawerRef = ref | null>(null) diff --git a/frontend/src/components/header/StatusItem.vue b/frontend/src/components/header/StatusItem.vue index 87d67f0..aac82fb 100644 --- a/frontend/src/components/header/StatusItem.vue +++ b/frontend/src/components/header/StatusItem.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/components/header/TabBar.vue b/frontend/src/components/header/TabBar.vue index 7bd6644..db2f1bf 100644 --- a/frontend/src/components/header/TabBar.vue +++ b/frontend/src/components/header/TabBar.vue @@ -1,46 +1,46 @@ @@ -52,7 +52,7 @@ const operation = (route: NavItem) => { role="tab" :class="{ 'tab flex gap-2 hover:bg-primary/[.2] transition !border-b-0 shrink-0': true, - '[--tab-bg:oklch(var(--b2))] tab-active': isCurrentRoute(i.routeData.path) + '[--tab-bg:oklch(var(--b2))] tab-active': isCurrentRoute(i.routeData.path), }" @click="operation(i)" draggable="true" @@ -78,10 +78,10 @@ const operation = (route: NavItem) => { diff --git a/frontend/src/components/header/WebUISettings.vue b/frontend/src/components/header/WebUISettings.vue index e08aced..d921af2 100644 --- a/frontend/src/components/header/WebUISettings.vue +++ b/frontend/src/components/header/WebUISettings.vue @@ -1,11 +1,11 @@ @@ -32,18 +32,6 @@ const drawerRef = ref | null>() - - - 启用开发模式 - - - - 是否即时搜索 @@ -63,9 +51,9 @@ const drawerRef = ref | null>() diff --git a/frontend/src/components/sidebar/SideMenu.vue b/frontend/src/components/sidebar/SideMenu.vue index 3972f0c..d85947c 100644 --- a/frontend/src/components/sidebar/SideMenu.vue +++ b/frontend/src/components/sidebar/SideMenu.vue @@ -1,38 +1,48 @@ - + - {{ route.googleIcon }} - {{ route.name }} + {{ + navItem.googleIcon + }} + {{ navItem.name }} @@ -41,16 +51,17 @@ const recordView = (route: NavItem) => { diff --git a/frontend/src/views/Login/LoginForm.vue b/frontend/src/views/Login/LoginForm.vue index eb85715..a7e6d51 100644 --- a/frontend/src/views/Login/LoginForm.vue +++ b/frontend/src/views/Login/LoginForm.vue @@ -1,51 +1,39 @@ @@ -60,15 +48,6 @@ const login = async () => { class="input input-ghost bg-base-200" required /> - - 开发模式 - - @@ -77,24 +56,6 @@ const login = async () => { - - - - - - diff --git a/frontend/src/views/Login/LoginIndex.vue b/frontend/src/views/Login/LoginIndex.vue index ef76dae..26640ec 100644 --- a/frontend/src/views/Login/LoginIndex.vue +++ b/frontend/src/views/Login/LoginIndex.vue @@ -1,15 +1,19 @@ - circle + + circle + NoneBot - + 跨平台 PYTHON 异步机器人框架 @@ -23,9 +27,9 @@ import Footer from '@/components/FooterItem.vue' diff --git a/frontend/src/views/NotFound.vue b/frontend/src/views/NotFound.vue index f439140..0c1e9c7 100644 --- a/frontend/src/views/NotFound.vue +++ b/frontend/src/views/NotFound.vue @@ -1,8 +1,8 @@ diff --git a/frontend/src/views/Operation/BotDetails.vue b/frontend/src/views/Operation/BotDetails.vue index 17c138e..c9fb00e 100644 --- a/frontend/src/views/Operation/BotDetails.vue +++ b/frontend/src/views/Operation/BotDetails.vue @@ -1,67 +1,73 @@ @@ -80,14 +86,16 @@ const openModal = (key: string) => { 管理 - 关闭 + + 关闭 + @@ -116,7 +124,9 @@ const openModal = (key: string) => { {{ item.details?.value.length }} 个 - 详细 + + 详细 + diff --git a/frontend/src/views/Operation/OperationBar.vue b/frontend/src/views/Operation/OperationBar.vue index 73f1f74..54a8c60 100644 --- a/frontend/src/views/Operation/OperationBar.vue +++ b/frontend/src/views/Operation/OperationBar.vue @@ -1,110 +1,110 @@ @@ -118,7 +118,9 @@ const deleteBot = async (isFully: boolean = false) => { 仅删除信息 - 取消 + + 取消 + @@ -129,7 +131,9 @@ const deleteBot = async (isFully: boolean = false) => { {{ store.selectedBot?.project_name }} - {{ store.selectedBot?.project_id }} + + {{ store.selectedBot?.project_id }} + { @@ -154,7 +158,7 @@ const deleteBot = async (isFully: boolean = false) => { @@ -163,7 +167,7 @@ const deleteBot = async (isFully: boolean = false) => { @@ -173,7 +177,9 @@ const deleteBot = async (isFully: boolean = false) => { :class="{ 'btn btn-sm btn-outline btn-primary shadow-none font-normal': true, 'btn-disabled': - store.selectedBot?.is_running || Object.values(store.bots).length <= 1 || oLock + store.selectedBot?.is_running || + Object.values(store.bots).length <= 1 || + oLock, }" @click="deleteConfirmModal?.showModal()" > diff --git a/frontend/src/views/Operation/OperationIndex.vue b/frontend/src/views/Operation/OperationIndex.vue index 5f1ce00..1f939bf 100644 --- a/frontend/src/views/Operation/OperationIndex.vue +++ b/frontend/src/views/Operation/OperationIndex.vue @@ -1,7 +1,7 @@ diff --git a/frontend/src/views/Operation/TerminalItem.vue b/frontend/src/views/Operation/TerminalItem.vue index 56c827b..84964e1 100644 --- a/frontend/src/views/Operation/TerminalItem.vue +++ b/frontend/src/views/Operation/TerminalItem.vue @@ -1,118 +1,133 @@ @@ -126,7 +141,9 @@ const retry = () => { > 已连接 - 未连接 + + 未连接 + @@ -139,7 +156,10 @@ const retry = () => { - + { :class="{ 'flex font-mono': true, 'bg-error/50': item.level === 'ERROR', - 'bg-warning/50': item.level === 'WARNING' + 'bg-warning/50': item.level === 'WARNING', }" > - + {{ item.time }} {{ item.level }} - + {{ item.message }} diff --git a/frontend/src/views/Settings/DotenvEditorModal.vue b/frontend/src/views/Settings/DotenvEditorModal.vue index 63ae1ce..99e21d6 100644 --- a/frontend/src/views/Settings/DotenvEditorModal.vue +++ b/frontend/src/views/Settings/DotenvEditorModal.vue @@ -1,87 +1,92 @@ @@ -98,16 +103,16 @@ const updateDotenvFile = async () => { minimap: { enabled: false }, accessibilitySupport: 'off', automaticLayout: true, - lineNumbers: 'off' + lineNumbers: 'off', }" v-on:editor=" (event) => { - editor = event + editor = event; } " v-on:update-value=" (value) => { - returnEditorValue = value + returnEditorValue = value; } " /> diff --git a/frontend/src/views/Settings/DotenvManageModal.vue b/frontend/src/views/Settings/DotenvManageModal.vue index e7e2390..14c896e 100644 --- a/frontend/src/views/Settings/DotenvManageModal.vue +++ b/frontend/src/views/Settings/DotenvManageModal.vue @@ -1,100 +1,104 @@ @@ -110,7 +114,11 @@ const cancel = () => { - + {{ i }} { close @@ -137,7 +148,11 @@ const cancel = () => { + 添加 - + 确认 取消 diff --git a/frontend/src/views/Settings/InputTemplate/ArrayInput.vue b/frontend/src/views/Settings/InputTemplate/ArrayInput.vue index 502f1ef..d4ab68a 100644 --- a/frontend/src/views/Settings/InputTemplate/ArrayInput.vue +++ b/frontend/src/views/Settings/InputTemplate/ArrayInput.vue @@ -1,70 +1,77 @@ @@ -78,7 +85,11 @@ const cancel = () => { - + {{ i }} diff --git a/frontend/src/views/Settings/InputTemplate/BooleanInput.vue b/frontend/src/views/Settings/InputTemplate/BooleanInput.vue index 9a707d9..ff74c4c 100644 --- a/frontend/src/views/Settings/InputTemplate/BooleanInput.vue +++ b/frontend/src/views/Settings/InputTemplate/BooleanInput.vue @@ -1,8 +1,8 @@ @@ -12,9 +12,11 @@ defineProps<{ moduleType: ModuleType | ConfigType; data: ModuleConfigChild }>() :checked="data.configured as boolean" @click=" async () => { - await updateConfig(moduleType, data.conf_type, data.name, !data.configured).then(() => { - data.configured! = !data.configured - }) + await updateConfig(moduleType, data.conf_type, data.name, !data.configured).then( + () => { + data.configured! = !data.configured; + }, + ); } " /> diff --git a/frontend/src/views/Settings/InputTemplate/NumberInput.vue b/frontend/src/views/Settings/InputTemplate/NumberInput.vue index f1c93d0..385fa34 100644 --- a/frontend/src/views/Settings/InputTemplate/NumberInput.vue +++ b/frontend/src/views/Settings/InputTemplate/NumberInput.vue @@ -1,32 +1,33 @@ @@ -45,7 +46,10 @@ watch(inputValue, (value) => { - + refresh @@ -54,7 +58,12 @@ watch(inputValue, (value) => { data-tip="编辑" @click="inEditing = !inEditing" > - + edit diff --git a/frontend/src/views/Settings/InputTemplate/SelectInput.vue b/frontend/src/views/Settings/InputTemplate/SelectInput.vue index a88e872..c468a72 100644 --- a/frontend/src/views/Settings/InputTemplate/SelectInput.vue +++ b/frontend/src/views/Settings/InputTemplate/SelectInput.vue @@ -1,26 +1,29 @@ @@ -43,7 +46,12 @@ watch(selectedValue, async () => { data-tip="编辑" @click="inEditing = !inEditing" > - + edit diff --git a/frontend/src/views/Settings/InputTemplate/StringInput.vue b/frontend/src/views/Settings/InputTemplate/StringInput.vue index d19844f..f0d8e71 100644 --- a/frontend/src/views/Settings/InputTemplate/StringInput.vue +++ b/frontend/src/views/Settings/InputTemplate/StringInput.vue @@ -1,31 +1,31 @@ @@ -60,7 +60,10 @@ const update = async () => { visibility - + refresh @@ -69,7 +72,12 @@ const update = async () => { data-tip="编辑" @click="inEditing = !inEditing" > - + edit diff --git a/frontend/src/views/Settings/SearchBar.vue b/frontend/src/views/Settings/SearchBar.vue index 97776a6..606f249 100644 --- a/frontend/src/views/Settings/SearchBar.vue +++ b/frontend/src/views/Settings/SearchBar.vue @@ -1,79 +1,79 @@ @@ -82,7 +82,9 @@ const moduleItems: moduleItem[] = [ - + - + menu - 当前环境:{{ nonebotStore.selectedBot?.use_env || '未知' }} + 当前环境:{{ nonebotStore.selectedBot?.use_env || "未知" }} - 编辑文件 + + 编辑文件 + diff --git a/frontend/src/views/Settings/SettingCard.vue b/frontend/src/views/Settings/SettingCard.vue index 9c98588..c6644fb 100644 --- a/frontend/src/views/Settings/SettingCard.vue +++ b/frontend/src/views/Settings/SettingCard.vue @@ -1,12 +1,12 @@ @@ -50,7 +50,11 @@ const props = defineProps<{ data: ModuleConfigFather }>() :data="i" :module-type="data.module_type" /> - + -import SettingCard from './SettingCard.vue' -import SearchBar from './SearchBar.vue' -import { useSettingsStore } from './client' +import SettingCard from "./SettingCard.vue"; +import SearchBar from "./SearchBar.vue"; +import { useSettingsStore } from "./client"; -const settingsStore = useSettingsStore() +const settingsStore = useSettingsStore(); -settingsStore.init() +settingsStore.init(); diff --git a/frontend/src/views/Settings/client.ts b/frontend/src/views/Settings/client.ts index bddc240..b679a37 100644 --- a/frontend/src/views/Settings/client.ts +++ b/frontend/src/views/Settings/client.ts @@ -4,156 +4,172 @@ import { type ModuleConfigFather, ProjectService, ConfigTypeSchema, - ModuleTypeSchema -} from '@/client/api' -import { useNoneBotStore, useToastStore } from '@/stores' -import { defineStore } from 'pinia' -import { ref } from 'vue' + ModuleTypeSchema, +} from "@/client/api"; +import { useNoneBotStore, useToastStore } from "@/stores"; +import { defineStore } from "pinia"; +import { ref } from "vue"; -const store = useNoneBotStore() -const toast = useToastStore() +const store = useNoneBotStore(); +const toast = useToastStore(); -export type ModuleConfigType = ModuleType | ConfigType | 'all' +export type ModuleConfigType = ModuleType | ConfigType | "all"; export const updateConfig = async ( moduleType: ModuleType | ConfigType, confType: string, k: string, - v: any + v: any, ) => { if (!store.selectedBot) { - toast.add('warning', '未选择实例', '', 5000) - return + toast.add("warning", "未选择实例", "", 5000); + return; } - const { data, error } = await ProjectService.updateProjectConfigV1ProjectConfigUpdatePost({ - query: { - module_type: moduleType, - project_id: store.selectedBot.project_id - }, - body: { - env: store.selectedBot.use_env!, - conf_type: confType, - k: k, - v: v - } - }) + const { data, error } = + await ProjectService.updateProjectConfigV1ProjectConfigUpdatePost({ + query: { + module_type: moduleType, + project_id: store.selectedBot.project_id, + }, + body: { + env: store.selectedBot.use_env!, + conf_type: confType, + k: k, + v: v, + }, + }); if (error) { - toast.add('error', `更新失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `更新失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - toast.add('success', '更新成功', '', 5000) + toast.add("success", "更新成功", "", 5000); } - return { data, error } -} + return { data, error }; +}; -export const useSettingsStore = defineStore('settingsStore', () => { - const viewModule = ref('all') - const settingsData = ref([]) - const viewData = ref([]) - const isRequesting = ref(false) - const searchInput = ref('') +export const useSettingsStore = defineStore("settingsStore", () => { + const viewModule = ref("all"); + const settingsData = ref([]); + const viewData = ref([]); + const isRequesting = ref(false); + const searchInput = ref(""); const getTomlConf = async (projectID: string) => { - isRequesting.value = true - const { data, error } = await ProjectService.getProjectMetaConfigV1ProjectConfigMetaDetailGet({ - query: { - project_id: projectID - } - }) + isRequesting.value = true; + const { data, error } = + await ProjectService.getProjectMetaConfigV1ProjectConfigMetaDetailGet({ + query: { + project_id: projectID, + }, + }); if (error) { - toast.add('error', `获取实例 toml 配置失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add( + "error", + `获取实例 toml 配置失败, 原因:${error.detail?.toString()}`, + "", + 5000, + ); } if (data) { - settingsData.value = settingsData.value.concat(data.detail) + settingsData.value = settingsData.value.concat(data.detail); } - isRequesting.value = false - } + isRequesting.value = false; + }; const getNoneBotConf = async (projectID: string) => { - isRequesting.value = true + isRequesting.value = true; const { data, error } = await ProjectService.getProjectNonebotConfigV1ProjectConfigNonebotDetailGet({ query: { - project_id: projectID - } - }) + project_id: projectID, + }, + }); if (error) { - toast.add('error', `获取实例 NoneBot 配置失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add( + "error", + `获取实例 NoneBot 配置失败, 原因:${error.detail?.toString()}`, + "", + 5000, + ); } if (data) { - settingsData.value = settingsData.value.concat(data.detail) + settingsData.value = settingsData.value.concat(data.detail); } - isRequesting.value = false - } + isRequesting.value = false; + }; const getNoneBotPluginConf = async (projectID: string) => { - isRequesting.value = true + isRequesting.value = true; const { data, error } = - await ProjectService.getProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGet({ - query: { - project_id: projectID - } - }) + await ProjectService.getProjectNonebotPluginConfigV1ProjectConfigNonebotPluginDetailGet( + { + query: { + project_id: projectID, + }, + }, + ); if (error) { - toast.add('error', `获取实例配置失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `获取实例配置失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - settingsData.value = settingsData.value.concat(data.detail) + settingsData.value = settingsData.value.concat(data.detail); } - isRequesting.value = false - } + isRequesting.value = false; + }; const updateViewData = (searchText?: string) => { viewData.value = settingsData.value.filter((item) => { - if (!searchText) return true + if (!searchText) return true; return ( item.title.includes(searchText) || item.name.includes(searchText) || - (item.description ?? '').includes(searchText) - ) - }) - - const filter = [...ConfigTypeSchema.enum, ...ModuleTypeSchema.enum] - if (viewModule.value !== 'all' && Object.values(filter).includes(viewModule.value)) { - viewData.value = viewData.value.filter((item) => item.module_type === viewModule.value) + (item.description ?? "").includes(searchText) + ); + }); + + const filter = [...ConfigTypeSchema.enum, ...ModuleTypeSchema.enum]; + if (viewModule.value !== "all" && Object.values(filter).includes(viewModule.value)) { + viewData.value = viewData.value.filter( + (item) => item.module_type === viewModule.value, + ); } - } + }; const init = async () => { if (!store.selectedBot) { - toast.add('warning', '未选择实例', '', 5000) - return + toast.add("warning", "未选择实例", "", 5000); + return; } - settingsData.value = [] + settingsData.value = []; - const projectID = store.selectedBot.project_id + const projectID = store.selectedBot.project_id; - await getTomlConf(projectID) - await getNoneBotConf(projectID) - await getNoneBotPluginConf(projectID) + await getTomlConf(projectID); + await getNoneBotConf(projectID); + await getNoneBotPluginConf(projectID); - updateViewData(searchInput.value) - } + updateViewData(searchInput.value); + }; const setViewModule = (module: ModuleConfigType) => { - viewModule.value = module - searchInput.value = '' - updateViewData() - } + viewModule.value = module; + searchInput.value = ""; + updateViewData(); + }; return { viewModule, @@ -163,6 +179,6 @@ export const useSettingsStore = defineStore('settingsStore', () => { searchInput, init, updateViewData, - setViewModule - } -}) + setViewModule, + }; +}); diff --git a/frontend/src/views/Store/ExtensionCard.vue b/frontend/src/views/Store/ExtensionCard.vue index 472f51f..c3db1c7 100644 --- a/frontend/src/views/Store/ExtensionCard.vue +++ b/frontend/src/views/Store/ExtensionCard.vue @@ -9,138 +9,185 @@ > import { StoreService, + ProcessService, type nb_cli_plugin_webui__app__models__base__ModuleInfo, - type nb_cli_plugin_webui__app__models__store__Plugin -} from '@/client/api' -import type { PypiInfo } from '@/views/Store/types' -import { useFetch } from '@vueuse/core' -import { computed, ref } from 'vue' -import { useSearchStore } from './client' -import { useNoneBotStore, useToastStore } from '@/stores' -import LogView from '@/components/Modals/Global/LogView.vue' -import router from '@/router' + type nb_cli_plugin_webui__app__models__store__Plugin, +} from "@/client/api"; +import type { PypiInfo } from "@/views/Store/types"; +import { sleep } from "@/client/utils"; +import { useFetch } from "@vueuse/core"; +import { computed, ref } from "vue"; +import { useSearchStore } from "./client"; +import { useNoneBotStore, useToastStore } from "@/stores"; +import LogView from "@/components/Modals/Global/LogView.vue"; +import router from "@/router"; const store = useSearchStore(), - nonebotStore = useNoneBotStore() + nonebotStore = useNoneBotStore(); -const toast = useToastStore() +const toast = useToastStore(); const props = defineProps<{ - data: T -}>() + data: T; +}>(); const extensionCardModal = ref(), pypiData = ref(), logViewModal = ref | null>(), - installLogKey = ref(''), - extensionUninstallConfirmModal = ref() + installLogKey = ref(""), + extensionUninstallConfirmModal = ref(), + restartConfirmModal = ref(); + +const isRestarting = ref(false); const open = async () => { - extensionCardModal.value?.showModal() + extensionCardModal.value?.showModal(); - const pypiURL = `https://pypi.org/pypi/${props.data.project_link}/json` - const { data } = await useFetch(pypiURL).json() - if (data.value) pypiData.value = data.value -} + const pypiURL = `https://pypi.org/pypi/${props.data.project_link}/json`; + const { data } = await useFetch(pypiURL).json(); + if (data.value) pypiData.value = data.value; +}; const isTestPassed = (data: T): boolean => { - if ('valid' in data && 'skip_test' in data) { - return data.valid && !data.skip_test + if ("valid" in data && "skip_test" in data) { + return data.valid && !data.skip_test; } - return false -} + return false; +}; const installModule = async (module: T) => { - if (!nonebotStore.selectedBot || !module) return + if (!nonebotStore.selectedBot || !module) return; - const moduleType = 'valid' in module ? 'plugin' : 'module' + const moduleType = "valid" in module ? "plugin" : "module"; - const { data, error } = await StoreService.installNonebotModuleV1StoreNonebotInstallPost({ - query: { - env: nonebotStore.selectedBot.use_env!, - project_id: nonebotStore.selectedBot.project_id - }, + const { data, error } = + await StoreService.installNonebotModuleV1StoreNonebotInstallPost({ + query: { + env: nonebotStore.selectedBot.use_env!, + project_id: nonebotStore.selectedBot.project_id, + }, - // TODO: 正常 Module 同 Plugin 拓展数据冲突, 待修复 - // @ts-ignore - body: { - ...module, - module_type: moduleType - } - }) + // TODO: 正常 Module 同 Plugin 拓展数据冲突, 待修复 + // @ts-ignore + body: { + ...module, + module_type: moduleType, + }, + }); if (error) { - toast.add('error', `提交安装失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `提交安装失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - installLogKey.value = data.detail - logViewModal.value?.openModal() + installLogKey.value = data.detail; + logViewModal.value?.openModal(); } -} +}; const uninstallModule = async (module: T) => { - if (!nonebotStore.selectedBot || !module) return - if (!module.is_download) return - - const moduleType = 'valid' in module ? 'plugin' : 'module' - - const { data, error } = await StoreService.uninstallNonebotModuleV1StoreNonebotUninstallPost({ - query: { - env: nonebotStore.selectedBot.use_env!, - project_id: nonebotStore.selectedBot.project_id - }, - - // TODO: 正常 Module 同 Plugin 拓展数据冲突, 待修复 - // @ts-ignore - body: { - ...module, - module_type: moduleType - } - }) + if (!nonebotStore.selectedBot || !module) return; + if (!module.is_download) return; + + const moduleType = "valid" in module ? "plugin" : "module"; + + const { data, error } = + await StoreService.uninstallNonebotModuleV1StoreNonebotUninstallPost({ + query: { + env: nonebotStore.selectedBot.use_env!, + project_id: nonebotStore.selectedBot.project_id, + }, + + // TODO: 正常 Module 同 Plugin 拓展数据冲突, 待修复 + // @ts-ignore + body: { + ...module, + module_type: moduleType, + }, + }); if (error) { - toast.add('error', `卸载失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `卸载失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - extensionUninstallConfirmModal.value?.close() - await store.updateData(nonebotStore.selectedBot.project_id, false) - toast.add('success', '卸载成功', '', 5000) + extensionUninstallConfirmModal.value?.close(); + await store.updateData(nonebotStore.selectedBot.project_id, false); + toast.add("success", "卸载成功", "", 5000); } -} +}; const isRetry = () => { - installModule(props.data) -} + installModule(props.data); +}; const isFinished = async () => { - await store.updateData(nonebotStore.selectedBot!.project_id, false) -} + await store.updateData(nonebotStore.selectedBot!.project_id, false); + + if (nonebotStore.selectedBot?.is_running) { + restartConfirmModal.value?.showModal(); + } +}; + +const restartBot = async () => { + if (!nonebotStore.selectedBot) return; + + isRestarting.value = true; + + const { error: stopError } = await ProcessService.stopProcessV1ProcessStopPost({ + query: { + project_id: nonebotStore.selectedBot.project_id, + }, + }); + + if (stopError) { + toast.add("error", `停止失败, 原因:${stopError.detail?.toString()}`, "", 5000); + isRestarting.value = false; + return; + } + + await sleep(1000); + + const { error: runError } = await ProcessService.runProcessV1ProcessRunPost({ + query: { + project_id: nonebotStore.selectedBot.project_id, + }, + }); + + if (runError) { + toast.add("error", `启动失败, 原因:${runError.detail?.toString()}`, "", 5000); + } else { + toast.add("success", "实例已重启", "", 5000); + await nonebotStore.loadBots(); + } + + isRestarting.value = false; + restartConfirmModal.value?.close(); +}; const getUpdateTime = computed(() => { - if (!('time' in props.data)) return 'ignore' + if (!("time" in props.data)) return "ignore"; - const time = new Date(props.data.time) - const now = new Date() - const diff = now.getTime() - time.getTime() - const diffHours = diff / (1000 * 60 * 60) - const diffDays = diff / (1000 * 60 * 60 * 24) - const diffMonths = diff / (1000 * 60 * 60 * 24 * 30) - const diffYears = diff / (1000 * 60 * 60 * 24 * 365) + const time = new Date(props.data.time); + const now = new Date(); + const diff = now.getTime() - time.getTime(); + const diffHours = diff / (1000 * 60 * 60); + const diffDays = diff / (1000 * 60 * 60 * 24); + const diffMonths = diff / (1000 * 60 * 60 * 24 * 30); + const diffYears = diff / (1000 * 60 * 60 * 24 * 365); if (diffYears >= 1) { - return `${Math.floor(diffYears)}年前` + return `${Math.floor(diffYears)}年前`; } else if (diffMonths >= 1) { - return `${Math.floor(diffMonths)}个月前` + return `${Math.floor(diffMonths)}个月前`; } else if (diffDays >= 1) { - return `${Math.floor(diffDays)}天前` + return `${Math.floor(diffDays)}天前`; } else if (diffHours >= 1) { - return `${Math.floor(diffHours)}小时前` + return `${Math.floor(diffHours)}小时前`; } else { - return '刚刚' + return "刚刚"; } -}) +}); @@ -157,7 +204,32 @@ const getUpdateTime = computed(() => { 确定 - 取消 + + 取消 + + + + + + + + 重启实例 + 插件安装完成,需要重启实例以应用更改。是否立即重启? + + + 稍后重启 + + + + + {{ isRestarting ? "重启中..." : "立即重启" }} + @@ -208,7 +280,9 @@ const getUpdateTime = computed(() => { > 卸载 - 安装 + + 安装 + @@ -218,7 +292,10 @@ const getUpdateTime = computed(() => { {{ props.data.desc }} - + { file_save - {{ (pypiData?.releases[Object.keys(pypiData.releases).pop()!][1].size ?? 0) / 1000 }} + {{ + (pypiData?.releases[Object.keys(pypiData.releases).pop()!][1].size ?? 0) / + 1000 + }} K @@ -348,7 +428,7 @@ const getUpdateTime = computed(() => { @click=" store.updateTag({ label: 'author', - text: props.data.author + text: props.data.author, }) " > @@ -369,7 +449,7 @@ const getUpdateTime = computed(() => { @click=" store.updateTag({ label: 'tag', - text: tag.label + text: tag.label, }) " > @@ -407,7 +487,9 @@ const getUpdateTime = computed(() => { > 设置 - 安装 + + 安装 + diff --git a/frontend/src/views/Store/ExtensionContainer.vue b/frontend/src/views/Store/ExtensionContainer.vue index fe549df..002bac7 100644 --- a/frontend/src/views/Store/ExtensionContainer.vue +++ b/frontend/src/views/Store/ExtensionContainer.vue @@ -1,8 +1,8 @@ diff --git a/frontend/src/views/Store/Pagination.vue b/frontend/src/views/Store/Pagination.vue index f041118..4078952 100644 --- a/frontend/src/views/Store/Pagination.vue +++ b/frontend/src/views/Store/Pagination.vue @@ -1,45 +1,49 @@ @@ -49,12 +53,14 @@ watch( :class="{ 'btn btn-sm shadow-none px-1': true, 'btn-disabled': store.nowPage <= 1, - hidden: store.storeData.length <= 0 + hidden: store.storeData.length <= 0, }" > chevron_left @@ -65,12 +71,12 @@ watch( :key="page" :class="{ 'btn btn-sm shadow-none': true, - 'btn-primary text-base-100': Number(page) === store.nowPage + 'btn-primary text-base-100': Number(page) === store.nowPage, }" @click=" () => { if (typeof page === 'number' && nonebotStore.selectedBot) { - store.turnPage(page, nonebotStore.selectedBot?.project_id) + store.turnPage(page, nonebotStore.selectedBot?.project_id); } } " @@ -82,9 +88,11 @@ watch( :class="{ 'btn btn-sm shadow-none px-1': true, 'btn-disabled': store.nowPage >= store.totalPage, - hidden: store.storeData.length <= 0 + hidden: store.storeData.length <= 0, }" - @click="store.turnPage(store.nowPage + 1, nonebotStore.selectedBot?.project_id ?? '')" + @click=" + store.turnPage(store.nowPage + 1, nonebotStore.selectedBot?.project_id ?? '') + " > chevron_right @@ -95,9 +103,9 @@ watch( diff --git a/frontend/src/views/Store/SearchBar.vue b/frontend/src/views/Store/SearchBar.vue index 897ebde..41b3a29 100644 --- a/frontend/src/views/Store/SearchBar.vue +++ b/frontend/src/views/Store/SearchBar.vue @@ -1,121 +1,129 @@ - + - + {{ filter.tip }} @@ -202,11 +217,11 @@ const filterItems: filterItem[] = [ placeholder="请键入" class="input input-sm input-bordered" @keydown.enter=" - store.updateTag({ + (store.updateTag({ label: 'author', - text: authorInput + text: authorInput, }), - (authorInput = '') + (authorInput = '')) " /> @@ -225,11 +240,11 @@ const filterItems: filterItem[] = [ placeholder="请键入" class="input input-sm input-bordered" @keydown.enter=" - store.updateTag({ + (store.updateTag({ label: 'tag', - text: labelInput + text: labelInput, }), - (labelInput = '') + (labelInput = '')) " /> diff --git a/frontend/src/views/Store/StoreIndex.vue b/frontend/src/views/Store/StoreIndex.vue index 7408b9b..f2538be 100644 --- a/frontend/src/views/Store/StoreIndex.vue +++ b/frontend/src/views/Store/StoreIndex.vue @@ -1,23 +1,23 @@ diff --git a/frontend/src/views/Store/client.ts b/frontend/src/views/Store/client.ts index abe67cf..776e650 100644 --- a/frontend/src/views/Store/client.ts +++ b/frontend/src/views/Store/client.ts @@ -4,122 +4,127 @@ import { type nb_cli_plugin_webui__app__models__store__Plugin, StoreService, type ModuleType, - type nb_cli_plugin_webui__app__models__store__SearchTag -} from '@/client/api' -import { useToastStore } from '@/stores' -import { defineStore } from 'pinia' -import { ref } from 'vue' + type nb_cli_plugin_webui__app__models__store__SearchTag, +} from "@/client/api"; +import { useToastStore } from "@/stores"; +import { defineStore } from "pinia"; +import { ref } from "vue"; -const toast = useToastStore() +const toast = useToastStore(); -export const useSearchStore = defineStore('storeSearchStore', () => { - const searchInput = ref(''), +export const useSearchStore = defineStore("storeSearchStore", () => { + const searchInput = ref(""), searchTags = ref([]), - storeData = ref<(nb_cli_plugin_webui__app__models__store__Plugin | Adapter | Driver)[]>([]), + storeData = ref< + (nb_cli_plugin_webui__app__models__store__Plugin | Adapter | Driver)[] + >([]), nowPage = ref(1), totalPage = ref(1), totalItem = ref(0), - viewModule = ref('plugin'), - isRequesting = ref(false) + viewModule = ref("plugin"), + isRequesting = ref(false); const clear = () => { - searchInput.value = '' - searchTags.value = [] - storeData.value = [] - nowPage.value = 1 - totalPage.value = 1 - totalItem.value = 0 - } + searchInput.value = ""; + searchTags.value = []; + storeData.value = []; + nowPage.value = 1; + totalPage.value = 1; + totalItem.value = 0; + }; const isTagExisted = (tag: nb_cli_plugin_webui__app__models__store__SearchTag) => { - return searchTags.value.some((t) => t.label === tag.label && t.text === tag.text) - } + return searchTags.value.some((t) => t.label === tag.label && t.text === tag.text); + }; const removeTag = (tag: nb_cli_plugin_webui__app__models__store__SearchTag) => { - const index = searchTags.value.findIndex((t) => t.label === tag.label && t.text === tag.text) + const index = searchTags.value.findIndex( + (t) => t.label === tag.label && t.text === tag.text, + ); if (index !== -1) { - searchTags.value.splice(index, 1) + searchTags.value.splice(index, 1); } - } + }; const updateTag = (tag: nb_cli_plugin_webui__app__models__store__SearchTag) => { if (isTagExisted(tag)) { - removeTag(tag) + removeTag(tag); } else { - searchTags.value.push(tag) + searchTags.value.push(tag); } - } + }; const updateData = async (projectID: string, isShowAll: boolean) => { - isRequesting.value = true - const isSearch = searchInput.value !== '' || searchTags.value.length > 0 + isRequesting.value = true; + const isSearch = searchInput.value !== "" || searchTags.value.length > 0; const { data, error } = await StoreService.getNonebotStoreItemsV1StoreNonebotListGet({ query: { module_type: viewModule.value, page: nowPage.value, is_search: isSearch, show_all: isShowAll, - project_id: projectID - } - }) + project_id: projectID, + }, + }); if (error) { - toast.add('error', `获取商店数据失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `获取商店数据失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - storeData.value = data.detail - totalPage.value = data.total_page - totalItem.value = data.total_item + storeData.value = data.detail; + totalPage.value = data.total_page; + totalItem.value = data.total_item; } - isRequesting.value = false - } + isRequesting.value = false; + }; const selectModule = async (module: ModuleType, projectID: string) => { - viewModule.value = module - clear() - await updateData(projectID, false) - } + viewModule.value = module; + clear(); + await updateData(projectID, false); + }; const turnPage = async (page: number, projectID: string) => { - nowPage.value = page >= 0 ? page : 0 + nowPage.value = page >= 0 ? page : 0; if (page >= totalPage.value) { - nowPage.value = totalPage.value + nowPage.value = totalPage.value; } - await updateData(projectID, false) - } + await updateData(projectID, false); + }; const upDataBySearch = async (projectID: string) => { - isRequesting.value = true - const { data, error } = await StoreService.searchNonebotStoreItemV1StoreNonebotSearchPost({ - query: { - project_id: projectID - }, - body: { - data: { - module_type: viewModule.value, - tags: searchTags.value, - content: searchInput.value - } - } - }) + isRequesting.value = true; + const { data, error } = + await StoreService.searchNonebotStoreItemV1StoreNonebotSearchPost({ + query: { + project_id: projectID, + }, + body: { + data: { + module_type: viewModule.value, + tags: searchTags.value, + content: searchInput.value, + }, + }, + }); if (error) { - toast.add('error', `搜索失败, 原因:${error.detail?.toString()}`, '', 5000) + toast.add("error", `搜索失败, 原因:${error.detail?.toString()}`, "", 5000); } if (data) { - nowPage.value = 1 + nowPage.value = 1; - storeData.value = data.detail - totalPage.value = data.total_page - totalItem.value = data.total_item + storeData.value = data.detail; + totalPage.value = data.total_page; + totalItem.value = data.total_item; } - isRequesting.value = false - } + isRequesting.value = false; + }; return { searchInput, @@ -137,6 +142,6 @@ export const useSearchStore = defineStore('storeSearchStore', () => { updateData, selectModule, turnPage, - upDataBySearch - } -}) + upDataBySearch, + }; +}); diff --git a/frontend/src/views/Store/types.ts b/frontend/src/views/Store/types.ts index be75cdd..06ed7fa 100644 --- a/frontend/src/views/Store/types.ts +++ b/frontend/src/views/Store/types.ts @@ -1,96 +1,96 @@ export interface PypiInfo { - info: Info - last_serial: number - releases: Releases - urls: Url[] - vulnerabilities: any[] + info: Info; + last_serial: number; + releases: Releases; + urls: Url[]; + vulnerabilities: any[]; } interface Info { - author: string - author_email: string - bugtrack_url: any - classifiers: string[] - description: string - description_content_type: string - docs_url: any - download_url: string - downloads: Downloads - dynamic: any - home_page: string - keywords: string - license: string - maintainer: string - maintainer_email: string - name: string - package_url: string - platform: any - project_url: string - project_urls: ProjectUrls - provides_extra: any - release_url: string - requires_dist: string[] - requires_python: string - summary: string - version: string - yanked: boolean - yanked_reason: any + author: string; + author_email: string; + bugtrack_url: any; + classifiers: string[]; + description: string; + description_content_type: string; + docs_url: any; + download_url: string; + downloads: Downloads; + dynamic: any; + home_page: string; + keywords: string; + license: string; + maintainer: string; + maintainer_email: string; + name: string; + package_url: string; + platform: any; + project_url: string; + project_urls: ProjectUrls; + provides_extra: any; + release_url: string; + requires_dist: string[]; + requires_python: string; + summary: string; + version: string; + yanked: boolean; + yanked_reason: any; } interface Downloads { - last_day: number - last_month: number - last_week: number + last_day: number; + last_month: number; + last_week: number; } interface ProjectUrls { - Documentation: string - Homepage: string - Repository: string + Documentation: string; + Homepage: string; + Repository: string; } interface Releases { - [key: string]: ReleaseInfo[] + [key: string]: ReleaseInfo[]; } interface ReleaseInfo { - comment_text: string - digests: Digests - downloads: number - filename: string - has_sig: boolean - md5_digest: string - packagetype: string - python_version: string - requires_python: string - size: number - upload_time: string - upload_time_iso_8601: string - url: string - yanked: boolean - yanked_reason: any + comment_text: string; + digests: Digests; + downloads: number; + filename: string; + has_sig: boolean; + md5_digest: string; + packagetype: string; + python_version: string; + requires_python: string; + size: number; + upload_time: string; + upload_time_iso_8601: string; + url: string; + yanked: boolean; + yanked_reason: any; } interface Digests { - blake2b_256: string - md5: string - sha256: string + blake2b_256: string; + md5: string; + sha256: string; } interface Url { - comment_text: string - digests: Digests - downloads: number - filename: string - has_sig: boolean - md5_digest: string - packagetype: string - python_version: string - requires_python: string - size: number - upload_time: string - upload_time_iso_8601: string - url: string - yanked: boolean - yanked_reason: any + comment_text: string; + digests: Digests; + downloads: number; + filename: string; + has_sig: boolean; + md5_digest: string; + packagetype: string; + python_version: string; + requires_python: string; + size: number; + upload_time: string; + upload_time_iso_8601: string; + url: string; + yanked: boolean; + yanked_reason: any; } diff --git a/frontend/src/views/ViewIndex.vue b/frontend/src/views/ViewIndex.vue index 858d6aa..c7df28e 100644 --- a/frontend/src/views/ViewIndex.vue +++ b/frontend/src/views/ViewIndex.vue @@ -1,8 +1,8 @@ diff --git a/frontend/src/views/WelcomeItem.vue b/frontend/src/views/WelcomeItem.vue index aa1426f..44d1f55 100644 --- a/frontend/src/views/WelcomeItem.vue +++ b/frontend/src/views/WelcomeItem.vue @@ -1,13 +1,13 @@ @@ -31,7 +31,9 @@ const addBotModal = ref | null>() class="p-4 border border-base-content/25 rounded-box flex flex-col gap-2 md:gap-4 transition hover:shadow-lg" > 阅读文档 - 查看文档以解决有关 NoneBot 的大部分疑问。 + + 查看文档以解决有关 NoneBot 的大部分疑问。 + { + const env = loadEnv(mode, process.cwd(), ""); + const host = env.NB_WEBUI_HOST || "localhost"; + const port = env.NB_WEBUI_PORT || "12345"; + + return { + plugins: [vue()], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + }, + }, + server: { + proxy: { + "/api": { + target: `http://${host}:${port}`, + changeOrigin: true, + ws: true, + }, + }, + }, + build: { + outDir: "../nb_cli_plugin_webui/dist", + }, + }; +}); diff --git a/nb_cli_plugin_webui/app/application.py b/nb_cli_plugin_webui/app/application.py index a348c01..867a492 100644 --- a/nb_cli_plugin_webui/app/application.py +++ b/nb_cli_plugin_webui/app/application.py @@ -10,10 +10,10 @@ from nb_cli_plugin_webui import get_version -from .config import Config from .logging import logger as log from .utils.scheduler import scheduler from .router import router as api_router +from .config import CONFIG_FILE_PATH, Config from .handlers.process import ProcessManager from .handlers import driver_store_manager, plugin_store_manager, adapter_store_manager @@ -53,7 +53,8 @@ async def get_response(self, path: str, scope: Scope) -> Response: frontend = FastAPI(openapi_url="") -frontend.mount("/", StaticFiles(directory=STATIC_PATH, html=True), "NoneBot WebUI") +if STATIC_PATH.exists(): + frontend.mount("/", StaticFiles(directory=STATIC_PATH, html=True), "NoneBot WebUI") api = FastAPI( @@ -79,6 +80,14 @@ async def startup_event(): if "WEBUI_BUILD" in os.environ: log.info("Running in docker.") + if CONFIG_FILE_PATH.exists(): + try: + Config.load(CONFIG_FILE_PATH) + except Exception: + log.warning("Config file is broken, using default values.") + elif "WEBUI_BUILD" not in os.environ: + log.warning("Config not found, using default values.") + log.info("Starting NoneBot CLI WebUI.") log.info(f"NoneBot CLI WebUI version: {get_version()}") if Config.debug: diff --git a/nb_cli_plugin_webui/app/auth/router.py b/nb_cli_plugin_webui/app/auth/router.py index d59a086..48f51d8 100644 --- a/nb_cli_plugin_webui/app/auth/router.py +++ b/nb_cli_plugin_webui/app/auth/router.py @@ -39,4 +39,4 @@ async def verify_token(data: VerifyRequest) -> GenericResponse[str]: parsed_data = dict(jwt_data) - return GenericResponse(detail=parsed_data["exp"]) + return GenericResponse(detail=str(parsed_data["exp"])) diff --git a/nb_cli_plugin_webui/app/config.py b/nb_cli_plugin_webui/app/config.py index d5355ad..b87d88c 100644 --- a/nb_cli_plugin_webui/app/config.py +++ b/nb_cli_plugin_webui/app/config.py @@ -4,20 +4,10 @@ from typing import Any from pathlib import Path -import click -from nb_cli.cli import CLI_DEFAULT_STYLE from pydantic import Field, BaseModel, SecretStr -from noneprompt import InputPrompt, ConfirmPrompt - -from nb_cli_plugin_webui.i18n import _ from .utils.security import salt from .utils.storage import get_config_file -from .utils.string_utils import ( - TokenComplexityError, - check_string_complexity, - generate_complexity_string, -) CONFIG_FILE = "config.json" CONFIG_FILE_PATH = get_config_file(CONFIG_FILE) @@ -42,21 +32,41 @@ def default(self, o: Any) -> Any: class AppConfig(BaseModel): base_dir: str = Field( - default_factory=lambda: ( - str(Path.cwd() / "/projects") if "WEBUI_BUILD" in os.environ else str() + default_factory=lambda: os.getenv( + "NB_WEBUI_BASE_DIR", + str(Path.cwd() / "/projects") if "WEBUI_BUILD" in os.environ else str(), ), description="基础目录,创建实例将由此开始", ) - host: str = Field(default="localhost", description="主机名") - port: str = Field(default="12345", description="端口号") - debug: int = Field(default=0, description="是否开启调试模式") - enable_api_document: bool = Field(default=False, description="是否开启 API 文档") + host: str = Field( + default_factory=lambda: os.getenv("NB_WEBUI_HOST", "localhost"), + description="主机名", + ) + port: str = Field( + default_factory=lambda: os.getenv("NB_WEBUI_PORT", "12345"), + description="端口号", + ) + debug: int = Field( + default_factory=lambda: int(os.getenv("NB_WEBUI_DEBUG", "0")), + description="是否开启调试模式", + ) + enable_api_document: bool = Field( + default_factory=lambda: os.getenv("NB_WEBUI_API_DOCUMENT", "0") == "1", + description="是否开启 API 文档", + ) - log_level: LogLevels = Field(default=LogLevels.INFO, description="日志等级") + log_level: LogLevels = Field( + default_factory=lambda: LogLevels(os.getenv("NB_WEBUI_LOG_LEVEL", "INFO")), + description="日志等级", + ) log_is_store: bool = Field(default=False, description="是否存储日志") - secret_key: SecretStr = Field(default=SecretStr(str()), description="验证密钥的密钥") - hashed_token: SecretStr = Field(default=SecretStr(str()), description="哈希后的 token") + secret_key: SecretStr = Field( + default=SecretStr(str()), description="验证密钥的密钥" + ) + hashed_token: SecretStr = Field( + default=SecretStr(str()), description="哈希后的 token" + ) salt: SecretStr = Field(default=SecretStr(str()), description="盐值") allowed_origins: list = Field( @@ -68,14 +78,21 @@ class AppConfig(BaseModel): default=5 * 60, description="进程单条日志销毁时间(秒)" ) - extension_store_visible_items: int = Field(default=12, description="扩展商店每页显示数量") + extension_store_visible_items: int = Field( + default=12, description="扩展商店每页显示数量" + ) @property def log_level_str(self) -> str: return self.log_level.value def to_json(self) -> str: - return json.dumps(self.dict(), cls=SpecialTypeJSONEncoder) + return json.dumps( + self.model_dump(mode="python"), + cls=SpecialTypeJSONEncoder, + indent=2, + ensure_ascii=False, + ) def reset_token(self, token: str) -> None: self.salt = SecretStr(salt.gen_salt()) @@ -85,134 +102,26 @@ def reset_token(self, token: str) -> None: def check_necessary_config(self) -> bool: return bool( - self.base_dir and self.secret_key and self.hashed_token and self.salt + self.base_dir + and self.secret_key.get_secret_value() + and self.hashed_token.get_secret_value() + and self.salt.get_secret_value() ) - def get_description(self, field_name: str) -> str: - return self.__fields__[field_name].field_info.description + def get_description(self, field_name: str) -> str | None: + if field_name not in AppConfig.model_fields: + return None + return AppConfig.model_fields[field_name].description class ConfigParser(AppConfig): def load(self, path: Path): - new_conf = self.parse_file(path) - self.__dict__.update(new_conf.__dict__) + new_conf = AppConfig.model_validate_json(path.read_text(encoding="utf-8")) + for name in self.model_fields: + setattr(self, name, getattr(new_conf, name)) def store(self, path: Path): path.write_text(self.to_json(), encoding="utf-8") Config = ConfigParser() - - -async def generate_config(): - click.secho(_("Welcome to use NB CLI WebUI."), fg="green") - click.secho("") - click.secho(_("[Token Setting]"), fg="green") - click.secho(_("Token is your key to access WebUI.")) - if await ConfirmPrompt(_("Do you want it generated?")).prompt_async( - style=CLI_DEFAULT_STYLE - ): - token = generate_complexity_string(use_digits=True, use_punctuation=True) - else: - token = await InputPrompt(_("Please enter token:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - while True: - try: - check_string_complexity(token) - break - except TokenComplexityError as err: - click.secho(str(err)) - - token = await InputPrompt(_("Please enter again:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - - token = token.replace('"', "'") - - click.secho(_("Your token is:")) - click.secho(f"\n{token}\n", fg="green") - click.secho(_("ATTENTION, TOKEN ONLY SHOW ONCE."), fg="red", bold=True) - - click.secho("") - click.secho(_("[Server Setting]"), fg="green") - host = "localhost" - port = "12345" - if await ConfirmPrompt( - _("Do you want to decide (host) and (port) by yourself?") - ).prompt_async(style=CLI_DEFAULT_STYLE): - host = await InputPrompt(_("Please enter host:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - port = await InputPrompt(_("Please enter port:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - while True: - try: - if int(port) < 1024 or int(port) > 49151: - raise ValueError - break - except ValueError: - click.secho( - _("Port must be between 1024 and 49151. (Recommend: > 10000)") - ) - port = await InputPrompt(_("Please enter port:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - - click.secho(_("Your webui url will be:")) - click.secho(f"http://{host}:{port}/", fg="green") - else: - click.secho(_("Your webui url will decide by nb-cli.")) - - click.secho("") - click.secho(_("[General Setting]"), fg="green") - click.secho(_("- Docker will ignore this and use current directory."), fg="yellow") - click.secho(_("- Base directory. Example:")) - click.secho((" * Linux: /home/(user)/")) - click.secho((" * MacOS: /Users/(user)/")) - click.secho((" * Windows: C:/Users/Public/Pictures")) - click.secho(_("- NoneBot will be stored here.")) - while True: - base_dir = await InputPrompt(_("Please enter base directory:")).prompt_async( - style=CLI_DEFAULT_STYLE - ) - path = Path(base_dir) - - if base_dir and path.is_absolute() and path.is_dir(): - break - - if not base_dir: - click.secho(_("Directory must not be empty.")) - if not path.exists(): - click.secho(_("Directory does not exist.")) - if not path.is_absolute(): - click.secho(_("Path must be absolute.")) - if not path.is_dir(): - click.secho(_("Path must be folder.")) - - click.secho("") - click.secho(_("[Setting Overview]"), fg="green") - click.secho(_("Token: {token}").format(token=token)) - click.secho(_("WebUI URL: http://{host}:{port}/").format(host=host, port=port)) - click.secho(_("Base directory: {base_dir}").format(base_dir=base_dir)) - if not await ConfirmPrompt(_("Are you sure?")).prompt_async( - style=CLI_DEFAULT_STYLE - ): - click.secho(_("Cleaning...")) - return - - _salt = salt.gen_salt() - hashed_token = salt.get_token_hash(_salt + token) - - user_config = AppConfig( - base_dir=base_dir, - host=host, - port=port, - secret_key=SecretStr( - generate_complexity_string(32, use_digits=True, use_punctuation=True) - ), - salt=SecretStr(_salt), - hashed_token=SecretStr(hashed_token), - ) - CONFIG_FILE_PATH.write_text(user_config.to_json(), encoding="utf-8") diff --git a/nb_cli_plugin_webui/app/handlers/nonebot.py b/nb_cli_plugin_webui/app/handlers/nonebot.py index 530adf8..a671d18 100644 --- a/nb_cli_plugin_webui/app/handlers/nonebot.py +++ b/nb_cli_plugin_webui/app/handlers/nonebot.py @@ -1,7 +1,7 @@ import re import json from pathlib import Path -from typing import List, Optional +from typing import Dict, List, Optional from nb_cli.handlers import get_default_python @@ -15,6 +15,16 @@ def _findall(pattern, string) -> str: return matches[0] if matches else str() +def _parse_json_from_output(pattern: str, raw_content: str, context: str = ""): + matched = _findall(pattern, raw_content) + if not matched: + raise RuntimeError( + f"Failed to parse output{f' for {context}' if context else ''}. " + f"Script output: {raw_content[:200]!r}" + ) + return json.loads(matched) + + async def get_nonebot_loaded_plugins( config_file: Path, python_path: Optional[str] = None ) -> List[str]: @@ -27,7 +37,8 @@ async def get_nonebot_loaded_plugins( python_path, await t.render_async(toml_path=config_file), cwd ) - return _findall(r"nonebot_plugins:\s*(.*)", raw_content).split(",") + matched = _findall(r"nonebot_plugins:\s*(.*)", raw_content) + return matched.split(",") if matched else [] async def get_nonebot_loaded_config( @@ -39,7 +50,9 @@ async def get_nonebot_loaded_config( t = templates.get_template("scripts/nonebot/get_nonebot_loaded_config.py.jinja") raw_content = await run_python_script(python_path, await t.render_async(), cwd) - return json.loads(_findall(r"nonebot_loaded_config:\s*(.*)", raw_content)) + return _parse_json_from_output( + r"nonebot_loaded_config:\s*(.*)", raw_content, "loaded config" + ) async def get_nonebot_self_config_schema( @@ -53,7 +66,9 @@ async def get_nonebot_self_config_schema( ) raw_content = await run_python_script(python_path, await t.render_async(), cwd) - return json.loads(_findall(r"nonebot_self_config_schema:\s*(.*)", raw_content)) + return _parse_json_from_output( + r"nonebot_self_config_schema:\s*(.*)", raw_content, "self config schema" + ) async def get_nonebot_plugin_config_schema( @@ -69,12 +84,16 @@ async def get_nonebot_plugin_config_schema( python_path, await t.render_async(plugin=plugin), cwd ) - return json.loads(_findall(r"nonebot_plugin_config_schema:\s*(.*)", raw_content)) + return _parse_json_from_output( + r"nonebot_plugin_config_schema:\s*(.*)", + raw_content, + f"plugin config schema: {plugin}", + ) async def get_nonebot_plugin_metadata( plugin: str, cwd: Optional[Path] = None, python_path: Optional[str] = None -): +) -> Optional[Dict]: if python_path is None: python_path = await get_default_python() @@ -83,4 +102,6 @@ async def get_nonebot_plugin_metadata( python_path, await t.render_async(plugin=plugin), cwd ) - return json.loads(_findall(r"nonebot_plugin_metadata:\s*(.*)", raw_content)) + return _parse_json_from_output( + r"nonebot_plugin_metadata:\s*(.*)", raw_content, f"plugin metadata: {plugin}" + ) diff --git a/nb_cli_plugin_webui/app/handlers/process/schemas.py b/nb_cli_plugin_webui/app/handlers/process/schemas.py index 7645e8e..1d6ef5c 100644 --- a/nb_cli_plugin_webui/app/handlers/process/schemas.py +++ b/nb_cli_plugin_webui/app/handlers/process/schemas.py @@ -34,7 +34,7 @@ class ProcessPerformance(BaseModel): class ProcessInfo(BaseModel): - status_code: Optional[int] + status_code: Optional[int] = None total_log: int is_running: bool - performance: Optional[ProcessPerformance] + performance: Optional[ProcessPerformance] = None diff --git a/nb_cli_plugin_webui/app/handlers/process/utils.py b/nb_cli_plugin_webui/app/handlers/process/utils.py index a943fd5..ef8d088 100644 --- a/nb_cli_plugin_webui/app/handlers/process/utils.py +++ b/nb_cli_plugin_webui/app/handlers/process/utils.py @@ -9,27 +9,32 @@ class ProcessFuncWithLog: def __init__(self, log: LogStorage) -> None: self.log = log - self.queue: List[ - Tuple[Callable[..., Any], Tuple[Any, ...], Dict[str, Any]] - ] = list() + self.queue: List[Tuple[Callable[..., Any], Tuple[Any, ...], Dict[str, Any]]] = ( + list() + ) async def _err_parse( self, err: Exception, additional_err_msg: Optional[str] = None ) -> None: - log_model = CustomLog(message=str(err)) - await self.log.add_log(log_model) + tb = traceback.extract_tb(err.__traceback__) + # 只保留项目代码的帧,过滤 asyncio/starlette 等内部帧 + project_frames = [f for f in tb if "nb_cli_plugin_webui" in f.filename] + frames = project_frames if project_frames else tb[-3:] - traceback_info = traceback.format_exc() - log_model = CustomLog(message=traceback_info) - await self.log.add_log(log_model) + lines = ["Traceback (most recent call last):"] + for frame in frames: + lines.append( + f' File "{frame.filename}", line {frame.lineno}, in {frame.name}' + ) + if frame.line: + lines.append(f" {frame.line}") + lines.append(f"{type(err).__name__}: {err}") + await self.log.add_log(CustomLog(message="\n".join(lines))) if additional_err_msg: - log_model = CustomLog(message=additional_err_msg) - await self.log.add_log(log_model) - - log_model = CustomLog(message="❌ Failed!") - await self.log.add_log(log_model) + await self.log.add_log(CustomLog(message=additional_err_msg)) + await self.log.add_log(CustomLog(message="❌ Failed!")) self.queue.clear() def add( @@ -45,7 +50,7 @@ async def _done(self, additional_err_msg: Optional[str]) -> None: for func, args, kwargs in self.queue: try: hints = get_type_hints(func) - if hints.get("return") == bool: + if hints.get("return") is bool: if asyncio.iscoroutinefunction(func): _ = await func(*args, **kwargs) else: diff --git a/nb_cli_plugin_webui/app/handlers/project.py b/nb_cli_plugin_webui/app/handlers/project.py index e6d74d8..af4e30d 100644 --- a/nb_cli_plugin_webui/app/handlers/project.py +++ b/nb_cli_plugin_webui/app/handlers/project.py @@ -5,10 +5,10 @@ from nb_cli.config import ConfigManager from dotenv import set_key, dotenv_values from tomlkit.toml_document import TOMLDocument -from pydantic import BaseModel, ValidationError from nb_cli.exceptions import ProjectNotFoundError from nb_cli.config import SimpleInfo as CliSimpleInfo from nb_cli.config.parser import CONFIG_FILE_ENCODING +from pydantic import BaseModel, RootModel, ValidationError from nb_cli_plugin_webui.app.handlers import get_pkg_version from nb_cli_plugin_webui.app.utils.storage import get_data_file @@ -26,8 +26,8 @@ PROJECT_DATA_ENCODING = "utf-8" -class NoneBotProjectList(BaseModel): - __root__: Dict[str, NoneBotProjectMeta] +class NoneBotProjectList(RootModel): + root: Dict[str, NoneBotProjectMeta] class NoneBotProjectManager: @@ -51,7 +51,9 @@ def __init__(self, *, project_id: str) -> None: @classmethod def _load(cls) -> NoneBotProjectList: try: - return NoneBotProjectList.parse_file(PROJECT_DATA_PATH, encoding="utf-8") + return NoneBotProjectList.model_validate_json( + PROJECT_DATA_PATH.read_text(PROJECT_DATA_ENCODING) + ) except FileNotFoundError as err: raise err except ValidationError as err: @@ -59,21 +61,35 @@ def _load(cls) -> NoneBotProjectList: @classmethod def get_project(cls) -> Dict[str, NoneBotProjectMeta]: - return cls._load().__root__ + return cls._load().root + + @classmethod + def get_project_by_dir(cls, project_dir: str) -> NoneBotProjectMeta | None: + try: + projects = cls.get_project() + except (FileNotFoundError, ValidationError): + return None + target = str(Path(project_dir).absolute()) + for project in projects.values(): + if str(Path(project.project_dir).absolute()) == target: + return project + return None def store(self, data: NoneBotProjectMeta) -> None: if not PROJECT_DATA_PATH.exists(): - file = NoneBotProjectList(__root__={self.project_id: data}) + file = NoneBotProjectList(root={self.project_id: data}) else: file = self._load() - file.__root__[self.project_id] = data + file.root[self.project_id] = data - PROJECT_DATA_PATH.write_text(file.json(), encoding="utf-8") + PROJECT_DATA_PATH.write_text( + file.model_dump_json(), encoding=PROJECT_DATA_ENCODING + ) def read(self) -> NoneBotProjectMeta: try: load = self._load() - data = load.__root__ + data = load.root except FileNotFoundError: raise FileNotFoundError(f"{PROJECT_DATA_FILE} Not found") info = data.get(self.project_id) @@ -124,8 +140,10 @@ async def add_project( def remove_project(self) -> None: data = self._load() - data.__root__.pop(self.project_id) - PROJECT_DATA_PATH.write_text(data.json(), encoding="utf-8") + data.root.pop(self.project_id) + PROJECT_DATA_PATH.write_text( + data.model_dump_json(), encoding=PROJECT_DATA_ENCODING + ) def modify_meta(self, k: str, v: Any) -> None: data = self.read() @@ -166,6 +184,8 @@ async def update_plugin_config(self) -> None: plugin_metadata = await get_nonebot_plugin_metadata( plugin, cwd, self.config_manager.python_path ) + if plugin_metadata is None: + continue plugin_config_schema = await get_nonebot_plugin_config_schema( plugin, cwd, self.config_manager.python_path ) @@ -176,7 +196,7 @@ async def update_plugin_config(self) -> None: pkg_version = await get_pkg_version(plugin, self.config_manager.python_path) plugin_metadata["version"] = pkg_version - metadata = Plugin.parse_obj(plugin_metadata) + metadata = Plugin.model_validate(plugin_metadata) if metadata.module_name == "unknown": metadata.module_name = plugin diff --git a/nb_cli_plugin_webui/app/handlers/store.py b/nb_cli_plugin_webui/app/handlers/store.py index 622a904..3a423d3 100644 --- a/nb_cli_plugin_webui/app/handlers/store.py +++ b/nb_cli_plugin_webui/app/handlers/store.py @@ -32,25 +32,21 @@ @overload async def load_module_data( module_type: Literal[ModuleType.PLUGIN], - ) -> List[Plugin]: - ... + ) -> List[Plugin]: ... @overload async def load_module_data( module_type: Literal[ModuleType.ADAPTER], - ) -> List[Adapter]: - ... + ) -> List[Adapter]: ... @overload async def load_module_data( module_type: Literal[ModuleType.DRIVER], - ) -> List[Driver]: - ... + ) -> List[Driver]: ... async def load_module_data( module_type: ModuleType, - ) -> Union[List[Plugin], List[Adapter], List[Driver]]: - ... + ) -> Union[List[Plugin], List[Adapter], List[Driver]]: ... else: @@ -69,7 +65,7 @@ async def load_module_data( _("Invalid module type: {module_type}").format(module_type=module_type) ) - module_name: str = getattr(module_class.__config__, "module_name") + module_name: str = module_class._registry_name exceptions: List[Exception] = list() urls = [ f"https://registry.nonebot.dev/{module_name}.json", @@ -91,7 +87,7 @@ async def _request(url: str) -> httpx.Response: try: resp = await future items = resp.json() - result = [module_class.parse_obj(item) for item in items] + result = [module_class.model_validate(item) for item in items] for task in tasks: if not task.done(): task.cancel() diff --git a/nb_cli_plugin_webui/app/models/base.py b/nb_cli_plugin_webui/app/models/base.py index 59f1a1d..bd3443c 100644 --- a/nb_cli_plugin_webui/app/models/base.py +++ b/nb_cli_plugin_webui/app/models/base.py @@ -1,6 +1,7 @@ -from typing import Any, Dict, List, Generic, TypeVar, Optional +from typing import Any, Dict, List, Generic, TypeVar, ClassVar, Optional -from pydantic import Field, BaseModel, validator +from pydantic import Field, BaseModel +from pydantic.functional_validators import field_validator class ModuleTag(BaseModel): @@ -21,45 +22,30 @@ class ModuleInfo(BaseModel): extra: Dict[Any, Any] = Field(default_factory=dict) # noneflow:PublishInfo 类型, 为通用移至此处 - tags: Optional[List[ModuleTag]] + tags: Optional[List[ModuleTag]] = None is_official: bool = False version: str = "0.0.0" # WebUI 拓展类型 is_download: bool = False - @validator("project_link", pre=True, always=True) - def set_project_link_default(cls, v): - return v if v is not None else "unknown" - - @validator("author", pre=True, always=True) - def set_author_default(cls, v): - return v if v is not None else "unknown" - - @validator("homepage", pre=True, always=True) - def set_homepage_default(cls, v): + @field_validator("project_link", "author", "homepage", mode="before") + @classmethod + def set_default_if_none(cls, v): return v if v is not None else "unknown" class Plugin(ModuleInfo): config: dict = dict() - - class Config: - module_name = "plugins" + _registry_name: ClassVar[str] = "plugins" class Adapter(ModuleInfo): - pass - - class Config: - module_name = "adapters" + _registry_name: ClassVar[str] = "adapters" class Driver(ModuleInfo): - pass - - class Config: - module_name = "drivers" + _registry_name: ClassVar[str] = "drivers" _T = TypeVar("_T", bound=Plugin) diff --git a/nb_cli_plugin_webui/app/models/store.py b/nb_cli_plugin_webui/app/models/store.py index 2947b9c..f484fb2 100644 --- a/nb_cli_plugin_webui/app/models/store.py +++ b/nb_cli_plugin_webui/app/models/store.py @@ -26,8 +26,8 @@ class Plugin(BasePlugin): - https://github.com/nonebot/noneflow/blob/main/src/utils/store_test/models.py#L14 """ - type: Optional[PluginType] - supported_adapters: Optional[list[str]] + type: Optional[PluginType] = None + supported_adapters: Optional[list[str]] = None valid: bool time: str version: str diff --git a/nb_cli_plugin_webui/app/process/router.py b/nb_cli_plugin_webui/app/process/router.py index b80ee43..f7e916f 100644 --- a/nb_cli_plugin_webui/app/process/router.py +++ b/nb_cli_plugin_webui/app/process/router.py @@ -1,3 +1,4 @@ +import asyncio from typing import Dict, List, Callable, Optional, Awaitable from fastapi.websockets import WebSocketState @@ -39,7 +40,7 @@ async def run_process( if not project_meta.drivers: raise DriverNotFound() - await run_nonebot_project(project) + asyncio.create_task(run_nonebot_project(project)) return GenericResponse(detail="success") @@ -100,7 +101,7 @@ def unregister_listener(log_storage: LogStorage[ProcessLog]): log_listeners.pop(websocket) async def log_listener(log: ProcessLog): - await websocket.send_text(log.json()) + await websocket.send_text(log.model_dump_json()) async def receive_listener(recv: dict): nonlocal log_storage diff --git a/nb_cli_plugin_webui/app/project/config/schemas.py b/nb_cli_plugin_webui/app/project/config/schemas.py index 1934af1..fe480a7 100644 --- a/nb_cli_plugin_webui/app/project/config/schemas.py +++ b/nb_cli_plugin_webui/app/project/config/schemas.py @@ -17,21 +17,21 @@ class ConfigType(str, Enum): class ModuleConfigSimpleInfo(BaseModel): title: str - description: Optional[str] + description: Optional[str] = None name: str class Item(BaseModel): - enum: Optional[List[Any]] + enum: Optional[List[Any]] = None type: str class ModuleConfigChild(ModuleConfigSimpleInfo): default: Any conf_type: str - enum: Optional[List[Any]] + enum: Optional[List[Any]] = None configured: Any - items: Optional[Item] + items: Optional[Item] = None unique_items: bool is_secret: bool latest_change: str = ".env" diff --git a/nb_cli_plugin_webui/app/project/constants.py b/nb_cli_plugin_webui/app/project/constants.py index 938f246..2eb5bc8 100644 --- a/nb_cli_plugin_webui/app/project/constants.py +++ b/nb_cli_plugin_webui/app/project/constants.py @@ -4,3 +4,4 @@ class ErrorCode: PROJECT_DELETE_FAILED = "NoneBot 实例删除失败" PROJECT_WRITE_PROFILE_FAILED = "NoneBot 实例信息写入失败" PROJECT_TOML_NOT_FOUND = "实例 pyproject.toml 文件不存在" + PROJECT_DIR_ALREADY_EXISTS = "该目录已被其他实例占用" diff --git a/nb_cli_plugin_webui/app/project/exceptions.py b/nb_cli_plugin_webui/app/project/exceptions.py index 90fa0ab..6ff7f2b 100644 --- a/nb_cli_plugin_webui/app/project/exceptions.py +++ b/nb_cli_plugin_webui/app/project/exceptions.py @@ -19,5 +19,9 @@ class WriteNoneBotProjectProfileFailed(BadRequest): detail = ErrorCode.PROJECT_WRITE_PROFILE_FAILED +class ProjectDirAlreadyExists(BadRequest): + detail = ErrorCode.PROJECT_DIR_ALREADY_EXISTS + + class ProjectTomlNotFound(BadRequest): detail = ErrorCode.PROJECT_TOML_NOT_FOUND diff --git a/nb_cli_plugin_webui/app/project/schemas.py b/nb_cli_plugin_webui/app/project/schemas.py index d962346..90d7e4b 100644 --- a/nb_cli_plugin_webui/app/project/schemas.py +++ b/nb_cli_plugin_webui/app/project/schemas.py @@ -29,6 +29,7 @@ class AddProjectData(BaseModel): project_dir: str mirror_url: str adapters: List[str] = list() + drivers: List[str] = list() plugins: List[str] = list() plugin_dirs: List[str] = list() builtin_plugins: List[str] = list() diff --git a/nb_cli_plugin_webui/app/project/service.py b/nb_cli_plugin_webui/app/project/service.py index bb2253f..d64ab9c 100644 --- a/nb_cli_plugin_webui/app/project/service.py +++ b/nb_cli_plugin_webui/app/project/service.py @@ -4,6 +4,7 @@ from typing import Dict, List from nb_cli.config import ConfigManager +from packaging.requirements import Requirement from nb_cli.cli.commands.project import ProjectContext from nb_cli.handlers import create_project, create_virtualenv @@ -21,27 +22,67 @@ ProcessFuncWithLog, ) -from .exceptions import ProjectDirIsNotDir from .schemas import AddProjectData, CreateProjectData +from .exceptions import ProjectDirIsNotDir, ProjectDirAlreadyExists def create_nonebot_project(data: CreateProjectData) -> str: project_name = data.project_name.replace(" ", "-") base_project_dir = Config.base_dir / Path(data.project_dir) project_dir = base_project_dir / project_name + + if NoneBotProjectManager.get_project_by_dir(str(project_dir)): + raise ProjectDirAlreadyExists() + drivers = [driver.project_link for driver in data.drivers] adapters = [adapter.project_link for adapter in data.adapters] + # Build driver_package like "nonebot2[fastapi]>=2.5.0" + if data.drivers: + extras = ",".join( + x + for d in data.drivers + for x in ( + d.project_link.split("[")[1].rstrip("]").split(",") + if "[" in d.project_link + else [] + ) + ) + driver_package = ( + f"nonebot2[{extras}]>={data.drivers[0].version}" + if extras + else f"nonebot2>={data.drivers[0].version}" + ) + else: + driver_package = "nonebot2" + context = ProjectContext() context.variables["project_name"] = project_name + context.variables["inplace"] = False + context.variables["environment"] = {} + context.variables["driver_package"] = f'"{driver_package}"' + context.variables["devtools"] = ["pyright", "ruff"] + # drivers: {project_link: driver_dict} - 单个对象 context.variables["drivers"] = json.dumps( - {driver.project_link: driver.dict() for driver in data.drivers} + {driver.project_link: driver.model_dump() for driver in data.drivers} ) - context.packages.extend(drivers) - context.variables["adapters"] = json.dumps( - {adapter.project_link: adapter.dict() for adapter in data.adapters} + context.packages.extend( + [ + Requirement(f"{driver.project_link}>={driver.version}") + for driver in data.drivers + ] + ) + # adapters: {project_link: [adapter_dict, ...]} - 列表 + _adapters: dict[str, list] = {} + for adapter in data.adapters: + _adapters.setdefault(adapter.project_link, []).append(adapter.model_dump()) + context.variables["adapters"] = json.dumps(_adapters) + context.packages.extend( + [ + Requirement(f"{adapter.project_link}>={adapter.version}") + for adapter in data.adapters + ] ) - context.packages.extend(adapters) plugin_dirs = list() if not data.is_bootstrap: @@ -90,7 +131,7 @@ def create_nonebot_project(data: CreateProjectData) -> str: async def install_dependencies(): proc, _ = await call_pip_install( - ["nonebot2", *context.packages], + ["nonebot2", *[str(p) for p in context.packages]], ["-i", data.mirror_url], python_path=config_manager.python_path, log_storage=log, @@ -103,10 +144,10 @@ async def install_dependencies(): async def add_project_info(): _adapters: List[ModuleInfo] = [ - ModuleInfo.parse_obj(adapter.dict()) for adapter in data.adapters + ModuleInfo.model_validate(adapter.model_dump()) for adapter in data.adapters ] _drivers: List[ModuleInfo] = [ - ModuleInfo.parse_obj(driver.dict()) for driver in data.drivers + ModuleInfo.model_validate(driver.model_dump()) for driver in data.drivers ] project_id = generate_complexity_string(6) @@ -138,8 +179,12 @@ async def add_nonebot_project(data: AddProjectData) -> str: if not project_dir.is_dir(): raise ProjectDirIsNotDir() + if NoneBotProjectManager.get_project_by_dir(str(project_dir)): + raise ProjectDirAlreadyExists() + store_plugin_data = get_store_items(ModuleType.PLUGIN, is_search=False) store_adapter_data = get_store_items(ModuleType.ADAPTER, is_search=False) + store_driver_data = get_store_items(ModuleType.DRIVER, is_search=False) installed_plugins = list() for plugin in store_plugin_data: @@ -151,12 +196,57 @@ async def add_nonebot_project(data: AddProjectData) -> str: if adapter.module_name in data.adapters: installed_adapters.append(adapter) + installed_drivers = list() + for driver in store_driver_data: + if driver.module_name in data.drivers: + installed_drivers.append(driver) + + # Build driver_package like "nonebot2[fastapi]>=2.5.0" + if installed_drivers: + extras = ",".join( + x + for d in installed_drivers + for x in ( + d.project_link.split("[")[1].rstrip("]").split(",") + if "[" in d.project_link + else [] + ) + ) + driver_package = ( + f"nonebot2[{extras}]>={installed_drivers[0].version}" + if extras + else f"nonebot2>={installed_drivers[0].version}" + ) + else: + driver_package = "nonebot2" + context = ProjectContext() context.variables["project_name"] = project_name - context.variables["adapters"] = json.dumps( - {adapter.project_link: adapter.dict() for adapter in installed_adapters} + context.variables["inplace"] = False + context.variables["environment"] = {} + context.variables["driver_package"] = f'"{driver_package}"' + context.variables["devtools"] = ["pyright", "ruff"] + # drivers: {project_link: driver_dict} - 单个对象 + context.variables["drivers"] = json.dumps( + {driver.project_link: driver.model_dump() for driver in installed_drivers} + ) + context.packages.extend( + [ + Requirement(f"{driver.project_link}>={driver.version}") + for driver in installed_drivers + ] + ) + # adapters: {project_link: [adapter_dict, ...]} - 列表 + _adapters: dict[str, list] = {} + for adapter in installed_adapters: + _adapters.setdefault(adapter.project_link, []).append(adapter.model_dump()) + context.variables["adapters"] = json.dumps(_adapters) + context.packages.extend( + [ + Requirement(f"{adapter.project_link}>={adapter.version}") + for adapter in installed_adapters + ] ) - context.packages.extend([adapter.project_link for adapter in installed_adapters]) config_manager = ConfigManager(working_dir=project_dir, use_venv=True) @@ -172,12 +262,20 @@ async def add_nonebot_project(data: AddProjectData) -> str: process.add(log.add_log, CustomLog(message=f"Project dir: {project_dir}")) process.add(log.add_log, CustomLog(message=f"Mirror url: {data.mirror_url}")) process.add( - log.add_log, CustomLog(message=f"Project plugins: {', '.join(data.plugins)}") + log.add_log, + CustomLog( + message=f"Project drivers: {', '.join(d.module_name for d in installed_drivers)}" + ), ) process.add( - log.add_log, CustomLog(message=f"Project adapters: {', '.join(data.adapters)}") + log.add_log, + CustomLog( + message=f"Project adapters: {', '.join(a.module_name for a in installed_adapters)}" + ), + ) + process.add( + log.add_log, CustomLog(message=f"Project plugins: {', '.join(data.plugins)}") ) - process.add(log.add_log, CustomLog(message=str())) venv_path = project_dir / ".venv" if not venv_path.is_dir(): @@ -198,7 +296,7 @@ async def add_nonebot_project(data: AddProjectData) -> str: async def install_dependencies(): proc, _ = await call_pip_install( - ["nonebot2", *context.packages], + ["nonebot2", *[str(p) for p in context.packages]], ["-i", data.mirror_url], python_path=config_manager.python_path, log_storage=log, @@ -209,23 +307,36 @@ async def install_dependencies(): process.add(install_dependencies) process.add(log.add_log, CustomLog(message="Finished install.")) - project_id = generate_complexity_string(6) - manager = NoneBotProjectManager(project_id=project_id) - await manager.add_project( - project_name=project_name, - project_dir=project_dir, - mirror_url=data.mirror_url, - adapters=installed_adapters, - plugins=installed_plugins, - ) - manager.read() - for plugin in installed_plugins: - await manager.add_plugin(plugin) + async def add_project_info(): + _adapters: List[ModuleInfo] = [ + ModuleInfo.model_validate(adapter.model_dump()) + for adapter in installed_adapters + ] + _drivers: List[ModuleInfo] = [ + ModuleInfo.model_validate(driver.model_dump()) + for driver in installed_drivers + ] - env_path = project_dir / ".env" - if not env_path.exists() or not env_path.is_file(): - manager.write_to_env(".env", "ENVIRONMENT", "prod") + project_id = generate_complexity_string(6) + manager = NoneBotProjectManager(project_id=project_id) + await manager.add_project( + project_name=project_name, + project_dir=project_dir, + mirror_url=data.mirror_url, + adapters=_adapters, + drivers=_drivers, + plugins=installed_plugins, + plugin_dirs=data.plugin_dirs, + builtin_plugins=data.builtin_plugins, + ) + + env_path = project_dir / ".env" + if not env_path.exists() or not env_path.is_file(): + manager.write_to_env(".env", "ENVIRONMENT", "prod") + return True + + process.add(add_project_info) process.add(log.add_log, CustomLog(message="✨ Done!")) process.done() diff --git a/nb_cli_plugin_webui/app/schemas.py b/nb_cli_plugin_webui/app/schemas.py index ca0afd0..8af5e86 100644 --- a/nb_cli_plugin_webui/app/schemas.py +++ b/nb_cli_plugin_webui/app/schemas.py @@ -1,9 +1,9 @@ from typing import Generic, TypeVar -from pydantic.generics import GenericModel +from pydantic import BaseModel _T = TypeVar("_T") -class GenericResponse(GenericModel, Generic[_T]): +class GenericResponse(BaseModel, Generic[_T]): detail: _T diff --git a/nb_cli_plugin_webui/app/status/router.py b/nb_cli_plugin_webui/app/status/router.py index 65351bc..cbaec1d 100644 --- a/nb_cli_plugin_webui/app/status/router.py +++ b/nb_cli_plugin_webui/app/status/router.py @@ -72,5 +72,5 @@ async def send_status_info(websocket: WebSocket, process: Optional[Processor]) - net=utils.get_net_info(), ), process=process.get_status() if process else None, - ).dict() + ).model_dump() ) diff --git a/nb_cli_plugin_webui/app/status/schemas.py b/nb_cli_plugin_webui/app/status/schemas.py index 5a377c8..f91c9f6 100644 --- a/nb_cli_plugin_webui/app/status/schemas.py +++ b/nb_cli_plugin_webui/app/status/schemas.py @@ -53,4 +53,4 @@ class SystemInfo(BaseModel): class StatusInfo(BaseModel): system: SystemInfo - process: Optional[ProcessInfo] + process: Optional[ProcessInfo] = None diff --git a/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_loaded_plugins.py.jinja b/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_loaded_plugins.py.jinja index 0ecafac..31bf552 100644 --- a/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_loaded_plugins.py.jinja +++ b/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_loaded_plugins.py.jinja @@ -14,3 +14,5 @@ def get_loaded_plugins(toml_path: str): plugins = get_loaded_plugins("{{ toml_path }}") if plugins: print(f"nonebot_plugins:{','.join([plugin.module_name for plugin in plugins])}") +else: + print("nonebot_plugins:") diff --git a/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_plugin_metadata.py.jinja b/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_plugin_metadata.py.jinja index 897e616..73a045c 100644 --- a/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_plugin_metadata.py.jinja +++ b/nb_cli_plugin_webui/app/template/scripts/nonebot/get_nonebot_plugin_metadata.py.jinja @@ -8,3 +8,5 @@ if metadata: data = asdict(metadata) data["config"] = dict() print(f"nonebot_plugin_metadata:{json.dumps(data)}") +else: + print("nonebot_plugin_metadata:null") diff --git a/nb_cli_plugin_webui/app/utils/security/jwt.py b/nb_cli_plugin_webui/app/utils/security/jwt.py index eec749f..e3a0434 100644 --- a/nb_cli_plugin_webui/app/utils/security/jwt.py +++ b/nb_cli_plugin_webui/app/utils/security/jwt.py @@ -16,7 +16,7 @@ def create_jwt( ) -> str: to_encode = payload.copy() expire = datetime.utcnow() + expire_seconds - to_encode.update(JWTMeta(exp=expire, sub=JWT_SUBJECT).dict()) + to_encode.update(JWTMeta(exp=expire, sub=JWT_SUBJECT).model_dump()) return jwt.encode(to_encode, secret_key, algorithm=ALGORITHM) diff --git a/nb_cli_plugin_webui/app/utils/string_utils.py b/nb_cli_plugin_webui/app/utils/string_utils.py index 0e0aac4..6426364 100644 --- a/nb_cli_plugin_webui/app/utils/string_utils.py +++ b/nb_cli_plugin_webui/app/utils/string_utils.py @@ -17,7 +17,7 @@ def generate_complexity_string( length: int = random.randint(12, 18), *, use_digits: bool = False, - use_punctuation: bool = False + use_punctuation: bool = False, ) -> str: return str().join( random.choices( diff --git a/nb_cli_plugin_webui/cli/__init__.py b/nb_cli_plugin_webui/cli/__init__.py index 6b48f25..7019299 100644 --- a/nb_cli_plugin_webui/cli/__init__.py +++ b/nb_cli_plugin_webui/cli/__init__.py @@ -1,55 +1,83 @@ import os +import sys +import shutil +import subprocess import webbrowser +from pathlib import Path from typing import List, cast import click -from pydantic import ValidationError from nb_cli.i18n import _ as nb_cli_i18n +from pydantic import SecretStr, ValidationError from noneprompt import Choice, ListPrompt, ConfirmPrompt, CancelledError from nb_cli.cli import CLI_DEFAULT_STYLE, ClickAliasedGroup, run_sync, run_async from nb_cli_plugin_webui.i18n import _ +from nb_cli_plugin_webui.app.utils.security import salt from nb_cli_plugin_webui.app.application import STATIC_PATH from nb_cli_plugin_webui.app.handlers.project import PROJECT_DATA_PATH -from nb_cli_plugin_webui.app.config import CONFIG_FILE_PATH, Config, generate_config +from nb_cli_plugin_webui.app.config import CONFIG_FILE_PATH, Config, AppConfig +from nb_cli_plugin_webui.app.utils.string_utils import generate_complexity_string from .token import token from .config import config from .docker import docker +async def _ensure_config(): + if CONFIG_FILE_PATH.exists(): + try: + Config.load(CONFIG_FILE_PATH) + except ValidationError: + click.secho(_("Config file is broken, run `nb ui clear` to fix."), fg="red") + raise + return + + _salt = salt.gen_salt() + _token = generate_complexity_string(use_digits=True, use_punctuation=True) + default_config = AppConfig( + secret_key=SecretStr( + generate_complexity_string(32, use_digits=True, use_punctuation=True) + ), + salt=SecretStr(_salt), + hashed_token=SecretStr(salt.get_token_hash(_salt + _token)), + ) + CONFIG_FILE_PATH.parent.mkdir(parents=True, exist_ok=True) + CONFIG_FILE_PATH.write_text(default_config.to_json(), encoding="utf-8") + Config.load(CONFIG_FILE_PATH) + click.secho(_("Generated default config."), fg="green") + click.secho(_("Access token: {token}").format(token=_token), fg="green") + + +def _check_dev_environment(): + """检查是否在真实可开发环境""" + if not Path("pyproject.toml").exists(): + click.secho( + _( + "Not in a project root directory. " + "Please run this command in a NoneBot project directory." + ), + fg="red", + ) + sys.exit(1) + + @click.group( cls=ClickAliasedGroup, invoke_without_command=True, help=_("Start up NB CLI UI.") ) @click.pass_context @run_async async def webui(ctx: click.Context): + if ctx.invoked_subcommand is not None: + return + if not STATIC_PATH.exists(): click.secho( _("WebUI dist directory not found, please reinstall to fix."), fg="red" ) return - if not CONFIG_FILE_PATH.exists(): - if "WEBUI_BUILD" in os.environ: - click.secho( - _("Config not found in docker, run `nb ui docker` to fix."), - fg="yellow", - ) - return - - if not Config.check_necessary_config(): - await generate_config() - return - else: - try: - Config.load(CONFIG_FILE_PATH) - except ValidationError: - click.secho(_("Config file is broken, run `nb ui clear` to fix."), fg="red") - return - - if ctx.invoked_subcommand is not None: - return + await _ensure_config() command = cast(ClickAliasedGroup, ctx.command) @@ -96,24 +124,96 @@ async def webui(ctx: click.Context): ) @run_async async def run(host: str, port: int): + if not STATIC_PATH.exists(): + click.secho( + _("WebUI dist directory not found, please reinstall to fix."), fg="red" + ) + return + + await _ensure_config() + from nb_cli_plugin_webui import server - if not host: - host = Config.host - if not port: - port = int(Config.port) - else: - if port < 1024 or port > 49151: - click.secho( - _("Port must be between 1024 and 49151. (Recommend: > 10000)"), fg="red" - ) - return + # CLI 参数覆盖配置文件 + if host is not None: + Config.host = host + if port is not None: + Config.port = str(port) + + _host = Config.host + _port = int(Config.port) try: - webbrowser.open(f"http://{host}:{port}/") + webbrowser.open(f"http://{_host}:{_port}/") except webbrowser.Error: pass - await server.run_server(host, port) + await server.run_server(_host, _port) + + +@webui.command(help=_("Run frontend dev server with backend.")) +@click.option( + "-h", + "--host", + type=str, + show_default=True, + help=_("The host required to access NB CLI UI."), + default=None, +) +@click.option( + "-p", + "--port", + type=int, + show_default=True, + help=_("The port required to access NB CLI UI."), + default=None, +) +@run_async +async def dev(host: str, port: int): + _check_dev_environment() + await _ensure_config() + + Config.debug = 1 + Config.enable_api_document = True + + # CLI 参数覆盖配置文件 + if host is not None: + Config.host = host + if port is not None: + Config.port = str(port) + + frontend_path = Path(__file__).parent.parent.parent / "frontend" + if not frontend_path.exists(): + click.secho(_("Frontend directory not found."), fg="red") + return + + click.secho(_("Starting frontend dev server..."), fg="green") + pnpm_path = shutil.which("pnpm") + if not pnpm_path: + click.secho( + _("pnpm not found. Please install it: npm install -- pnpm"), + fg="red", + ) + return + + # 将后端配置传递给前端开发服务器 + frontend_env = os.environ.copy() + frontend_env["NB_WEBUI_HOST"] = Config.host + frontend_env["NB_WEBUI_PORT"] = Config.port + + frontend_proc = subprocess.Popen( + [pnpm_path, "dev"], + cwd=frontend_path, + env=frontend_env, + ) + + click.secho(_("Starting backend server..."), fg="green") + try: + from nb_cli_plugin_webui import server + + await server.run_server(Config.host, int(Config.port), reload=True) + finally: + frontend_proc.terminate() + frontend_proc.wait() @webui.command(help=_("Clear WebUI data.")) diff --git a/nb_cli_plugin_webui/locale/zh_CN/LC_MESSAGES/nb-cli-plugin-webui.po b/nb_cli_plugin_webui/locale/zh_CN/LC_MESSAGES/nb-cli-plugin-webui.po index 7a5e957..a6de118 100644 --- a/nb_cli_plugin_webui/locale/zh_CN/LC_MESSAGES/nb-cli-plugin-webui.po +++ b/nb_cli_plugin_webui/locale/zh_CN/LC_MESSAGES/nb-cli-plugin-webui.po @@ -223,6 +223,12 @@ msgstr "文件未找到." msgid "File cleared." msgstr "文件已清理." +#: nb_cli_plugin_webui/cli/__init__.py:58 +msgid "" +"Not in a project root directory. Please run this command in a NoneBot project " +"directory." +msgstr "不在项目根目录中。请在 NoneBot 项目目录下运行此命令。" + #: nb_cli_plugin_webui/cli/config.py:18 msgid "Setting NoneBot CLI WebUI." msgstr "NoneBot CLI WebUI 设置" diff --git a/nb_cli_plugin_webui/scripts.py b/nb_cli_plugin_webui/scripts.py index 1a4af14..25986f1 100644 --- a/nb_cli_plugin_webui/scripts.py +++ b/nb_cli_plugin_webui/scripts.py @@ -87,7 +87,7 @@ def _get_openapi(): host = args[0] port = args[1] url = f"http://{host}:{port}/api/docs/openapi.json" - response = httpx.get(url, proxies=dict()) + response = httpx.get(url) if response.status_code == 502: print("Error: Could not fetch OpenAPI schema") exit(-1) diff --git a/nb_cli_plugin_webui/server.py b/nb_cli_plugin_webui/server.py index 7407617..535a88b 100644 --- a/nb_cli_plugin_webui/server.py +++ b/nb_cli_plugin_webui/server.py @@ -1,6 +1,20 @@ +import os +import sys +import signal +import asyncio +import threading + +os.environ["PYTHONDONTWRITEBYTECODE"] = "1" + +from pathlib import Path + import uvicorn +import watchfiles from nb_cli_plugin_webui.app.logging import LOG_LEVEL +from nb_cli_plugin_webui.app.logging import logger as log + +_PKG_DIR = Path(__file__).parent LOG_CONFIG = { "version": 1, @@ -22,14 +36,81 @@ }, } +_shutdown = threading.Event() + -async def run_server(host: str, port: int): - server = uvicorn.Server( - uvicorn.Config( - "nb_cli_plugin_webui.app:app", - host=host, - port=port, - log_config=LOG_CONFIG, - ) +def _make_config(host: str, port: int) -> uvicorn.Config: + return uvicorn.Config( + "nb_cli_plugin_webui.app:app", + host=host, + port=port, + log_config=LOG_CONFIG, ) - return await server.serve() + + +async def run_server(host: str, port: int, reload: bool = False): + if not reload: + config = _make_config(host, port) + server = uvicorn.Server(config) + await server.serve() + return + + _shutdown.clear() + loop = asyncio.get_running_loop() + + # 在事件循环里注册 SIGINT 处理,让 Ctrl+C 能正确退出 + original_handler = signal.getsignal(signal.SIGINT) + + def _on_sigint(): + log.warning("Received interrupt signal, shutting down...") + _shutdown.set() + # 让当前正在 await 的 server_task 能退出 + for task in asyncio.all_tasks(loop): + task.cancel() + + if sys.platform != "win32": + loop.add_signal_handler(signal.SIGINT, _on_sigint) + else: + signal.signal(signal.SIGINT, lambda *_: _on_sigint()) + + try: + restart_count = 0 + while not _shutdown.is_set(): + restart_count += 1 + if restart_count > 1: + log.warning("Restarting server... (restart #{})", restart_count - 1) + await asyncio.sleep(1) + + config = _make_config(host, port) + server = uvicorn.Server(config) + server_task = asyncio.create_task(server.serve()) + + change_detected = threading.Event() + + def _watch_files(): + for changes in watchfiles.watch(_PKG_DIR, stop_event=change_detected): + if _shutdown.is_set(): + break + changed = ", ".join( + str(Path(p).relative_to(_PKG_DIR)) for _, p in changes + ) + log.warning("Detected changes in: {}", changed) + loop.call_soon_threadsafe(setattr, server, "should_exit", True) + break + + watcher_thread = threading.Thread(target=_watch_files, daemon=True) + watcher_thread.start() + + try: + await server_task + except (asyncio.CancelledError, Exception): + pass + + change_detected.set() + watcher_thread.join(timeout=3) + + if not server.should_exit and not _shutdown.is_set(): + break + finally: + # 恢复原始信号处理 + signal.signal(signal.SIGINT, original_handler) diff --git a/pdm.lock b/pdm.lock new file mode 100644 index 0000000..f1d00fc --- /dev/null +++ b/pdm.lock @@ -0,0 +1,1774 @@ +# This file is @generated by PDM. +# It is not intended for manual editing. + +[metadata] +groups = ["default", "dev"] +strategy = [] +lock_version = "4.5.0" +content_hash = "sha256:0ae5af9b92feffcbdc6304de32d0a3a1a41f6f0a50eee7d1d2e06585168e4838" + +[[metadata.targets]] +requires_python = "~=3.10" + +[[package]] +name = "annotated-doc" +version = "0.0.4" +summary = "" +files = [ + {file = "annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320"}, + {file = "annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4"}, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +summary = "" +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] + +[[package]] +name = "anyio" +version = "4.13.0" +summary = "" +dependencies = [ + "exceptiongroup; python_full_version < \"3.11\"", + "idna", + "typing-extensions; python_full_version < \"3.13\"", +] +files = [ + {file = "anyio-4.13.0-py3-none-any.whl", hash = "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708"}, + {file = "anyio-4.13.0.tar.gz", hash = "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc"}, +] + +[[package]] +name = "apscheduler" +version = "3.11.2" +summary = "" +dependencies = [ + "tzlocal", +] +files = [ + {file = "apscheduler-3.11.2-py3-none-any.whl", hash = "sha256:ce005177f741409db4e4dd40a7431b76feb856b9dd69d57e0da49d6715bfd26d"}, + {file = "apscheduler-3.11.2.tar.gz", hash = "sha256:2a9966b052ec805f020c8c4c3ae6e6a06e24b1bf19f2e11d91d8cca0473eef41"}, +] + +[[package]] +name = "arrow" +version = "1.4.0" +summary = "" +dependencies = [ + "python-dateutil", + "tzdata", +] +files = [ + {file = "arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205"}, + {file = "arrow-1.4.0.tar.gz", hash = "sha256:ed0cc050e98001b8779e84d461b0098c4ac597e88704a655582b21d116e526d7"}, +] + +[[package]] +name = "babel" +version = "2.18.0" +summary = "" +files = [ + {file = "babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35"}, + {file = "babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d"}, +] + +[[package]] +name = "bcrypt" +version = "5.0.0" +summary = "" +files = [ + {file = "bcrypt-5.0.0-cp313-cp313t-macosx_10_12_universal2.whl", hash = "sha256:f3c08197f3039bec79cee59a606d62b96b16669cff3949f21e74796b6e3cd2be"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:200af71bc25f22006f4069060c88ed36f8aa4ff7f53e67ff04d2ab3f1e79a5b2"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:baade0a5657654c2984468efb7d6c110db87ea63ef5a4b54732e7e337253e44f"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c58b56cdfb03202b3bcc9fd8daee8e8e9b6d7e3163aa97c631dfcfcc24d36c86"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4bfd2a34de661f34d0bda43c3e4e79df586e4716ef401fe31ea39d69d581ef23"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ed2e1365e31fc73f1825fa830f1c8f8917ca1b3ca6185773b349c20fd606cec2"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_aarch64.whl", hash = "sha256:83e787d7a84dbbfba6f250dd7a5efd689e935f03dd83b0f919d39349e1f23f83"}, + {file = "bcrypt-5.0.0-cp313-cp313t-manylinux_2_34_x86_64.whl", hash = "sha256:137c5156524328a24b9fac1cb5db0ba618bc97d11970b39184c1d87dc4bf1746"}, + {file = "bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:38cac74101777a6a7d3b3e3cfefa57089b5ada650dce2baf0cbdd9d65db22a9e"}, + {file = "bcrypt-5.0.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:d8d65b564ec849643d9f7ea05c6d9f0cd7ca23bdd4ac0c2dbef1104ab504543d"}, + {file = "bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:741449132f64b3524e95cd30e5cd3343006ce146088f074f31ab26b94e6c75ba"}, + {file = "bcrypt-5.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:212139484ab3207b1f0c00633d3be92fef3c5f0af17cad155679d03ff2ee1e41"}, + {file = "bcrypt-5.0.0-cp313-cp313t-win32.whl", hash = "sha256:9d52ed507c2488eddd6a95bccee4e808d3234fa78dd370e24bac65a21212b861"}, + {file = "bcrypt-5.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f6984a24db30548fd39a44360532898c33528b74aedf81c26cf29c51ee47057e"}, + {file = "bcrypt-5.0.0-cp313-cp313t-win_arm64.whl", hash = "sha256:9fffdb387abe6aa775af36ef16f55e318dcda4194ddbf82007a6f21da29de8f5"}, + {file = "bcrypt-5.0.0-cp314-cp314t-macosx_10_12_universal2.whl", hash = "sha256:4870a52610537037adb382444fefd3706d96d663ac44cbb2f37e3919dca3d7ef"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48f753100931605686f74e27a7b49238122aa761a9aefe9373265b8b7aa43ea4"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f70aadb7a809305226daedf75d90379c397b094755a710d7014b8b117df1ebbf"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:744d3c6b164caa658adcb72cb8cc9ad9b4b75c7db507ab4bc2480474a51989da"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a28bc05039bdf3289d757f49d616ab3efe8cf40d8e8001ccdd621cd4f98f4fc9"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:7f277a4b3390ab4bebe597800a90da0edae882c6196d3038a73adf446c4f969f"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:79cfa161eda8d2ddf29acad370356b47f02387153b11d46042e93a0a95127493"}, + {file = "bcrypt-5.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a5393eae5722bcef046a990b84dff02b954904c36a194f6cfc817d7dca6c6f0b"}, + {file = "bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7f4c94dec1b5ab5d522750cb059bb9409ea8872d4494fd152b53cca99f1ddd8c"}, + {file = "bcrypt-5.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0cae4cb350934dfd74c020525eeae0a5f79257e8a201c0c176f4b84fdbf2a4b4"}, + {file = "bcrypt-5.0.0-cp314-cp314t-win32.whl", hash = "sha256:b17366316c654e1ad0306a6858e189fc835eca39f7eb2cafd6aaca8ce0c40a2e"}, + {file = "bcrypt-5.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:92864f54fb48b4c718fc92a32825d0e42265a627f956bc0361fe869f1adc3e7d"}, + {file = "bcrypt-5.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dd19cf5184a90c873009244586396a6a884d591a5323f0e8a5922560718d4993"}, + {file = "bcrypt-5.0.0-cp38-abi3-macosx_10_12_universal2.whl", hash = "sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c2388ca94ffee269b6038d48747f4ce8df0ffbea43f31abfa18ac72f0218effb"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:560ddb6ec730386e7b3b26b8b4c88197aaed924430e7b74666a586ac997249ef"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d79e5c65dcc9af213594d6f7f1fa2c98ad3fc10431e7aa53c176b441943efbdd"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2b732e7d388fa22d48920baa267ba5d97cca38070b69c0e2d37087b381c681fd"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0c8e093ea2532601a6f686edbc2c6b2ec24131ff5c52f7610dd64fa4553b5464"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:5b1589f4839a0899c146e8892efe320c0fa096568abd9b95593efac50a87cb75"}, + {file = "bcrypt-5.0.0-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:89042e61b5e808b67daf24a434d89bab164d4de1746b37a8d173b6b14f3db9ff"}, + {file = "bcrypt-5.0.0-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:e3cf5b2560c7b5a142286f69bde914494b6d8f901aaa71e453078388a50881c4"}, + {file = "bcrypt-5.0.0-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f632fd56fc4e61564f78b46a2269153122db34988e78b6be8b32d28507b7eaeb"}, + {file = "bcrypt-5.0.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:801cad5ccb6b87d1b430f183269b94c24f248dddbbc5c1f78b6ed231743e001c"}, + {file = "bcrypt-5.0.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3cf67a804fc66fc217e6914a5635000259fbbbb12e78a99488e4d5ba445a71eb"}, + {file = "bcrypt-5.0.0-cp38-abi3-win32.whl", hash = "sha256:3abeb543874b2c0524ff40c57a4e14e5d3a66ff33fb423529c88f180fd756538"}, + {file = "bcrypt-5.0.0-cp38-abi3-win_amd64.whl", hash = "sha256:35a77ec55b541e5e583eb3436ffbbf53b0ffa1fa16ca6782279daf95d146dcd9"}, + {file = "bcrypt-5.0.0-cp38-abi3-win_arm64.whl", hash = "sha256:cde08734f12c6a4e28dc6755cd11d3bdfea608d93d958fffbe95a7026ebe4980"}, + {file = "bcrypt-5.0.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0c418ca99fd47e9c59a301744d63328f17798b5947b0f791e9af3c1c499c2d0a"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddb4e1500f6efdd402218ffe34d040a1196c072e07929b9820f363a1fd1f4191"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7aeef54b60ceddb6f30ee3db090351ecf0d40ec6e2abf41430997407a46d2254"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f0ce778135f60799d89c9693b9b398819d15f1921ba15fe719acb3178215a7db"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a71f70ee269671460b37a449f5ff26982a6f2ba493b3eabdd687b4bf35f875ac"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:edfcdcedd0d0f05850c52ba3127b1fce70b9f89e0fe5ff16517df7e81fa3cbb8"}, + {file = "bcrypt-5.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:611f0a17aa4a25a69362dcc299fda5c8a3d4f160e2abb3831041feb77393a14a"}, + {file = "bcrypt-5.0.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:db99dca3b1fdc3db87d7c57eac0c82281242d1eabf19dcb8a6b10eb29a2e72d1"}, + {file = "bcrypt-5.0.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5feebf85a9cefda32966d8171f5db7e3ba964b77fdfe31919622256f80f9cf42"}, + {file = "bcrypt-5.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3ca8a166b1140436e058298a34d88032ab62f15aae1c598580333dc21d27ef10"}, + {file = "bcrypt-5.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:61afc381250c3182d9078551e3ac3a41da14154fbff647ddf52a769f588c4172"}, + {file = "bcrypt-5.0.0-cp39-abi3-win32.whl", hash = "sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683"}, + {file = "bcrypt-5.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2"}, + {file = "bcrypt-5.0.0-cp39-abi3-win_arm64.whl", hash = "sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927"}, + {file = "bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534"}, + {file = "bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4"}, + {file = "bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911"}, + {file = "bcrypt-5.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4"}, + {file = "bcrypt-5.0.0.tar.gz", hash = "sha256:f748f7c2d6fd375cc93d3fba7ef4a9e3a092421b8dbf34d8d4dc06be9492dfdd"}, +] + +[[package]] +name = "binaryornot" +version = "0.6.0" +summary = "" +files = [ + {file = "binaryornot-0.6.0-py3-none-any.whl", hash = "sha256:900adfd5e1b821255ba7e63139b0396b14c88b9286e74e03b6f51e0200331337"}, + {file = "binaryornot-0.6.0.tar.gz", hash = "sha256:cc8d57cfa71d74ff8c28a7726734d53a851d02fad9e3a5581fb807f989f702f0"}, +] + +[[package]] +name = "black" +version = "26.5.1" +summary = "" +dependencies = [ + "click", + "mypy-extensions", + "packaging", + "pathspec", + "platformdirs", + "pytokens", + "tomli; python_full_version < \"3.11\"", + "typing-extensions; python_full_version < \"3.11\"", +] +files = [ + {file = "black-26.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9942db8888e06943c5dde66ca0037dcff82a2a4ec1ad0ada9e0d2ee9d9823893"}, + {file = "black-26.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:89c93167a74d3a75dfaa38a5c7cca015537d5820dd7f17d63267d674a61cae90"}, + {file = "black-26.5.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f2cd76d069cc54c71f10360744ba8983fbb616903b4304a85b734915c8e1b4"}, + {file = "black-26.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:87ed5c6f450580a2f6790bc7cbfb016dfc73bc750249762268a3695361315eef"}, + {file = "black-26.5.1-cp310-cp310-win_arm64.whl", hash = "sha256:58b4bd92cf88aacf83d88479c8f9caee044b1ec55f2451a337354a7ea2590a22"}, + {file = "black-26.5.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:96ae2c733b2aabdd9986e2c5df628ff3473676cd1c5faded1ff496cf6d74083c"}, + {file = "black-26.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0e48b87e03bf109288e55cfceadcfa15ff5470aca2851a851950ed2926f450d7"}, + {file = "black-26.5.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5119fa92ae61f786e8c3662fd60aece1d0a2dd5cca5d0c79417a95e7a4272a59"}, + {file = "black-26.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:30d3c14661f2792e9142cce3eeeb1cbc175b3eb5f733be0c8eeb99651e52b0c3"}, + {file = "black-26.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:1ef92b76f7733f282fd096ea406200b5a286c42947412b0eaff3a74e3616cefe"}, + {file = "black-26.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ad6fa01f941920f54f2bbb35f3df7673428a0ef98a0b0840c2eaef3b110efa8"}, + {file = "black-26.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3915f256e75a2d7cf88d8953d37f780455dc586cc72dee059c528fe77f581217"}, + {file = "black-26.5.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d98d4137277c75dfb898ec8d846c4fd68ba1e9cf77f95e2865c203dc18f4c3d"}, + {file = "black-26.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:a1dca32d9f1784af512a13410ec204c6f7f0aa9797a111c42e1c03449821c264"}, + {file = "black-26.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1037d5ac7b7b310b2632ad867ec8d0e4c4819dcdb0b820f63135da746a24e418"}, + {file = "black-26.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b36cf2ddf5566e205f6535f782a62194a184d33e175b64ae8c40b1737522be3"}, + {file = "black-26.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1f7ea64ebfa01b50f693508fc39f875e264446d3b097088f84f203b9d09618a0"}, + {file = "black-26.5.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecb3e624844c798144e9bd986954e0adc81d8911a1f30f375e1252fe26e8c294"}, + {file = "black-26.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:e1a26503279b6b310669fb0b219c39e4820b77e8189fe80f522bb511f247db0a"}, + {file = "black-26.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c34b25da232ead53a6f335b76dbea124f4d152ad568b9080d6f944bc2b34b52"}, + {file = "black-26.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:e88976690a64b0af98312ca958415849cb42423423c5f2ee74af4b49a97a2168"}, + {file = "black-26.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32d5ea7f6c8bdfa6e648326ebca1f02b0764e2a029edc6f8dce2627e19d468c3"}, + {file = "black-26.5.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ea8d16dc41655aa113cd64665e7219446cd7e4ff2248d7178eaa905190c86b18"}, + {file = "black-26.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:577f21094ea469ef92ec1adaf2c9441a226d2144d01a5be2fa823cecf6543e50"}, + {file = "black-26.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:ed1a20af114c301a0269bf01163d51dbef72737fd65f850001e7cbe7f3c7abae"}, + {file = "black-26.5.1-py3-none-any.whl", hash = "sha256:4ed7f7da04046d2e488437170797d3b4a4ad83906683bcb7dfc68b673bbce5e2"}, + {file = "black-26.5.1.tar.gz", hash = "sha256:dd321f668053961824bcc1be1cc1df748b2d7e4fa28086b08331e577b0100a73"}, +] + +[[package]] +name = "cashews" +version = "7.5.0" +summary = "" +files = [ + {file = "cashews-7.5.0-py3-none-any.whl", hash = "sha256:e79cb4e5cc164d8f2d2856b166d45dcc2dd8d53b95874d2c6d07dfdb1c9ac3c4"}, + {file = "cashews-7.5.0.tar.gz", hash = "sha256:3f88b8c5ced0ea4826915a1ff67055b647252dd65ef25f4813316a6341f00b37"}, +] + +[[package]] +name = "certifi" +version = "2026.4.22" +summary = "" +files = [ + {file = "certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a"}, + {file = "certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580"}, +] + +[[package]] +name = "cfgv" +version = "3.5.0" +summary = "" +files = [ + {file = "cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0"}, + {file = "cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.7" +summary = "" +files = [ + {file = "charset_normalizer-3.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-win32.whl", hash = "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943"}, + {file = "charset_normalizer-3.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-win32.whl", hash = "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00"}, + {file = "charset_normalizer-3.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-win32.whl", hash = "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6"}, + {file = "charset_normalizer-3.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-win32.whl", hash = "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110"}, + {file = "charset_normalizer-3.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f"}, + {file = "charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c"}, + {file = "charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d"}, + {file = "charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d"}, + {file = "charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5"}, +] + +[[package]] +name = "click" +version = "8.4.0" +summary = "" +dependencies = [ + "colorama; sys_platform == \"win32\"", +] +files = [ + {file = "click-8.4.0-py3-none-any.whl", hash = "sha256:40c50b7c6c6adac2823d411041ec84f3f103f1b280d5e9ce0d7f998995832f81"}, + {file = "click-8.4.0.tar.gz", hash = "sha256:638f1338fe1235c8f4e008e4a8a254fb5c5fbdcbb40ece3c9142ebb78e792973"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +summary = "" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cookiecutter" +version = "2.7.1" +summary = "" +dependencies = [ + "arrow", + "binaryornot", + "click", + "jinja2", + "python-slugify", + "pyyaml", + "requests", + "rich", +] +files = [ + {file = "cookiecutter-2.7.1-py3-none-any.whl", hash = "sha256:cee50defc1eaa7ad0071ee9b9893b746c1b3201b66bf4d3686d0f127c8ed6cf9"}, + {file = "cookiecutter-2.7.1.tar.gz", hash = "sha256:ca7bb7bc8c6ff441fbf53921b5537668000e38d56e28d763a1b73975c66c6138"}, +] + +[[package]] +name = "distlib" +version = "0.4.0" +summary = "" +files = [ + {file = "distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16"}, + {file = "distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d"}, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +summary = "" +dependencies = [ + "typing-extensions; python_full_version < \"3.13\"", +] +files = [ + {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, + {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, +] + +[[package]] +name = "fastapi" +version = "0.136.1" +summary = "" +dependencies = [ + "annotated-doc", + "pydantic", + "starlette", + "typing-extensions", + "typing-inspection", +] +files = [ + {file = "fastapi-0.136.1-py3-none-any.whl", hash = "sha256:a6e9d7eeada96c93a4d69cb03836b44fa34e2854accb7244a1ece36cd4781c3f"}, + {file = "fastapi-0.136.1.tar.gz", hash = "sha256:7af665ad7acfa0a3baf8983d393b6b471b9da10ede59c60045f49fbc89a0fa7f"}, +] + +[[package]] +name = "filelock" +version = "3.29.0" +summary = "" +files = [ + {file = "filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258"}, + {file = "filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90"}, +] + +[[package]] +name = "flake8" +version = "7.3.0" +summary = "" +dependencies = [ + "mccabe", + "pycodestyle", + "pyflakes", +] +files = [ + {file = "flake8-7.3.0-py2.py3-none-any.whl", hash = "sha256:b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e"}, + {file = "flake8-7.3.0.tar.gz", hash = "sha256:fe044858146b9fc69b551a4b490d69cf960fcb78ad1edcb84e7fbb1b4a8e3872"}, +] + +[[package]] +name = "h11" +version = "0.14.0" +summary = "" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + +[[package]] +name = "httpcore" +version = "0.17.3" +summary = "" +dependencies = [ + "anyio", + "certifi", + "h11", + "sniffio", +] +files = [ + {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, + {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, +] + +[[package]] +name = "httptools" +version = "0.7.1" +summary = "" +files = [ + {file = "httptools-0.7.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:11d01b0ff1fe02c4c32d60af61a4d613b74fad069e47e06e9067758c01e9ac78"}, + {file = "httptools-0.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:84d86c1e5afdc479a6fdabf570be0d3eb791df0ae727e8dbc0259ed1249998d4"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c8c751014e13d88d2be5f5f14fc8b89612fcfa92a9cc480f2bc1598357a23a05"}, + {file = "httptools-0.7.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:654968cb6b6c77e37b832a9be3d3ecabb243bbe7a0b8f65fbc5b6b04c8fcabed"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b580968316348b474b020edf3988eecd5d6eec4634ee6561e72ae3a2a0e00a8a"}, + {file = "httptools-0.7.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d496e2f5245319da9d764296e86c5bb6fcf0cf7a8806d3d000717a889c8c0b7b"}, + {file = "httptools-0.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:cbf8317bfccf0fed3b5680c559d3459cccf1abe9039bfa159e62e391c7270568"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:474d3b7ab469fefcca3697a10d11a32ee2b9573250206ba1e50d5980910da657"}, + {file = "httptools-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3c3b7366bb6c7b96bd72d0dbe7f7d5eead261361f013be5f6d9590465ea1c70"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:379b479408b8747f47f3b253326183d7c009a3936518cdb70db58cffd369d9df"}, + {file = "httptools-0.7.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad6b591a682dcc6cf1397c3900527f9affef1e55a06c4547264796bbd17cf5e"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eb844698d11433d2139bbeeb56499102143beb582bd6c194e3ba69c22f25c274"}, + {file = "httptools-0.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f65744d7a8bdb4bda5e1fa23e4ba16832860606fcc09d674d56e425e991539ec"}, + {file = "httptools-0.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:135fbe974b3718eada677229312e97f3b31f8a9c8ffa3ae6f565bf808d5b6bcb"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:38e0c83a2ea9746ebbd643bdfb521b9aa4a91703e2cd705c20443405d2fd16a5"}, + {file = "httptools-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f25bbaf1235e27704f1a7b86cd3304eabc04f569c828101d94a0e605ef7205a5"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03"}, + {file = "httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362"}, + {file = "httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c"}, + {file = "httptools-0.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:3e14f530fefa7499334a79b0cf7e7cd2992870eb893526fb097d51b4f2d0f321"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6babce6cfa2a99545c60bfef8bee0cc0545413cb0018f617c8059a30ad985de3"}, + {file = "httptools-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:601b7628de7504077dd3dcb3791c6b8694bbd967148a6d1f01806509254fb1ca"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c"}, + {file = "httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346"}, + {file = "httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650"}, + {file = "httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270"}, + {file = "httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1"}, + {file = "httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60"}, + {file = "httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca"}, + {file = "httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96"}, + {file = "httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9"}, +] + +[[package]] +name = "httpx" +version = "0.24.1" +summary = "" +dependencies = [ + "certifi", + "httpcore", + "idna", + "sniffio", +] +files = [ + {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, + {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, +] + +[[package]] +name = "httpx" +version = "0.24.1" +extras = ["socks"] +summary = "" +dependencies = [ + "httpx==0.24.1", + "socksio", +] +files = [ + {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, + {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, +] + +[[package]] +name = "identify" +version = "2.6.19" +summary = "" +files = [ + {file = "identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a"}, + {file = "identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842"}, +] + +[[package]] +name = "idna" +version = "3.15" +summary = "" +files = [ + {file = "idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8"}, + {file = "idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc"}, +] + +[[package]] +name = "isort" +version = "8.0.1" +summary = "" +files = [ + {file = "isort-8.0.1-py3-none-any.whl", hash = "sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75"}, + {file = "isort-8.0.1.tar.gz", hash = "sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +summary = "" +dependencies = [ + "markupsafe", +] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[[package]] +name = "linkify-it-py" +version = "2.1.0" +summary = "" +dependencies = [ + "uc-micro-py", +] +files = [ + {file = "linkify_it_py-2.1.0-py3-none-any.whl", hash = "sha256:0d252c1594ecba2ecedc444053db5d3a9b7ec1b0dd929c8f1d74dce89f86c05e"}, + {file = "linkify_it_py-2.1.0.tar.gz", hash = "sha256:43360231720999c10e9328dc3691160e27a718e280673d444c38d7d3aaa3b98b"}, +] + +[[package]] +name = "loguru" +version = "0.7.3" +summary = "" +dependencies = [ + "colorama; sys_platform == \"win32\"", + "win32-setctime; sys_platform == \"win32\"", +] +files = [ + {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, + {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +summary = "" +dependencies = [ + "mdurl", +] +files = [ + {file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"}, + {file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"}, +] + +[[package]] +name = "markdown-it-py" +version = "4.2.0" +extras = ["linkify"] +summary = "" +dependencies = [ + "linkify-it-py", + "markdown-it-py==4.2.0", +] +files = [ + {file = "markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a"}, + {file = "markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49"}, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +summary = "" +files = [ + {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, + {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, + {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, + {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, + {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, + {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, + {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, + {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, + {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, + {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, + {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, + {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, + {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, + {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, + {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, + {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, + {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, + {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, + {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, + {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, + {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, + {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, + {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, + {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, + {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, + {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, + {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, + {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, + {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, + {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, + {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, + {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, + {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, + {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, + {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, +] + +[[package]] +name = "mccabe" +version = "0.7.0" +summary = "" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mdit-py-plugins" +version = "0.6.1" +summary = "" +dependencies = [ + "markdown-it-py", +] +files = [ + {file = "mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d"}, + {file = "mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0"}, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +summary = "" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +summary = "" +files = [ + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, +] + +[[package]] +name = "nb-cli" +version = "1.5.0" +summary = "" +dependencies = [ + "anyio", + "cashews", + "click", + "cookiecutter", + "httpx", + "jinja2", + "noneprompt", + "nonestorage", + "pydantic", + "pyfiglet", + "rich", + "textual", + "tomlkit", + "typing-extensions", + "virtualenv", + "watchfiles", + "wcwidth", +] +files = [ + {file = "nb_cli-1.5.0-py3-none-any.whl", hash = "sha256:d44a49321050a9a85d6f15f8b2a6eb45936cfd9eb02a26a54bf495b802a1564f"}, + {file = "nb_cli-1.5.0.tar.gz", hash = "sha256:bd9c418dabe29b8c4da76e2cee136ca192bbc687912524fb36f4916d14d84b3f"}, +] + +[[package]] +name = "nodeenv" +version = "1.10.0" +summary = "" +files = [ + {file = "nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827"}, + {file = "nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb"}, +] + +[[package]] +name = "nonemoji" +version = "0.1.4" +summary = "" +dependencies = [ + "noneprompt", +] +files = [ + {file = "nonemoji-0.1.4-py3-none-any.whl", hash = "sha256:6e2b22d315bd936df7d004cf55b13fac5d55abd36aba6b37b405da39b6f78269"}, + {file = "nonemoji-0.1.4.tar.gz", hash = "sha256:f7480e1f2f27f0a149da23f371bab0a47dd2cf46674f61798658b3daa7836fc5"}, +] + +[[package]] +name = "noneprompt" +version = "0.1.11" +summary = "" +dependencies = [ + "prompt-toolkit", +] +files = [ + {file = "noneprompt-0.1.11-py3-none-any.whl", hash = "sha256:e3d83e7cf57f645a35c6b8eaf918baefe077c41b761bb6326e8e6adb4f73150e"}, + {file = "noneprompt-0.1.11.tar.gz", hash = "sha256:68226918f2a1543aa380caada5c380ae5ca38f57292278c5bfd3b7289f1ac6db"}, +] + +[[package]] +name = "nonestorage" +version = "0.1.0" +summary = "" +files = [ + {file = "nonestorage-0.1.0-py3-none-any.whl", hash = "sha256:35811adf67c680c272bcb71fa9d6c3613cc2d1bb79f5bfc7d83c4412a79537cb"}, + {file = "nonestorage-0.1.0.tar.gz", hash = "sha256:818232236455c79cabbb69e716f73aa1b9c21d579f1c1fcbdba273b60bac72d9"}, +] + +[[package]] +name = "packaging" +version = "26.2" +summary = "" +files = [ + {file = "packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e"}, + {file = "packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661"}, +] + +[[package]] +name = "passlib" +version = "1.7.4" +summary = "" +files = [ + {file = "passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1"}, + {file = "passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04"}, +] + +[[package]] +name = "pathlib" +version = "1.0.1" +summary = "" +files = [ + {file = "pathlib-1.0.1-py3-none-any.whl", hash = "sha256:f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147"}, + {file = "pathlib-1.0.1.tar.gz", hash = "sha256:6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f"}, +] + +[[package]] +name = "pathspec" +version = "1.1.1" +summary = "" +files = [ + {file = "pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189"}, + {file = "pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a"}, +] + +[[package]] +name = "platformdirs" +version = "4.9.6" +summary = "" +files = [ + {file = "platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917"}, + {file = "platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a"}, +] + +[[package]] +name = "pre-commit" +version = "4.6.0" +summary = "" +dependencies = [ + "cfgv", + "identify", + "nodeenv", + "pyyaml", + "virtualenv", +] +files = [ + {file = "pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b"}, + {file = "pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9"}, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +summary = "" +dependencies = [ + "wcwidth", +] +files = [ + {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, + {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, +] + +[[package]] +name = "psutil" +version = "7.2.2" +summary = "" +files = [ + {file = "psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b"}, + {file = "psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63"}, + {file = "psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312"}, + {file = "psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b"}, + {file = "psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00"}, + {file = "psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a"}, + {file = "psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf"}, + {file = "psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1"}, + {file = "psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486"}, + {file = "psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9"}, + {file = "psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8"}, + {file = "psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc"}, + {file = "psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988"}, + {file = "psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee"}, + {file = "psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372"}, +] + +[[package]] +name = "pycodestyle" +version = "2.14.0" +summary = "" +files = [ + {file = "pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d"}, + {file = "pycodestyle-2.14.0.tar.gz", hash = "sha256:c4b5b517d278089ff9d0abdec919cd97262a3367449ea1c8b49b91529167b783"}, +] + +[[package]] +name = "pydantic" +version = "2.13.4" +summary = "" +dependencies = [ + "annotated-types", + "pydantic-core", + "typing-extensions", + "typing-inspection", +] +files = [ + {file = "pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba"}, + {file = "pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6"}, +] + +[[package]] +name = "pydantic-core" +version = "2.46.4" +summary = "" +dependencies = [ + "typing-extensions", +] +files = [ + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01"}, + {file = "pydantic_core-2.46.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f"}, + {file = "pydantic_core-2.46.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win32.whl", hash = "sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d"}, + {file = "pydantic_core-2.46.4-cp310-cp310-win_amd64.whl", hash = "sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594"}, + {file = "pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398"}, + {file = "pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3"}, + {file = "pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33"}, + {file = "pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2"}, + {file = "pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987"}, + {file = "pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b"}, + {file = "pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89"}, + {file = "pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008"}, + {file = "pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262"}, + {file = "pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be"}, + {file = "pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292"}, + {file = "pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c"}, + {file = "pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e"}, + {file = "pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac"}, + {file = "pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5"}, + {file = "pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b"}, + {file = "pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526"}, + {file = "pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc"}, + {file = "pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983"}, + {file = "pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1"}, +] + +[[package]] +name = "pyfiglet" +version = "1.0.4" +summary = "" +files = [ + {file = "pyfiglet-1.0.4-py3-none-any.whl", hash = "sha256:65b57b7a8e1dff8a67dc8e940a117238661d5e14c3e49121032bd404d9b2b39f"}, + {file = "pyfiglet-1.0.4.tar.gz", hash = "sha256:db9c9940ed1bf3048deff534ed52ff2dafbbc2cd7610b17bb5eca1df6d4278ef"}, +] + +[[package]] +name = "pyflakes" +version = "3.4.0" +summary = "" +files = [ + {file = "pyflakes-3.4.0-py2.py3-none-any.whl", hash = "sha256:f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f"}, + {file = "pyflakes-3.4.0.tar.gz", hash = "sha256:b24f96fafb7d2ab0ec5075b7350b3d2d2218eab42003821c06344973d3ea2f58"}, +] + +[[package]] +name = "pygments" +version = "2.20.0" +summary = "" +files = [ + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, +] + +[[package]] +name = "pyjwt" +version = "2.12.1" +summary = "" +dependencies = [ + "typing-extensions; python_full_version < \"3.11\"", +] +files = [ + {file = "pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c"}, + {file = "pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b"}, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +summary = "" +dependencies = [ + "six", +] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[[package]] +name = "python-dotenv" +version = "1.2.2" +summary = "" +files = [ + {file = "python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a"}, + {file = "python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3"}, +] + +[[package]] +name = "python-slugify" +version = "8.0.4" +summary = "" +dependencies = [ + "text-unidecode", +] +files = [ + {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, + {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +summary = "" +files = [ + {file = "pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5"}, + {file = "pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe"}, + {file = "pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c"}, + {file = "pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7"}, + {file = "pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2"}, + {file = "pytokens-0.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440"}, + {file = "pytokens-0.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc"}, + {file = "pytokens-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d"}, + {file = "pytokens-0.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16"}, + {file = "pytokens-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6"}, + {file = "pytokens-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083"}, + {file = "pytokens-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1"}, + {file = "pytokens-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1"}, + {file = "pytokens-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9"}, + {file = "pytokens-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68"}, + {file = "pytokens-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b"}, + {file = "pytokens-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f"}, + {file = "pytokens-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1"}, + {file = "pytokens-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4"}, + {file = "pytokens-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78"}, + {file = "pytokens-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321"}, + {file = "pytokens-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa"}, + {file = "pytokens-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d"}, + {file = "pytokens-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324"}, + {file = "pytokens-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9"}, + {file = "pytokens-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb"}, + {file = "pytokens-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3"}, + {file = "pytokens-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975"}, + {file = "pytokens-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a"}, + {file = "pytokens-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918"}, + {file = "pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de"}, + {file = "pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a"}, +] + +[[package]] +name = "pywin32" +version = "311" +summary = "" +files = [ + {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, + {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, + {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, + {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, + {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, + {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, + {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, + {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, + {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, + {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, + {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, + {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, + {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, + {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, + {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.3" +summary = "" +files = [ + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, +] + +[[package]] +name = "requests" +version = "2.34.2" +summary = "" +dependencies = [ + "certifi", + "charset-normalizer", + "idna", + "urllib3", +] +files = [ + {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"}, + {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"}, +] + +[[package]] +name = "rich" +version = "15.0.0" +summary = "" +dependencies = [ + "markdown-it-py", + "pygments", +] +files = [ + {file = "rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb"}, + {file = "rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"}, +] + +[[package]] +name = "six" +version = "1.17.0" +summary = "" +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +summary = "" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + +[[package]] +name = "socksio" +version = "1.0.0" +summary = "" +files = [ + {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, + {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, +] + +[[package]] +name = "starlette" +version = "1.0.0" +summary = "" +dependencies = [ + "anyio", + "typing-extensions; python_full_version < \"3.13\"", +] +files = [ + {file = "starlette-1.0.0-py3-none-any.whl", hash = "sha256:d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b"}, + {file = "starlette-1.0.0.tar.gz", hash = "sha256:6a4beaf1f81bb472fd19ea9b918b50dc3a77a6f2e190a12954b25e6ed5eea149"}, +] + +[[package]] +name = "text-unidecode" +version = "1.3" +summary = "" +files = [ + {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, + {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, +] + +[[package]] +name = "textual" +version = "8.2.6" +summary = "" +dependencies = [ + "markdown-it-py[linkify]", + "mdit-py-plugins", + "platformdirs", + "pygments", + "rich", + "typing-extensions", +] +files = [ + {file = "textual-8.2.6-py3-none-any.whl", hash = "sha256:17c92bec7ff1617bd7db2a3d9734b0c3b7d2c274c67d5eba94371ea2f99a63fd"}, + {file = "textual-8.2.6.tar.gz", hash = "sha256:cef3714498a120a99278b98d4c165c278844e73db50f1db039aaabd89f2d1b63"}, +] + +[[package]] +name = "tomli" +version = "2.4.1" +summary = "" +files = [ + {file = "tomli-2.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f8f0fc26ec2cc2b965b7a3b87cd19c5c6b8c5e5f436b984e85f486d652285c30"}, + {file = "tomli-2.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4ab97e64ccda8756376892c53a72bd1f964e519c77236368527f758fbc36a53a"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96481a5786729fd470164b47cdb3e0e58062a496f455ee41b4403be77cb5a076"}, + {file = "tomli-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5a881ab208c0baf688221f8cecc5401bd291d67e38a1ac884d6736cbcd8247e9"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:47149d5bd38761ac8be13a84864bf0b7b70bc051806bc3669ab1cbc56216b23c"}, + {file = "tomli-2.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ec9bfaf3ad2df51ace80688143a6a4ebc09a248f6ff781a9945e51937008fcbc"}, + {file = "tomli-2.4.1-cp311-cp311-win32.whl", hash = "sha256:ff2983983d34813c1aeb0fa89091e76c3a22889ee83ab27c5eeb45100560c049"}, + {file = "tomli-2.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:5ee18d9ebdb417e384b58fe414e8d6af9f4e7a0ae761519fb50f721de398dd4e"}, + {file = "tomli-2.4.1-cp311-cp311-win_arm64.whl", hash = "sha256:c2541745709bad0264b7d4705ad453b76ccd191e64aa6f0fc66b69a293a45ece"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c742f741d58a28940ce01d58f0ab2ea3ced8b12402f162f4d534dfe18ba1cd6a"}, + {file = "tomli-2.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7f86fd587c4ed9dd76f318225e7d9b29cfc5a9d43de44e5754db8d1128487085"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ff18e6a727ee0ab0388507b89d1bc6a22b138d1e2fa56d1ad494586d61d2eae9"}, + {file = "tomli-2.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:136443dbd7e1dee43c68ac2694fde36b2849865fa258d39bf822c10e8068eac5"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5e262d41726bc187e69af7825504c933b6794dc3fbd5945e41a79bb14c31f585"}, + {file = "tomli-2.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5cb41aa38891e073ee49d55fbc7839cfdb2bc0e600add13874d048c94aadddd1"}, + {file = "tomli-2.4.1-cp312-cp312-win32.whl", hash = "sha256:da25dc3563bff5965356133435b757a795a17b17d01dbc0f42fb32447ddfd917"}, + {file = "tomli-2.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:52c8ef851d9a240f11a88c003eacb03c31fc1c9c4ec64a99a0f922b93874fda9"}, + {file = "tomli-2.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:f758f1b9299d059cc3f6546ae2af89670cb1c4d48ea29c3cacc4fe7de3058257"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:36d2bd2ad5fb9eaddba5226aa02c8ec3fa4f192631e347b3ed28186d43be6b54"}, + {file = "tomli-2.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eb0dc4e38e6a1fd579e5d50369aa2e10acfc9cace504579b2faabb478e76941a"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7f2c7f2b9ca6bdeef8f0fa897f8e05085923eb091721675170254cbc5b02897"}, + {file = "tomli-2.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f3c6818a1a86dd6dca7ddcaaf76947d5ba31aecc28cb1b67009a5877c9a64f3f"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d312ef37c91508b0ab2cee7da26ec0b3ed2f03ce12bd87a588d771ae15dcf82d"}, + {file = "tomli-2.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51529d40e3ca50046d7606fa99ce3956a617f9b36380da3b7f0dd3dd28e68cb5"}, + {file = "tomli-2.4.1-cp313-cp313-win32.whl", hash = "sha256:2190f2e9dd7508d2a90ded5ed369255980a1bcdd58e52f7fe24b8162bf9fedbd"}, + {file = "tomli-2.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d65a2fbf9d2f8352685bc1364177ee3923d6baf5e7f43ea4959d7d8bc326a36"}, + {file = "tomli-2.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:4b605484e43cdc43f0954ddae319fb75f04cc10dd80d830540060ee7cd0243cd"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:fd0409a3653af6c147209d267a0e4243f0ae46b011aa978b1080359fddc9b6cf"}, + {file = "tomli-2.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a120733b01c45e9a0c34aeef92bf0cf1d56cfe81ed9d47d562f9ed591a9828ac"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:559db847dc486944896521f68d8190be1c9e719fced785720d2216fe7022b662"}, + {file = "tomli-2.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01f520d4f53ef97964a240a035ec2a869fe1a37dde002b57ebc4417a27ccd853"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7f94b27a62cfad8496c8d2513e1a222dd446f095fca8987fceef261225538a15"}, + {file = "tomli-2.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ede3e6487c5ef5d28634ba3f31f989030ad6af71edfb0055cbbd14189ff240ba"}, + {file = "tomli-2.4.1-cp314-cp314-win32.whl", hash = "sha256:3d48a93ee1c9b79c04bb38772ee1b64dcf18ff43085896ea460ca8dec96f35f6"}, + {file = "tomli-2.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:88dceee75c2c63af144e456745e10101eb67361050196b0b6af5d717254dddf7"}, + {file = "tomli-2.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:b8c198f8c1805dc42708689ed6864951fd2494f924149d3e4bce7710f8eb5232"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:d4d8fe59808a54658fcc0160ecfb1b30f9089906c50b23bcb4c69eddc19ec2b4"}, + {file = "tomli-2.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7008df2e7655c495dd12d2a4ad038ff878d4ca4b81fccaf82b714e07eae4402c"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d8591993e228b0c930c4bb0db464bdad97b3289fb981255d6c9a41aedc84b2d"}, + {file = "tomli-2.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:734e20b57ba95624ecf1841e72b53f6e186355e216e5412de414e3c51e5e3c41"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8a650c2dbafa08d42e51ba0b62740dae4ecb9338eefa093aa5c78ceb546fcd5c"}, + {file = "tomli-2.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:504aa796fe0569bb43171066009ead363de03675276d2d121ac1a4572397870f"}, + {file = "tomli-2.4.1-cp314-cp314t-win32.whl", hash = "sha256:b1d22e6e9387bf4739fbe23bfa80e93f6b0373a7f1b96c6227c32bef95a4d7a8"}, + {file = "tomli-2.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c1c351919aca02858f740c6d33adea0c5deea37f9ecca1cc1ef9e884a619d26"}, + {file = "tomli-2.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eab21f45c7f66c13f2a9e0e1535309cee140182a9cdae1e041d02e47291e8396"}, + {file = "tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe"}, + {file = "tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f"}, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +summary = "" +files = [ + {file = "tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680"}, + {file = "tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064"}, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +summary = "" +files = [ + {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, + {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +summary = "" +dependencies = [ + "typing-extensions", +] +files = [ + {file = "typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7"}, + {file = "typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464"}, +] + +[[package]] +name = "tzdata" +version = "2026.2" +summary = "" +files = [ + {file = "tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7"}, + {file = "tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10"}, +] + +[[package]] +name = "tzlocal" +version = "5.3.1" +summary = "" +dependencies = [ + "tzdata; sys_platform == \"win32\"", +] +files = [ + {file = "tzlocal-5.3.1-py3-none-any.whl", hash = "sha256:eb1a66c3ef5847adf7a834f1be0800581b683b5608e74f86ecbcef8ab91bb85d"}, + {file = "tzlocal-5.3.1.tar.gz", hash = "sha256:cceffc7edecefea1f595541dbd6e990cb1ea3d19bf01b2809f362a03dd7921fd"}, +] + +[[package]] +name = "uc-micro-py" +version = "2.0.0" +summary = "" +files = [ + {file = "uc_micro_py-2.0.0-py3-none-any.whl", hash = "sha256:3603a3859af53e5a39bc7677713c78ea6589ff188d70f4fee165db88e22b242c"}, + {file = "uc_micro_py-2.0.0.tar.gz", hash = "sha256:c53691e495c8db60e16ffc4861a35469b0ba0821fe409a8a7a0a71864d33a811"}, +] + +[[package]] +name = "urllib3" +version = "2.7.0" +summary = "" +files = [ + {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, + {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, +] + +[[package]] +name = "uvicorn" +version = "0.22.0" +summary = "" +dependencies = [ + "click", + "h11", +] +files = [ + {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"}, + {file = "uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8"}, +] + +[[package]] +name = "uvicorn" +version = "0.22.0" +extras = ["standard"] +summary = "" +dependencies = [ + "colorama; sys_platform == \"win32\"", + "httptools", + "python-dotenv", + "pyyaml", + "uvicorn==0.22.0", + "uvloop; platform_python_implementation != \"PyPy\" and (sys_platform != \"cygwin\" and sys_platform != \"win32\")", + "watchfiles", + "websockets", +] +files = [ + {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"}, + {file = "uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8"}, +] + +[[package]] +name = "uvloop" +version = "0.22.1" +summary = "" +files = [ + {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ef6f0d4cc8a9fa1f6a910230cd53545d9a14479311e87e3cb225495952eb672c"}, + {file = "uvloop-0.22.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cd375a12b71d33d46af85a3343b35d98e8116134ba404bd657b3b1d15988792"}, + {file = "uvloop-0.22.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac33ed96229b7790eb729702751c0e93ac5bc3bcf52ae9eccbff30da09194b86"}, + {file = "uvloop-0.22.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:481c990a7abe2c6f4fc3d98781cc9426ebd7f03a9aaa7eb03d3bfc68ac2a46bd"}, + {file = "uvloop-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a592b043a47ad17911add5fbd087c76716d7c9ccc1d64ec9249ceafd735f03c2"}, + {file = "uvloop-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1489cf791aa7b6e8c8be1c5a080bae3a672791fcb4e9e12249b05862a2ca9cec"}, + {file = "uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9"}, + {file = "uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77"}, + {file = "uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21"}, + {file = "uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702"}, + {file = "uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733"}, + {file = "uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473"}, + {file = "uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42"}, + {file = "uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6"}, + {file = "uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370"}, + {file = "uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4"}, + {file = "uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2"}, + {file = "uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0"}, + {file = "uvloop-0.22.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:561577354eb94200d75aca23fbde86ee11be36b00e52a4eaf8f50fb0c86b7705"}, + {file = "uvloop-0.22.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1cdf5192ab3e674ca26da2eada35b288d2fa49fdd0f357a19f0e7c4e7d5077c8"}, + {file = "uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d"}, + {file = "uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e"}, + {file = "uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e"}, + {file = "uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad"}, + {file = "uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142"}, + {file = "uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74"}, + {file = "uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35"}, + {file = "uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25"}, + {file = "uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6"}, + {file = "uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079"}, + {file = "uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289"}, + {file = "uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3"}, + {file = "uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c"}, + {file = "uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21"}, + {file = "uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88"}, + {file = "uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e"}, + {file = "uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f"}, +] + +[[package]] +name = "virtualenv" +version = "20.39.1" +summary = "" +dependencies = [ + "distlib", + "filelock", + "platformdirs", + "typing-extensions; python_full_version < \"3.11\"", +] +files = [ + {file = "virtualenv-20.39.1-py3-none-any.whl", hash = "sha256:a00332e0b089ba64edefbf94ef34e6db33f45fe5184df0652cf0b754dcd36190"}, + {file = "virtualenv-20.39.1.tar.gz", hash = "sha256:c551ea1072d7717a273dd9a4a0adad8f45571af134b0f63a12430e85f6ac1c08"}, +] + +[[package]] +name = "watchfiles" +version = "1.2.0" +summary = "" +dependencies = [ + "anyio", +] +files = [ + {file = "watchfiles-1.2.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:bb68bf4df85abebe5efddc53cf2075520f243a59868d9b3973278b23e76962a9"}, + {file = "watchfiles-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c16cb06dd17d43b9d185094268459eac92c9538356f050e55b54e82cf700e1d4"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77a0feab9af4c021c581f695258c642b3d10c5fd4c676e33a0d8606425d82631"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a16ffe19bf5cf9f5edaa1ad1dd830c5a816e8feec430c522302ab55483a4b994"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:204f299afcbd65918ab78dbc52626b0ae45e9d8cef403fdbf33ecf9e40eac66e"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11743adfa510bfffebe97659fb280182b5c9b238708f667e866f308c3430dc19"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb72919d93e3a16fc451d3aa3d4b1698423daca1b382d3d959c9ac51297c12a8"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62f042afde2dde21ec1d2c1a74361e804673df86f51e418a999c9acfe671b07"}, + {file = "watchfiles-1.2.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:027ae72bfdfd254862065d8b3e2a815c6ab9b1853ce41e6648ece84afd34a551"}, + {file = "watchfiles-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e1cfd51e97e13ff3bd047c140764d277fc9b95b7cb5da59e46a47d167adab310"}, + {file = "watchfiles-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:24b2405c0a46738dd9e1cf7135aa5dbdb9d42d024628651b3b13d5117e99f8df"}, + {file = "watchfiles-1.2.0-cp310-cp310-win32.whl", hash = "sha256:8c520725602756229f045b032a1ff33d7ef0f7404189d62f6c2438cb6d8ef6a1"}, + {file = "watchfiles-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:03b14855c6f35539e2d95c442ae9530a75762f1e26567152b9ed05f96534a74d"}, + {file = "watchfiles-1.2.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:704fd259e332e01f9b9c178f4bce9e49027e5587cc2600eeeaf8e76e1c846201"}, + {file = "watchfiles-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6543cf55d170003296d185c0af981f3e1311564907e1f4e08671fc7693a890a5"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d8c2394a065ca86f5d2910ff263ae67c127e1376ccc4f9fc35c71db879f80a"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:772b80df316480d894a0e3165fdd19cf77f5d17f9a787f94029465ad0e3529d1"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d158cd89df6053823533e06fb1d73c549133bff5f0396170c0e53d9559340717"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d516b3283a758e087841aedb8031549fb41ced08f3db10aa6d2bf32dc042525b"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53b2290c92e0506d102cd448fbc610d87079553f86caa39d67440856a8b8bba5"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a711b51aec4370d0dcda5b6c09463206f133a5759341d7744b953a7b62e1100e"}, + {file = "watchfiles-1.2.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:e2ca07fa7d89195ec0865d3d285666286740bfa83d83e5cee204043a31ecc165"}, + {file = "watchfiles-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e0618518f282c4ebff60f5e5b1247b6d91bb8b9f4476947563a1e74acc66f3c6"}, + {file = "watchfiles-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d191c054d0715c3c95c99df9b8dbf6fd096d8c1e021e8f212e1bd8bc444ccb5"}, + {file = "watchfiles-1.2.0-cp311-cp311-win32.whl", hash = "sha256:9342472aff9b093c5acd4f6d8f70ae0937964ab56542502bcf5579782da69ae8"}, + {file = "watchfiles-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbd6c97045dad81227c8d040173da044c1de08de64a5ea8b555da4aee1d5fa22"}, + {file = "watchfiles-1.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:57a2d9fa4fb4c2ecae57b13dfff2c7ab53e21a2ba674fe9f05506680fcdcc0d7"}, + {file = "watchfiles-1.2.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bc13eb17538be00c874699dc0abe4ee2bc8d50bb1166a6b9e175ef3fd7eb8f26"}, + {file = "watchfiles-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d95ddc1eb6914154253d239089900813f6a767e174b8e6a50e7fdacb7e4236c"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f70d8b291ef6e88d19b1f297a6905ddb978888d9272b0d05e6f53309856bcfc"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56d8641cf834c2836922899105bd3ce3d0dfc69291d52edf0b4d0436829b34c0"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2581a94056e55d7d0a31a823ea92bf73749c489ca2285bfdc0fbe6b2bb49d50c"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41bc1199f7523b3f82843c88cbb979180c949caef0342cf90968f178e5d49b01"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7571e4464cb6e434958f867f7f730b8ab0b75e3f8e5eac0499168486ab3c33a8"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53a384f76b631c3ae5334ce6a52f0baa3a911eb94a4eac7f160079868b716d5"}, + {file = "watchfiles-1.2.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d20029a60a71a052a24c4db7673bc4de39ab89adbaccbfb5d67987c5d73f424d"}, + {file = "watchfiles-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2cb93af48550faf1cea04c303107c8b75833de7013e57ce27d3b8d21d8d0f58c"}, + {file = "watchfiles-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2995c176de7692b86a2e4c58d9ec718f753150a979cb4a754e2b4ffa38e70906"}, + {file = "watchfiles-1.2.0-cp312-cp312-win32.whl", hash = "sha256:7a2cffd17d27d2ecbb310c2b1d8174f222a5495b1a721894afa88ec11e25b898"}, + {file = "watchfiles-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:f155b3a1b2a5fc89cdc70d47ee5d54e3b75e88efa34982028a35daef9ba00379"}, + {file = "watchfiles-1.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:8fa585ede612ee9f9e91b18bebf9ba11b9ae29a4e3a0d0cf6fca3e382133f0d5"}, + {file = "watchfiles-1.2.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98"}, + {file = "watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f34e26a19f91f710c08e0183429f0d1d15df734e6bc78c31e77b9ea9c433658"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4e77f6a55f858504069abd35d336a637555c09bca453dde1ee1e5ada8a6a1fb"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0cb4d80e212f116474a545c21c912b445f16bb0cef9e6a73a498164223e14e2f"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b974946a10af379d425e2eef5b62f5c6ebeaccf91d45eaad6f5b27ecd4f91aa0"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86bc13c25a8d1fcd70b51d0ce7c9b65e90de5666fcbfd3e34957cc73ee19aeb5"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71"}, + {file = "watchfiles-1.2.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:c525543d91961c6955b2636b308569e84a1d1c5f5f2932041ab9ef46422f43e3"}, + {file = "watchfiles-1.2.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a204794696ffb8f9b10fba6f7cb5216d42f3b2b71860ccac6b6e42f5f10973b0"}, + {file = "watchfiles-1.2.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:10d86db20695afe7997ac9e1717637d6714a8d0220458c33f3d2061f54cec427"}, + {file = "watchfiles-1.2.0-cp313-cp313-win32.whl", hash = "sha256:eb283ee99e21ad6443c8cdb06ac5b34b1308c329cbdf03fa02b445363714c799"}, + {file = "watchfiles-1.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9"}, + {file = "watchfiles-1.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:3651aa7058595e9cfb75d35dd5ada2bf9f48a5b8a0f3562821d3e210c507e077"}, + {file = "watchfiles-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:faea288b6f0ab1902ef08f4ca6de005dccf856c4e0c4f21b8c5fce02d90a1b08"}, + {file = "watchfiles-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fff610d7bb2256a317bb1e96f0d7862c7aa8076733ee5df0fd41bbe76a24a4f4"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b141a4891c995a039cd89e9a49e62df1dc8a559a5d1a6e4c7106d16c12777a55"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f22943b7770483f6ea0721c6b11d022947a98eb0acae14694de034f4d0d38925"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1bc6195825b7dcd217968bb1f801a60fd4c16e8eeab5bedc7fe917d7d5995ab4"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4a4b147f5dca2a5d325a06a832fb43f345751adfbc63204aec30e0d9ca965a2"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4543579a9bdb0c9560039b4ffddbdb39545707659fbc430ce4c10f3f68d557f9"}, + {file = "watchfiles-1.2.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:20aa0e708b920bde876a4aa82dc7dd6ebea228a63a67cda6632c2fc87b787efa"}, + {file = "watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:d413349d565dab74297f2a63e84a097936be69bf8f3b3801f27f380e32040f44"}, + {file = "watchfiles-1.2.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f28b2725eb8cce327b9b3ab02415c853011dc55c95832fe90de6bc56f5315f72"}, + {file = "watchfiles-1.2.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:b8c8358484d5fa12ef34f05b7f4168eaf1932f408725ff6d023c33ec17bd79d4"}, + {file = "watchfiles-1.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f04b092229ad2c50126dd3c922c8822e51e605993764a33058d4a791ab42281"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a7ce236284f002a156f70add88efe5c70879cccbb658be0822c54b1306fc09d"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b9909cc2b48468b575eefa944919e1fe8a36c5849d5c7c168f80a8c1db69398e"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a37faaed405c67e28e6be45a1fa4f206ef5a2860f27c237db9fa30704c38242"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9649193aa27bd9ff2e80ff29bfaa93085496c7a3a377592823cc58b77ee88add"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e4ff8e37f99cf1da89e255e07c9c4b37c214038c4283707bdec308cb1b0ea1f"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:054dc20fd2e3132b4c3883b4a00d72fd6e1f56fdaf89fccd12e8057d74cd74d7"}, + {file = "watchfiles-1.2.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:e140ed30ebde76796b686e67c182cff10ea2fbab186fafd1560f74bb5a473a6e"}, + {file = "watchfiles-1.2.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:bb7e52ecf68ba46d22df23467b87cffeb2146908aa523ebfe803019618cfda06"}, + {file = "watchfiles-1.2.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23282a321c8baf9b3a3c4afff673f9fe65eb7fdc2338d765ccad9d3d1916a5ba"}, + {file = "watchfiles-1.2.0-cp314-cp314-win32.whl", hash = "sha256:c0db965c5f79aa49fe672d297cf1febc5ad149b658594944f49a54a2b96270a7"}, + {file = "watchfiles-1.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:71283b39fd17e5408eb123bd37aeecfd9d54c81fc184421943208aadb879d103"}, + {file = "watchfiles-1.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:c5c19526f4e54a00f2666a6c0e9e40d582c09e865055ea7378bf0009aab857b3"}, + {file = "watchfiles-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:d73a585accffa5ae39c17264c36ec3166d2fad7000c780f5ef83b2722afb9dd2"}, + {file = "watchfiles-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ae99b14c5f21e026e0e9d96f40e07d8570ebee6cafd9d8fc318354606daa7a28"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4429f3b105524a10b72c3a819b091c495d2811d419c1e1e8df773a5a5974f831"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d818978d06062d9b22c4fab2ebe44cf5213d42dc8e62bda8c2760cfa2eeb33"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9f732dc58b2dbe69e464ccf8fff7a03b0dd0be439da4c0720d3558527d3d6b4"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f200104103feb097de4cab8fe4f5dd18a2026934c7dea98c55a2f5fd6d5a33b"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63ac26eefbf4af1741247d6fb68b11c49a25b2f7413fbd318a83a12aaa9cf666"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c4997d4e4a55f0d02b6cde327322daf3a0400e5df6c6b15948994bf72497925"}, + {file = "watchfiles-1.2.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:4c887eba18b7945ac73067a8b4a66f21cd46c2539b2bc68588f7be6c7eb6d26b"}, + {file = "watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:3416ff151bb6b5a8d8d11664974fbef4d9305b9b2957839ab5a270468fd8df30"}, + {file = "watchfiles-1.2.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:0e831a271c035d89789cffc386b6aa1375f39f1cd25eb7ca0997e4970d152fc5"}, + {file = "watchfiles-1.2.0-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:37a6721cdf3f65dbb13aa9503510ccb4451603ac837e44d265d7992a597e1374"}, + {file = "watchfiles-1.2.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:2b37d10b5a63bd4d87e18472d80fa525bd670586fae62e5dd580452764879b65"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a105bc2283f67e8fbec74253ec2d94925de92ed72c0393f1206bf326b7b7b69"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5327989a465505f05cfe06f04fa9d0c2fd5432bb243e10e6f012b1bdca3c8579"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecb47f183a8025b2aa18b546725c3657e542112ae9c0613a2af79b4fa8d04ad7"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8520a4ab0e37f770afc34459c4f8f7019e153f9124dc101c15538365875d1ab2"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71cd71740ed2c15211ebb237ced4e39a1cdf6f80566e5fe95428da1626f4fde6"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f88af53d6ddaf72179ef613ddc905e6f4785f712b49b80b3bef9f3525e6194b4"}, + {file = "watchfiles-1.2.0-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:cee9d5efd929efdac5f7e58f72b3376f676b64050a91c5b99a7094c5b2317488"}, + {file = "watchfiles-1.2.0-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b718bf356bbc15e559bd8ef41782b573b8ae0e3f177ab244b440568d7ea02cfb"}, + {file = "watchfiles-1.2.0-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:922c0e019fe68b3ae392965a766b02a71ba1168c932cebc3733cd52c5fe5b377"}, + {file = "watchfiles-1.2.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:4674d49eb94706dfe666c069fc0a1b646ffcf920473492e209f6d5f60d3f0cc2"}, + {file = "watchfiles-1.2.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:094b9b70103d4e963499bdea001ee3c2697b144cd9ae6218a62c0f89ec9e31db"}, + {file = "watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0ef001f8c25ad0fa9529f914c1600647ecd0f542d11c19b7894768c67b6acb7"}, + {file = "watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0"}, + {file = "watchfiles-1.2.0.tar.gz", hash = "sha256:c995fba777f1ea992f090f9236e9284cf7a5d1a0130dd5a3d82c598cacd76838"}, +] + +[[package]] +name = "wcwidth" +version = "0.7.0" +summary = "" +files = [ + {file = "wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2"}, + {file = "wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0"}, +] + +[[package]] +name = "websockets" +version = "16.0" +summary = "" +files = [ + {file = "websockets-16.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04cdd5d2d1dacbad0a7bf36ccbcd3ccd5a30ee188f2560b7a62a30d14107b31a"}, + {file = "websockets-16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8ff32bb86522a9e5e31439a58addbb0166f0204d64066fb955265c4e214160f0"}, + {file = "websockets-16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:583b7c42688636f930688d712885cf1531326ee05effd982028212ccc13e5957"}, + {file = "websockets-16.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7d837379b647c0c4c2355c2499723f82f1635fd2c26510e1f587d89bc2199e72"}, + {file = "websockets-16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df57afc692e517a85e65b72e165356ed1df12386ecb879ad5693be08fac65dde"}, + {file = "websockets-16.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b9f1e0d69bc60a4a87349d50c09a037a2607918746f07de04df9e43252c77a3"}, + {file = "websockets-16.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:335c23addf3d5e6a8633f9f8eda77efad001671e80b95c491dd0924587ece0b3"}, + {file = "websockets-16.0-cp310-cp310-win32.whl", hash = "sha256:37b31c1623c6605e4c00d466c9d633f9b812ea430c11c8a278774a1fde1acfa9"}, + {file = "websockets-16.0-cp310-cp310-win_amd64.whl", hash = "sha256:8e1dab317b6e77424356e11e99a432b7cb2f3ec8c5ab4dabbcee6add48f72b35"}, + {file = "websockets-16.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:31a52addea25187bde0797a97d6fc3d2f92b6f72a9370792d65a6e84615ac8a8"}, + {file = "websockets-16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:417b28978cdccab24f46400586d128366313e8a96312e4b9362a4af504f3bbad"}, + {file = "websockets-16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:af80d74d4edfa3cb9ed973a0a5ba2b2a549371f8a741e0800cb07becdd20f23d"}, + {file = "websockets-16.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:08d7af67b64d29823fed316505a89b86705f2b7981c07848fb5e3ea3020c1abe"}, + {file = "websockets-16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be95cfb0a4dae143eaed2bcba8ac23f4892d8971311f1b06f3c6b78952ee70b"}, + {file = "websockets-16.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d6297ce39ce5c2e6feb13c1a996a2ded3b6832155fcfc920265c76f24c7cceb5"}, + {file = "websockets-16.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1c1b30e4f497b0b354057f3467f56244c603a79c0d1dafce1d16c283c25f6e64"}, + {file = "websockets-16.0-cp311-cp311-win32.whl", hash = "sha256:5f451484aeb5cafee1ccf789b1b66f535409d038c56966d6101740c1614b86c6"}, + {file = "websockets-16.0-cp311-cp311-win_amd64.whl", hash = "sha256:8d7f0659570eefb578dacde98e24fb60af35350193e4f56e11190787bee77dac"}, + {file = "websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00"}, + {file = "websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79"}, + {file = "websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39"}, + {file = "websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c"}, + {file = "websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f"}, + {file = "websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1"}, + {file = "websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2"}, + {file = "websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89"}, + {file = "websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea"}, + {file = "websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9"}, + {file = "websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230"}, + {file = "websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c"}, + {file = "websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5"}, + {file = "websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82"}, + {file = "websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8"}, + {file = "websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f"}, + {file = "websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a"}, + {file = "websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156"}, + {file = "websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0"}, + {file = "websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904"}, + {file = "websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4"}, + {file = "websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e"}, + {file = "websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4"}, + {file = "websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1"}, + {file = "websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3"}, + {file = "websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8"}, + {file = "websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d"}, + {file = "websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244"}, + {file = "websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e"}, + {file = "websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641"}, + {file = "websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8"}, + {file = "websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e"}, + {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944"}, + {file = "websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206"}, + {file = "websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6"}, + {file = "websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd"}, + {file = "websockets-16.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:349f83cd6c9a415428ee1005cadb5c2c56f4389bc06a9af16103c3bc3dcc8b7d"}, + {file = "websockets-16.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:4a1aba3340a8dca8db6eb5a7986157f52eb9e436b74813764241981ca4888f03"}, + {file = "websockets-16.0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f4a32d1bd841d4bcbffdcb3d2ce50c09c3909fbead375ab28d0181af89fd04da"}, + {file = "websockets-16.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0298d07ee155e2e9fda5be8a9042200dd2e3bb0b8a38482156576f863a9d457c"}, + {file = "websockets-16.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a653aea902e0324b52f1613332ddf50b00c06fdaf7e92624fbf8c77c78fa5767"}, + {file = "websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec"}, + {file = "websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5"}, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +summary = "" +files = [ + {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, + {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, +] + +[[package]] +name = "wmi" +version = "1.5.1" +summary = "" +dependencies = [ + "pywin32", +] +files = [ + {file = "WMI-1.5.1-py2.py3-none-any.whl", hash = "sha256:1d6b085e5c445141c475476000b661f60fff1aaa19f76bf82b7abb92e0ff4942"}, + {file = "WMI-1.5.1.tar.gz", hash = "sha256:b6a6be5711b1b6c8d55bda7a8befd75c48c12b770b9d227d31c1737dbf0d40a6"}, +] diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 60a31cc..0000000 --- a/poetry.lock +++ /dev/null @@ -1,1820 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "anyio" -version = "3.7.1" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anyio-3.7.1-py3-none-any.whl", hash = "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5"}, - {file = "anyio-3.7.1.tar.gz", hash = "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780"}, -] - -[package.dependencies] -exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" - -[package.extras] -doc = ["Sphinx", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-jquery"] -test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (<0.22)"] - -[[package]] -name = "apscheduler" -version = "3.10.4" -description = "In-process task scheduler with Cron-like capabilities" -optional = false -python-versions = ">=3.6" -files = [ - {file = "APScheduler-3.10.4-py3-none-any.whl", hash = "sha256:fb91e8a768632a4756a585f79ec834e0e27aad5860bac7eaa523d9ccefd87661"}, - {file = "APScheduler-3.10.4.tar.gz", hash = "sha256:e6df071b27d9be898e486bc7940a7be50b4af2e9da7c08f0744a96d4bd4cef4a"}, -] - -[package.dependencies] -pytz = "*" -six = ">=1.4.0" -tzlocal = ">=2.0,<3.dev0 || >=4.dev0" - -[package.extras] -doc = ["sphinx", "sphinx-rtd-theme"] -gevent = ["gevent"] -mongodb = ["pymongo (>=3.0)"] -redis = ["redis (>=3.0)"] -rethinkdb = ["rethinkdb (>=2.4.0)"] -sqlalchemy = ["sqlalchemy (>=1.4)"] -testing = ["pytest", "pytest-asyncio", "pytest-cov", "pytest-tornado5"] -tornado = ["tornado (>=4.3)"] -twisted = ["twisted"] -zookeeper = ["kazoo"] - -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] - -[[package]] -name = "babel" -version = "2.16.0" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.8" -files = [ - {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"}, - {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"}, -] - -[package.dependencies] -pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} - -[package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] - -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] - -[package.extras] -tzdata = ["tzdata"] - -[[package]] -name = "bcrypt" -version = "4.2.0" -description = "Modern password hashing for your software and your servers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "bcrypt-4.2.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:096a15d26ed6ce37a14c1ac1e48119660f21b24cba457f160a4b830f3fe6b5cb"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c02d944ca89d9b1922ceb8a46460dd17df1ba37ab66feac4870f6862a1533c00"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d84cf6d877918620b687b8fd1bf7781d11e8a0998f576c7aa939776b512b98d"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:1bb429fedbe0249465cdd85a58e8376f31bb315e484f16e68ca4c786dcc04291"}, - {file = "bcrypt-4.2.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:655ea221910bcac76ea08aaa76df427ef8625f92e55a8ee44fbf7753dbabb328"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:1ee38e858bf5d0287c39b7a1fc59eec64bbf880c7d504d3a06a96c16e14058e7"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0da52759f7f30e83f1e30a888d9163a81353ef224d82dc58eb5bb52efcabc399"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3698393a1b1f1fd5714524193849d0c6d524d33523acca37cd28f02899285060"}, - {file = "bcrypt-4.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:762a2c5fb35f89606a9fde5e51392dad0cd1ab7ae64149a8b935fe8d79dd5ed7"}, - {file = "bcrypt-4.2.0-cp37-abi3-win32.whl", hash = "sha256:5a1e8aa9b28ae28020a3ac4b053117fb51c57a010b9f969603ed885f23841458"}, - {file = "bcrypt-4.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:8f6ede91359e5df88d1f5c1ef47428a4420136f3ce97763e31b86dd8280fbdf5"}, - {file = "bcrypt-4.2.0-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:c52aac18ea1f4a4f65963ea4f9530c306b56ccd0c6f8c8da0c06976e34a6e841"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3bbbfb2734f0e4f37c5136130405332640a1e46e6b23e000eeff2ba8d005da68"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3413bd60460f76097ee2e0a493ccebe4a7601918219c02f503984f0a7ee0aebe"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8d7bb9c42801035e61c109c345a28ed7e84426ae4865511eb82e913df18f58c2"}, - {file = "bcrypt-4.2.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d3a6d28cb2305b43feac298774b997e372e56c7c7afd90a12b3dc49b189151c"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9c1c4ad86351339c5f320ca372dfba6cb6beb25e8efc659bedd918d921956bae"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:27fe0f57bb5573104b5a6de5e4153c60814c711b29364c10a75a54bb6d7ff48d"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8ac68872c82f1add6a20bd489870c71b00ebacd2e9134a8aa3f98a0052ab4b0e"}, - {file = "bcrypt-4.2.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:cb2a8ec2bc07d3553ccebf0746bbf3d19426d1c6d1adbd4fa48925f66af7b9e8"}, - {file = "bcrypt-4.2.0-cp39-abi3-win32.whl", hash = "sha256:77800b7147c9dc905db1cba26abe31e504d8247ac73580b4aa179f98e6608f34"}, - {file = "bcrypt-4.2.0-cp39-abi3-win_amd64.whl", hash = "sha256:61ed14326ee023917ecd093ee6ef422a72f3aec6f07e21ea5f10622b735538a9"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:39e1d30c7233cfc54f5c3f2c825156fe044efdd3e0b9d309512cc514a263ec2a"}, - {file = "bcrypt-4.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f4f4acf526fcd1c34e7ce851147deedd4e26e6402369304220250598b26448db"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:1ff39b78a52cf03fdf902635e4c81e544714861ba3f0efc56558979dd4f09170"}, - {file = "bcrypt-4.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:373db9abe198e8e2c70d12b479464e0d5092cc122b20ec504097b5f2297ed184"}, - {file = "bcrypt-4.2.0.tar.gz", hash = "sha256:cf69eaf5185fd58f268f805b505ce31f9b9fc2d64b376642164e9244540c1221"}, -] - -[package.extras] -tests = ["pytest (>=3.2.1,!=3.3.0)"] -typecheck = ["mypy"] - -[[package]] -name = "binaryornot" -version = "0.4.4" -description = "Ultra-lightweight pure Python package to check if a file is binary or text." -optional = false -python-versions = "*" -files = [ - {file = "binaryornot-0.4.4-py2.py3-none-any.whl", hash = "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"}, - {file = "binaryornot-0.4.4.tar.gz", hash = "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061"}, -] - -[package.dependencies] -chardet = ">=3.0.2" - -[[package]] -name = "black" -version = "23.12.1" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.8" -files = [ - {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, - {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, - {file = "black-23.12.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a920b569dc6b3472513ba6ddea21f440d4b4c699494d2e972a1753cdc25df7b0"}, - {file = "black-23.12.1-cp310-cp310-win_amd64.whl", hash = "sha256:3fa4be75ef2a6b96ea8d92b1587dd8cb3a35c7e3d51f0738ced0781c3aa3a5a3"}, - {file = "black-23.12.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8d4df77958a622f9b5a4c96edb4b8c0034f8434032ab11077ec6c56ae9f384ba"}, - {file = "black-23.12.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:602cfb1196dc692424c70b6507593a2b29aac0547c1be9a1d1365f0d964c353b"}, - {file = "black-23.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c4352800f14be5b4864016882cdba10755bd50805c95f728011bcb47a4afd59"}, - {file = "black-23.12.1-cp311-cp311-win_amd64.whl", hash = "sha256:0808494f2b2df923ffc5723ed3c7b096bd76341f6213989759287611e9837d50"}, - {file = "black-23.12.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:25e57fd232a6d6ff3f4478a6fd0580838e47c93c83eaf1ccc92d4faf27112c4e"}, - {file = "black-23.12.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2d9e13db441c509a3763a7a3d9a49ccc1b4e974a47be4e08ade2a228876500ec"}, - {file = "black-23.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bd9c210f8b109b1762ec9fd36592fdd528485aadb3f5849b2740ef17e674e"}, - {file = "black-23.12.1-cp312-cp312-win_amd64.whl", hash = "sha256:ae76c22bde5cbb6bfd211ec343ded2163bba7883c7bc77f6b756a1049436fbb9"}, - {file = "black-23.12.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1fa88a0f74e50e4487477bc0bb900c6781dbddfdfa32691e780bf854c3b4a47f"}, - {file = "black-23.12.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d6a9668e45ad99d2f8ec70d5c8c04ef4f32f648ef39048d010b0689832ec6d"}, - {file = "black-23.12.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b18fb2ae6c4bb63eebe5be6bd869ba2f14fd0259bda7d18a46b764d8fb86298a"}, - {file = "black-23.12.1-cp38-cp38-win_amd64.whl", hash = "sha256:c04b6d9d20e9c13f43eee8ea87d44156b8505ca8a3c878773f68b4e4812a421e"}, - {file = "black-23.12.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e1b38b3135fd4c025c28c55ddfc236b05af657828a8a6abe5deec419a0b7055"}, - {file = "black-23.12.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4f0031eaa7b921db76decd73636ef3a12c942ed367d8c3841a0739412b260a54"}, - {file = "black-23.12.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97e56155c6b737854e60a9ab1c598ff2533d57e7506d97af5481141671abf3ea"}, - {file = "black-23.12.1-cp39-cp39-win_amd64.whl", hash = "sha256:dd15245c8b68fe2b6bd0f32c1556509d11bb33aec9b5d0866dd8e2ed3dba09c2"}, - {file = "black-23.12.1-py3-none-any.whl", hash = "sha256:78baad24af0f033958cad29731e27363183e140962595def56423e626f4bee3e"}, - {file = "black-23.12.1.tar.gz", hash = "sha256:4ce3ef14ebe8d9509188014d96af1c456a910d5b5cbf434a09fef7e024b3d0d5"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "cashews" -version = "6.4.0" -description = "cache tools with async power" -optional = false -python-versions = ">=3.8" -files = [ - {file = "cashews-6.4.0-py3-none-any.whl", hash = "sha256:6b7121a0629a17aa72d22bf4007462a9fbcdcd418b8ec1083f2806950c265e58"}, - {file = "cashews-6.4.0.tar.gz", hash = "sha256:0f5ec89b4e8d2944e9403c5fc24fb2947003d279e338de40f2fd3ebc9145c4e3"}, -] - -[package.dependencies] -typing-extensions = {version = "*", markers = "python_version == \"3.8\""} - -[package.extras] -dill = ["dill"] -diskcache = ["diskcache (>=5.0.0)"] -lint = ["mypy (>=1.5.0)", "types-redis"] -redis = ["redis (>=4.3.1,!=5.0.1)"] -speedup = ["bitarray (<3.0.0)", "hiredis", "xxhash (<4.0.0)"] -tests = ["hypothesis", "pytest", "pytest-asyncio (==0.23.3)"] - -[[package]] -name = "certifi" -version = "2024.8.30" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, -] - -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "chardet" -version = "5.2.0" -description = "Universal encoding detector for Python 3" -optional = false -python-versions = ">=3.7" -files = [ - {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, - {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "cookiecutter" -version = "2.6.0" -description = "A command-line utility that creates projects from project templates, e.g. creating a Python package project from a Python package project template." -optional = false -python-versions = ">=3.7" -files = [ - {file = "cookiecutter-2.6.0-py3-none-any.whl", hash = "sha256:a54a8e37995e4ed963b3e82831072d1ad4b005af736bb17b99c2cbd9d41b6e2d"}, - {file = "cookiecutter-2.6.0.tar.gz", hash = "sha256:db21f8169ea4f4fdc2408d48ca44859349de2647fbe494a9d6c3edfc0542c21c"}, -] - -[package.dependencies] -arrow = "*" -binaryornot = ">=0.4.4" -click = ">=7.0,<9.0.0" -Jinja2 = ">=2.7,<4.0.0" -python-slugify = ">=4.0.0" -pyyaml = ">=5.3.1" -requests = ">=2.23.0" -rich = "*" - -[[package]] -name = "distlib" -version = "0.3.8" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.2" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, - {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.95.2" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.7" -files = [ - {file = "fastapi-0.95.2-py3-none-any.whl", hash = "sha256:d374dbc4ef2ad9b803899bd3360d34c534adc574546e25314ab72c0c4411749f"}, - {file = "fastapi-0.95.2.tar.gz", hash = "sha256:4d9d3e8c71c73f11874bcf5e33626258d143252e329a01002f767306c64fb982"}, -] - -[package.dependencies] -pydantic = ">=1.6.2,<1.7 || >1.7,<1.7.1 || >1.7.1,<1.7.2 || >1.7.2,<1.7.3 || >1.7.3,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0" -starlette = ">=0.27.0,<0.28.0" - -[package.extras] -all = ["email-validator (>=1.1.1)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] -dev = ["pre-commit (>=2.17.0,<3.0.0)", "ruff (==0.0.138)", "uvicorn[standard] (>=0.12.0,<0.21.0)"] -doc = ["mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-markdownextradata-plugin (>=0.1.7,<0.3.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pyyaml (>=5.3.1,<7.0.0)", "typer-cli (>=0.0.13,<0.0.14)", "typer[all] (>=0.6.1,<0.8.0)"] -test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==23.1.0)", "coverage[toml] (>=6.5.0,<8.0)", "databases[sqlite] (>=0.3.2,<0.7.0)", "email-validator (>=1.1.1,<2.0.0)", "flask (>=1.1.2,<3.0.0)", "httpx (>=0.23.0,<0.24.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.982)", "orjson (>=3.2.1,<4.0.0)", "passlib[bcrypt] (>=1.7.2,<2.0.0)", "peewee (>=3.13.3,<4.0.0)", "pytest (>=7.1.3,<8.0.0)", "python-jose[cryptography] (>=3.3.0,<4.0.0)", "python-multipart (>=0.0.5,<0.0.7)", "pyyaml (>=5.3.1,<7.0.0)", "ruff (==0.0.138)", "sqlalchemy (>=1.3.18,<1.4.43)", "types-orjson (==3.6.2)", "types-ujson (==5.7.0.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0)"] - -[[package]] -name = "filelock" -version = "3.16.1" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, - {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] - -[[package]] -name = "flake8" -version = "6.1.0" -description = "the modular source code checker: pep8 pyflakes and co" -optional = false -python-versions = ">=3.8.1" -files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, -] - -[package.dependencies] -mccabe = ">=0.7.0,<0.8.0" -pycodestyle = ">=2.11.0,<2.12.0" -pyflakes = ">=3.1.0,<3.2.0" - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "0.17.3" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpcore-0.17.3-py3-none-any.whl", hash = "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87"}, - {file = "httpcore-0.17.3.tar.gz", hash = "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888"}, -] - -[package.dependencies] -anyio = ">=3.0,<5.0" -certifi = "*" -h11 = ">=0.13,<0.15" -sniffio = "==1.*" - -[package.extras] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "httptools" -version = "0.6.1" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, - {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, - {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, - {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, - {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, - {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, - {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, -] - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - -[[package]] -name = "httpx" -version = "0.24.1" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.7" -files = [ - {file = "httpx-0.24.1-py3-none-any.whl", hash = "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd"}, - {file = "httpx-0.24.1.tar.gz", hash = "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd"}, -] - -[package.dependencies] -certifi = "*" -httpcore = ">=0.15.0,<0.18.0" -idna = "*" -sniffio = "*" -socksio = {version = "==1.*", optional = true, markers = "extra == \"socks\""} - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "identify" -version = "2.6.1" -description = "File identification library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, -] - -[package.extras] -license = ["ukkonen"] - -[[package]] -name = "idna" -version = "3.10" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.6" -files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "importlib-metadata" -version = "8.5.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-8.5.0-py3-none-any.whl", hash = "sha256:45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b"}, - {file = "importlib_metadata-8.5.0.tar.gz", hash = "sha256:71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7"}, -] - -[package.dependencies] -zipp = ">=3.20" - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -perf = ["ipython"] -test = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] -type = ["pytest-mypy"] - -[[package]] -name = "isort" -version = "5.13.2" -description = "A Python utility / library to sort Python imports." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, - {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, -] - -[package.extras] -colors = ["colorama (>=0.4.6)"] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "loguru" -version = "0.7.2" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = ">=3.5" -files = [ - {file = "loguru-0.7.2-py3-none-any.whl", hash = "sha256:003d71e3d3ed35f0f8984898359d65b79e5b21943f78af86aa5491210429b8eb"}, - {file = "loguru-0.7.2.tar.gz", hash = "sha256:e671a53522515f34fd406340ee968cb9ecafbc4b36c679da03c18fd8d0bd51ac"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==7.2.5)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.4.1)", "mypy (==v1.5.1)", "pre-commit (==3.4.0)", "pytest (==6.1.2)", "pytest (==7.4.0)", "pytest-cov (==2.12.1)", "pytest-cov (==4.1.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.0.0)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.3.0)", "tox (==3.27.1)", "tox (==4.11.0)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "markupsafe" -version = "2.1.5" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.7" -files = [ - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, - {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, - {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, - {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, - {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, - {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, - {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, - {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, -] - -[[package]] -name = "mccabe" -version = "0.7.0" -description = "McCabe checker, plugin for flake8" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {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]] -name = "nb-cli" -version = "1.2.9" -description = "CLI for nonebot2" -optional = false -python-versions = ">=3.8, <4.0" -files = [ - {file = "nb-cli-1.2.9.tar.gz", hash = "sha256:6ed42129ff0b59c689da70a86f43a3b3b0ec07ede72014530a0659db690855a6"}, - {file = "nb_cli-1.2.9-py3-none-any.whl", hash = "sha256:0c202c86cf5717357eeae5bfa25c7e2573dc94496606f444b903cfd0d08cadd8"}, -] - -[package.dependencies] -anyio = ">=3.6,<4.0" -cashews = ">=6.0,<7.0" -click = ">=8.1,<9.0" -cookiecutter = ">=2.2,<3.0" -httpx = ">=0.18,<1.0" -importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} -jinja2 = ">=3.0,<4.0" -noneprompt = ">=0.1.9,<1.0.0" -pydantic = ">=1.9,<2.0" -pyfiglet = ">=0.8.post1,<1.0.0" -tomlkit = ">=0.10,<1.0" -typing-extensions = ">=4.4,<5.0" -virtualenv = ">=20.21,<21.0" -watchfiles = ">=0.16,<1.0" -wcwidth = ">=0.2,<1.0" - -[[package]] -name = "nodeenv" -version = "1.9.1" -description = "Node.js virtual environment builder" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, - {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, -] - -[[package]] -name = "nonemoji" -version = "0.1.4" -description = "Simple gitmoji cli written in python" -optional = false -python-versions = ">=3.7.3,<4.0.0" -files = [ - {file = "nonemoji-0.1.4-py3-none-any.whl", hash = "sha256:6e2b22d315bd936df7d004cf55b13fac5d55abd36aba6b37b405da39b6f78269"}, - {file = "nonemoji-0.1.4.tar.gz", hash = "sha256:f7480e1f2f27f0a149da23f371bab0a47dd2cf46674f61798658b3daa7836fc5"}, -] - -[package.dependencies] -noneprompt = ">=0.1.3,<0.2.0" - -[[package]] -name = "noneprompt" -version = "0.1.9" -description = "Prompt toolkit for console interaction" -optional = false -python-versions = ">=3.8,<4.0" -files = [ - {file = "noneprompt-0.1.9-py3-none-any.whl", hash = "sha256:a54f1e6a19a3da2dedf7f365f80420e9ae49326a0ffe60a8a9c7afdee6b6eeb3"}, - {file = "noneprompt-0.1.9.tar.gz", hash = "sha256:338b8bb89a8d22ef35f1dedb3aa7c1b228cf139973bdc43c5ffc3eef64457db9"}, -] - -[package.dependencies] -prompt-toolkit = ">=3.0.19,<4.0.0" - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] - -[[package]] -name = "passlib" -version = "1.7.4" -description = "comprehensive password hashing framework supporting over 30 schemes" -optional = false -python-versions = "*" -files = [ - {file = "passlib-1.7.4-py2.py3-none-any.whl", hash = "sha256:aa6bca462b8d8bda89c70b382f0c298a20b5560af6cbfa2dce410c0a2fb669f1"}, - {file = "passlib-1.7.4.tar.gz", hash = "sha256:defd50f72b65c5402ab2c573830a6978e5f202ad0d984793c8dde2c4152ebe04"}, -] - -[package.extras] -argon2 = ["argon2-cffi (>=18.2.0)"] -bcrypt = ["bcrypt (>=3.1.0)"] -build-docs = ["cloud-sptheme (>=1.10.1)", "sphinx (>=1.6)", "sphinxcontrib-fulltoc (>=1.2.0)"] -totp = ["cryptography"] - -[[package]] -name = "pathlib" -version = "1.0.1" -description = "Object-oriented filesystem paths" -optional = false -python-versions = "*" -files = [ - {file = "pathlib-1.0.1-py3-none-any.whl", hash = "sha256:f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147"}, - {file = "pathlib-1.0.1.tar.gz", hash = "sha256:6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f"}, -] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "platformdirs" -version = "4.3.6" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, - {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, -] - -[package.extras] -docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] -type = ["mypy (>=1.11.2)"] - -[[package]] -name = "pre-commit" -version = "3.5.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pre_commit-3.5.0-py2.py3-none-any.whl", hash = "sha256:841dc9aef25daba9a0238cd27984041fa0467b4199fc4852e27950664919f660"}, - {file = "pre_commit-3.5.0.tar.gz", hash = "sha256:5804465c675b659b0862f07907f96295d490822a450c4c40e747d0b1c6ebcb32"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - -[[package]] -name = "prompt-toolkit" -version = "3.0.47" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psutil" -version = "5.9.8" -description = "Cross-platform lib for process and system monitoring in Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"}, - {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"}, - {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"}, - {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"}, - {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"}, - {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"}, - {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"}, - {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"}, - {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"}, - {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"}, - {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"}, - {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"}, - {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"}, -] - -[package.extras] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "pycodestyle" -version = "2.11.1" -description = "Python style guide checker" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, -] - -[[package]] -name = "pydantic" -version = "1.10.18" -description = "Data validation and settings management using python type hints" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pydantic-1.10.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e405ffcc1254d76bb0e760db101ee8916b620893e6edfbfee563b3c6f7a67c02"}, - {file = "pydantic-1.10.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e306e280ebebc65040034bff1a0a81fd86b2f4f05daac0131f29541cafd80b80"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11d9d9b87b50338b1b7de4ebf34fd29fdb0d219dc07ade29effc74d3d2609c62"}, - {file = "pydantic-1.10.18-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b661ce52c7b5e5f600c0c3c5839e71918346af2ef20062705ae76b5c16914cab"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c20f682defc9ef81cd7eaa485879ab29a86a0ba58acf669a78ed868e72bb89e0"}, - {file = "pydantic-1.10.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c5ae6b7c8483b1e0bf59e5f1843e4fd8fd405e11df7de217ee65b98eb5462861"}, - {file = "pydantic-1.10.18-cp310-cp310-win_amd64.whl", hash = "sha256:74fe19dda960b193b0eb82c1f4d2c8e5e26918d9cda858cbf3f41dd28549cb70"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:72fa46abace0a7743cc697dbb830a41ee84c9db8456e8d77a46d79b537efd7ec"}, - {file = "pydantic-1.10.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef0fe7ad7cbdb5f372463d42e6ed4ca9c443a52ce544472d8842a0576d830da5"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a00e63104346145389b8e8f500bc6a241e729feaf0559b88b8aa513dd2065481"}, - {file = "pydantic-1.10.18-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae6fa2008e1443c46b7b3a5eb03800121868d5ab6bc7cda20b5df3e133cde8b3"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9f463abafdc92635da4b38807f5b9972276be7c8c5121989768549fceb8d2588"}, - {file = "pydantic-1.10.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3445426da503c7e40baccefb2b2989a0c5ce6b163679dd75f55493b460f05a8f"}, - {file = "pydantic-1.10.18-cp311-cp311-win_amd64.whl", hash = "sha256:467a14ee2183bc9c902579bb2f04c3d3dac00eff52e252850509a562255b2a33"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:efbc8a7f9cb5fe26122acba1852d8dcd1e125e723727c59dcd244da7bdaa54f2"}, - {file = "pydantic-1.10.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:24a4a159d0f7a8e26bf6463b0d3d60871d6a52eac5bb6a07a7df85c806f4c048"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b74be007703547dc52e3c37344d130a7bfacca7df112a9e5ceeb840a9ce195c7"}, - {file = "pydantic-1.10.18-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fcb20d4cb355195c75000a49bb4a31d75e4295200df620f454bbc6bdf60ca890"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:46f379b8cb8a3585e3f61bf9ae7d606c70d133943f339d38b76e041ec234953f"}, - {file = "pydantic-1.10.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cbfbca662ed3729204090c4d09ee4beeecc1a7ecba5a159a94b5a4eb24e3759a"}, - {file = "pydantic-1.10.18-cp312-cp312-win_amd64.whl", hash = "sha256:c6d0a9f9eccaf7f438671a64acf654ef0d045466e63f9f68a579e2383b63f357"}, - {file = "pydantic-1.10.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3d5492dbf953d7d849751917e3b2433fb26010d977aa7a0765c37425a4026ff1"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe734914977eed33033b70bfc097e1baaffb589517863955430bf2e0846ac30f"}, - {file = "pydantic-1.10.18-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:15fdbe568beaca9aacfccd5ceadfb5f1a235087a127e8af5e48df9d8a45ae85c"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c3e742f62198c9eb9201781fbebe64533a3bbf6a76a91b8d438d62b813079dbc"}, - {file = "pydantic-1.10.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:19a3bd00b9dafc2cd7250d94d5b578edf7a0bd7daf102617153ff9a8fa37871c"}, - {file = "pydantic-1.10.18-cp37-cp37m-win_amd64.whl", hash = "sha256:2ce3fcf75b2bae99aa31bd4968de0474ebe8c8258a0110903478bd83dfee4e3b"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:335a32d72c51a313b33fa3a9b0fe283503272ef6467910338e123f90925f0f03"}, - {file = "pydantic-1.10.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:34a3613c7edb8c6fa578e58e9abe3c0f5e7430e0fc34a65a415a1683b9c32d9a"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ee4e6ca1d9616797fa2e9c0bfb8815912c7d67aca96f77428e316741082a1b"}, - {file = "pydantic-1.10.18-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:23e8ec1ce4e57b4f441fc91e3c12adba023fedd06868445a5b5f1d48f0ab3682"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:44ae8a3e35a54d2e8fa88ed65e1b08967a9ef8c320819a969bfa09ce5528fafe"}, - {file = "pydantic-1.10.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5389eb3b48a72da28c6e061a247ab224381435256eb541e175798483368fdd3"}, - {file = "pydantic-1.10.18-cp38-cp38-win_amd64.whl", hash = "sha256:069b9c9fc645474d5ea3653788b544a9e0ccd3dca3ad8c900c4c6eac844b4620"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80b982d42515632eb51f60fa1d217dfe0729f008e81a82d1544cc392e0a50ddf"}, - {file = "pydantic-1.10.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:aad8771ec8dbf9139b01b56f66386537c6fe4e76c8f7a47c10261b69ad25c2c9"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941a2eb0a1509bd7f31e355912eb33b698eb0051730b2eaf9e70e2e1589cae1d"}, - {file = "pydantic-1.10.18-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65f7361a09b07915a98efd17fdec23103307a54db2000bb92095457ca758d485"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6951f3f47cb5ca4da536ab161ac0163cab31417d20c54c6de5ddcab8bc813c3f"}, - {file = "pydantic-1.10.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7a4c5eec138a9b52c67f664c7d51d4c7234c5ad65dd8aacd919fb47445a62c86"}, - {file = "pydantic-1.10.18-cp39-cp39-win_amd64.whl", hash = "sha256:49e26c51ca854286bffc22b69787a8d4063a62bf7d83dc21d44d2ff426108518"}, - {file = "pydantic-1.10.18-py3-none-any.whl", hash = "sha256:06a189b81ffc52746ec9c8c007f16e5167c8b0a696e1a726369327e3db7b2a82"}, - {file = "pydantic-1.10.18.tar.gz", hash = "sha256:baebdff1907d1d96a139c25136a9bb7d17e118f133a76a2ef3b845e831e3403a"}, -] - -[package.dependencies] -typing-extensions = ">=4.2.0" - -[package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] - -[[package]] -name = "pyfiglet" -version = "0.8.post1" -description = "Pure-python FIGlet implementation" -optional = false -python-versions = "*" -files = [ - {file = "pyfiglet-0.8.post1-py2.py3-none-any.whl", hash = "sha256:d555bcea17fbeaf70eaefa48bb119352487e629c9b56f30f383e2c62dd67a01c"}, - {file = "pyfiglet-0.8.post1.tar.gz", hash = "sha256:c6c2321755d09267b438ec7b936825a4910fec696292139e664ca8670e103639"}, -] - -[[package]] -name = "pyflakes" -version = "3.1.0" -description = "passive checker of Python programs" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, -] - -[[package]] -name = "pygments" -version = "2.18.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pyjwt" -version = "2.9.0" -description = "JSON Web Token implementation in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, - {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, -] - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "python-slugify" -version = "8.0.4" -description = "A Python slugify application that also handles Unicode" -optional = false -python-versions = ">=3.7" -files = [ - {file = "python-slugify-8.0.4.tar.gz", hash = "sha256:59202371d1d05b54a9e7720c5e038f928f45daaffe41dd10822f3907b937c856"}, - {file = "python_slugify-8.0.4-py2.py3-none-any.whl", hash = "sha256:276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8"}, -] - -[package.dependencies] -text-unidecode = ">=1.3" - -[package.extras] -unidecode = ["Unidecode (>=1.1.1)"] - -[[package]] -name = "pytz" -version = "2024.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, - {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, -] - -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, - {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, - {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, - {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, - {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, - {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, - {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, - {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, - {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, - {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, - {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, - {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, - {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, - {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, - {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, - {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, - {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, - {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, - {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, - {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, - {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, - {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, - {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, - {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, - {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, - {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, - {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, - {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, - {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, - {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, - {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, - {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, -] - -[[package]] -name = "requests" -version = "2.32.3" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -files = [ - {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, - {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "13.8.1" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "rich-13.8.1-py3-none-any.whl", hash = "sha256:1760a3c0848469b97b558fc61c85233e3dafb69c7a071b4d60c38099d3cd4c06"}, - {file = "rich-13.8.1.tar.gz", hash = "sha256:8260cda28e3db6bf04d2d1ef4dbc03ba80a824c88b0e7668a0f23126a424844a"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" -typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "socksio" -version = "1.0.0" -description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." -optional = false -python-versions = ">=3.6" -files = [ - {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, - {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, -] - -[[package]] -name = "starlette" -version = "0.27.0" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.7" -files = [ - {file = "starlette-0.27.0-py3-none-any.whl", hash = "sha256:918416370e846586541235ccd38a474c08b80443ed31c578a418e2209b3eef91"}, - {file = "starlette-0.27.0.tar.gz", hash = "sha256:6a6b0d042acb8d469a01eba54e9cda6cbd24ac602c4cd016723117d6a7e73b75"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] - -[[package]] -name = "text-unidecode" -version = "1.3" -description = "The most basic Text::Unidecode port" -optional = false -python-versions = "*" -files = [ - {file = "text-unidecode-1.3.tar.gz", hash = "sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93"}, - {file = "text_unidecode-1.3-py2.py3-none-any.whl", hash = "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8"}, -] - -[[package]] -name = "tomli" -version = "2.0.1" -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]] -name = "tomlkit" -version = "0.13.2" -description = "Style preserving TOML library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, - {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, -] - -[[package]] -name = "types-python-dateutil" -version = "2.9.0.20240906" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-python-dateutil-2.9.0.20240906.tar.gz", hash = "sha256:9706c3b68284c25adffc47319ecc7947e5bb86b3773f843c73906fd598bc176e"}, - {file = "types_python_dateutil-2.9.0.20240906-py3-none-any.whl", hash = "sha256:27c8cc2d058ccb14946eebcaaa503088f4f6dbc4fb6093d3d456a49aef2753f6"}, -] - -[[package]] -name = "typing-extensions" -version = "4.12.2" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, -] - -[[package]] -name = "tzdata" -version = "2024.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, - {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, -] - -[[package]] -name = "tzlocal" -version = "5.2" -description = "tzinfo object for the local timezone" -optional = false -python-versions = ">=3.8" -files = [ - {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, - {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, -] - -[package.dependencies] -"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} -tzdata = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -devenv = ["check-manifest", "pytest (>=4.3)", "pytest-cov", "pytest-mock (>=3.3)", "zest.releaser"] - -[[package]] -name = "urllib3" -version = "2.2.3" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, - {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.22.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -files = [ - {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"}, - {file = "uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.20.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9ebafa0b96c62881d5cafa02d9da2e44c23f9f0cd829f3a32a6aff771449c996"}, - {file = "uvloop-0.20.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:35968fc697b0527a06e134999eef859b4034b37aebca537daeb598b9d45a137b"}, - {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b16696f10e59d7580979b420eedf6650010a4a9c3bd8113f24a103dfdb770b10"}, - {file = "uvloop-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b04d96188d365151d1af41fa2d23257b674e7ead68cfd61c725a422764062ae"}, - {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94707205efbe809dfa3a0d09c08bef1352f5d3d6612a506f10a319933757c006"}, - {file = "uvloop-0.20.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:89e8d33bb88d7263f74dc57d69f0063e06b5a5ce50bb9a6b32f5fcbe655f9e73"}, - {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e50289c101495e0d1bb0bfcb4a60adde56e32f4449a67216a1ab2750aa84f037"}, - {file = "uvloop-0.20.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e237f9c1e8a00e7d9ddaa288e535dc337a39bcbf679f290aee9d26df9e72bce9"}, - {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:746242cd703dc2b37f9d8b9f173749c15e9a918ddb021575a0205ec29a38d31e"}, - {file = "uvloop-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82edbfd3df39fb3d108fc079ebc461330f7c2e33dbd002d146bf7c445ba6e756"}, - {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80dc1b139516be2077b3e57ce1cb65bfed09149e1d175e0478e7a987863b68f0"}, - {file = "uvloop-0.20.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4f44af67bf39af25db4c1ac27e82e9665717f9c26af2369c404be865c8818dcf"}, - {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4b75f2950ddb6feed85336412b9a0c310a2edbcf4cf931aa5cfe29034829676d"}, - {file = "uvloop-0.20.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:77fbc69c287596880ecec2d4c7a62346bef08b6209749bf6ce8c22bbaca0239e"}, - {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6462c95f48e2d8d4c993a2950cd3d31ab061864d1c226bbf0ee2f1a8f36674b9"}, - {file = "uvloop-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:649c33034979273fa71aa25d0fe120ad1777c551d8c4cd2c0c9851d88fcb13ab"}, - {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a609780e942d43a275a617c0839d85f95c334bad29c4c0918252085113285b5"}, - {file = "uvloop-0.20.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aea15c78e0d9ad6555ed201344ae36db5c63d428818b4b2a42842b3870127c00"}, - {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0e94b221295b5e69de57a1bd4aeb0b3a29f61be6e1b478bb8a69a73377db7ba"}, - {file = "uvloop-0.20.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fee6044b64c965c425b65a4e17719953b96e065c5b7e09b599ff332bb2744bdf"}, - {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:265a99a2ff41a0fd56c19c3838b29bf54d1d177964c300dad388b27e84fd7847"}, - {file = "uvloop-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b10c2956efcecb981bf9cfb8184d27d5d64b9033f917115a960b83f11bfa0d6b"}, - {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e7d61fe8e8d9335fac1bf8d5d82820b4808dd7a43020c149b63a1ada953d48a6"}, - {file = "uvloop-0.20.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2beee18efd33fa6fdb0976e18475a4042cd31c7433c866e8a09ab604c7c22ff2"}, - {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d8c36fdf3e02cec92aed2d44f63565ad1522a499c654f07935c8f9d04db69e95"}, - {file = "uvloop-0.20.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0fac7be202596c7126146660725157d4813aa29a4cc990fe51346f75ff8fde7"}, - {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d0fba61846f294bce41eb44d60d58136090ea2b5b99efd21cbdf4e21927c56a"}, - {file = "uvloop-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95720bae002ac357202e0d866128eb1ac82545bcf0b549b9abe91b5178d9b541"}, - {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:36c530d8fa03bfa7085af54a48f2ca16ab74df3ec7108a46ba82fd8b411a2315"}, - {file = "uvloop-0.20.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e97152983442b499d7a71e44f29baa75b3b02e65d9c44ba53b10338e98dedb66"}, - {file = "uvloop-0.20.0.tar.gz", hash = "sha256:4603ca714a754fc8d9b197e325db25b2ea045385e8a3ad05d3463de725fdf469"}, -] - -[package.extras] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] - -[[package]] -name = "virtualenv" -version = "20.26.5" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.26.5-py3-none-any.whl", hash = "sha256:4f3ac17b81fba3ce3bd6f4ead2749a72da5929c01774948e243db9ba41df4ff6"}, - {file = "virtualenv-20.26.5.tar.gz", hash = "sha256:ce489cac131aa58f4b25e321d6d186171f78e6cb13fafbf32a840cee67733ff4"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - -[package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] - -[[package]] -name = "watchfiles" -version = "0.24.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "watchfiles-0.24.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:083dc77dbdeef09fa44bb0f4d1df571d2e12d8a8f985dccde71ac3ac9ac067a0"}, - {file = "watchfiles-0.24.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e94e98c7cb94cfa6e071d401ea3342767f28eb5a06a58fafdc0d2a4974f4f35c"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82ae557a8c037c42a6ef26c494d0631cacca040934b101d001100ed93d43f361"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:acbfa31e315a8f14fe33e3542cbcafc55703b8f5dcbb7c1eecd30f141df50db3"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b74fdffce9dfcf2dc296dec8743e5b0332d15df19ae464f0e249aa871fc1c571"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:449f43f49c8ddca87c6b3980c9284cab6bd1f5c9d9a2b00012adaaccd5e7decd"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4abf4ad269856618f82dee296ac66b0cd1d71450fc3c98532d93798e73399b7a"}, - {file = "watchfiles-0.24.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f895d785eb6164678ff4bb5cc60c5996b3ee6df3edb28dcdeba86a13ea0465e"}, - {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ae3e208b31be8ce7f4c2c0034f33406dd24fbce3467f77223d10cd86778471c"}, - {file = "watchfiles-0.24.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2efec17819b0046dde35d13fb8ac7a3ad877af41ae4640f4109d9154ed30a188"}, - {file = "watchfiles-0.24.0-cp310-none-win32.whl", hash = "sha256:6bdcfa3cd6fdbdd1a068a52820f46a815401cbc2cb187dd006cb076675e7b735"}, - {file = "watchfiles-0.24.0-cp310-none-win_amd64.whl", hash = "sha256:54ca90a9ae6597ae6dc00e7ed0a040ef723f84ec517d3e7ce13e63e4bc82fa04"}, - {file = "watchfiles-0.24.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:bdcd5538e27f188dd3c804b4a8d5f52a7fc7f87e7fd6b374b8e36a4ca03db428"}, - {file = "watchfiles-0.24.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2dadf8a8014fde6addfd3c379e6ed1a981c8f0a48292d662e27cabfe4239c83c"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6509ed3f467b79d95fc62a98229f79b1a60d1b93f101e1c61d10c95a46a84f43"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8360f7314a070c30e4c976b183d1d8d1585a4a50c5cb603f431cebcbb4f66327"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:316449aefacf40147a9efaf3bd7c9bdd35aaba9ac5d708bd1eb5763c9a02bef5"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73bde715f940bea845a95247ea3e5eb17769ba1010efdc938ffcb967c634fa61"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3770e260b18e7f4e576edca4c0a639f704088602e0bc921c5c2e721e3acb8d15"}, - {file = "watchfiles-0.24.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0fd7248cf533c259e59dc593a60973a73e881162b1a2f73360547132742823"}, - {file = "watchfiles-0.24.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d7a2e3b7f5703ffbd500dabdefcbc9eafeff4b9444bbdd5d83d79eedf8428fab"}, - {file = "watchfiles-0.24.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d831ee0a50946d24a53821819b2327d5751b0c938b12c0653ea5be7dea9c82ec"}, - {file = "watchfiles-0.24.0-cp311-none-win32.whl", hash = "sha256:49d617df841a63b4445790a254013aea2120357ccacbed00253f9c2b5dc24e2d"}, - {file = "watchfiles-0.24.0-cp311-none-win_amd64.whl", hash = "sha256:d3dcb774e3568477275cc76554b5a565024b8ba3a0322f77c246bc7111c5bb9c"}, - {file = "watchfiles-0.24.0-cp311-none-win_arm64.whl", hash = "sha256:9301c689051a4857d5b10777da23fafb8e8e921bcf3abe6448a058d27fb67633"}, - {file = "watchfiles-0.24.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7211b463695d1e995ca3feb38b69227e46dbd03947172585ecb0588f19b0d87a"}, - {file = "watchfiles-0.24.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b8693502d1967b00f2fb82fc1e744df128ba22f530e15b763c8d82baee15370"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdab9555053399318b953a1fe1f586e945bc8d635ce9d05e617fd9fe3a4687d6"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:34e19e56d68b0dad5cff62273107cf5d9fbaf9d75c46277aa5d803b3ef8a9e9b"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41face41f036fee09eba33a5b53a73e9a43d5cb2c53dad8e61fa6c9f91b5a51e"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5148c2f1ea043db13ce9b0c28456e18ecc8f14f41325aa624314095b6aa2e9ea"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e4bd963a935aaf40b625c2499f3f4f6bbd0c3776f6d3bc7c853d04824ff1c9f"}, - {file = "watchfiles-0.24.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c79d7719d027b7a42817c5d96461a99b6a49979c143839fc37aa5748c322f234"}, - {file = "watchfiles-0.24.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:32aa53a9a63b7f01ed32e316e354e81e9da0e6267435c7243bf8ae0f10b428ef"}, - {file = "watchfiles-0.24.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ce72dba6a20e39a0c628258b5c308779b8697f7676c254a845715e2a1039b968"}, - {file = "watchfiles-0.24.0-cp312-none-win32.whl", hash = "sha256:d9018153cf57fc302a2a34cb7564870b859ed9a732d16b41a9b5cb2ebed2d444"}, - {file = "watchfiles-0.24.0-cp312-none-win_amd64.whl", hash = "sha256:551ec3ee2a3ac9cbcf48a4ec76e42c2ef938a7e905a35b42a1267fa4b1645896"}, - {file = "watchfiles-0.24.0-cp312-none-win_arm64.whl", hash = "sha256:b52a65e4ea43c6d149c5f8ddb0bef8d4a1e779b77591a458a893eb416624a418"}, - {file = "watchfiles-0.24.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:3d2e3ab79a1771c530233cadfd277fcc762656d50836c77abb2e5e72b88e3a48"}, - {file = "watchfiles-0.24.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327763da824817b38ad125dcd97595f942d720d32d879f6c4ddf843e3da3fe90"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd82010f8ab451dabe36054a1622870166a67cf3fce894f68895db6f74bbdc94"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d64ba08db72e5dfd5c33be1e1e687d5e4fcce09219e8aee893a4862034081d4e"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1cf1f6dd7825053f3d98f6d33f6464ebdd9ee95acd74ba2c34e183086900a827"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43e3e37c15a8b6fe00c1bce2473cfa8eb3484bbeecf3aefbf259227e487a03df"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:88bcd4d0fe1d8ff43675360a72def210ebad3f3f72cabfeac08d825d2639b4ab"}, - {file = "watchfiles-0.24.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:999928c6434372fde16c8f27143d3e97201160b48a614071261701615a2a156f"}, - {file = "watchfiles-0.24.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:30bbd525c3262fd9f4b1865cb8d88e21161366561cd7c9e1194819e0a33ea86b"}, - {file = "watchfiles-0.24.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:edf71b01dec9f766fb285b73930f95f730bb0943500ba0566ae234b5c1618c18"}, - {file = "watchfiles-0.24.0-cp313-none-win32.whl", hash = "sha256:f4c96283fca3ee09fb044f02156d9570d156698bc3734252175a38f0e8975f07"}, - {file = "watchfiles-0.24.0-cp313-none-win_amd64.whl", hash = "sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366"}, - {file = "watchfiles-0.24.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ee82c98bed9d97cd2f53bdb035e619309a098ea53ce525833e26b93f673bc318"}, - {file = "watchfiles-0.24.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fd92bbaa2ecdb7864b7600dcdb6f2f1db6e0346ed425fbd01085be04c63f0b05"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f83df90191d67af5a831da3a33dd7628b02a95450e168785586ed51e6d28943c"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fca9433a45f18b7c779d2bae7beeec4f740d28b788b117a48368d95a3233ed83"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b995bfa6bf01a9e09b884077a6d37070464b529d8682d7691c2d3b540d357a0c"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed9aba6e01ff6f2e8285e5aa4154e2970068fe0fc0998c4380d0e6278222269b"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5171ef898299c657685306d8e1478a45e9303ddcd8ac5fed5bd52ad4ae0b69b"}, - {file = "watchfiles-0.24.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4933a508d2f78099162da473841c652ad0de892719043d3f07cc83b33dfd9d91"}, - {file = "watchfiles-0.24.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:95cf3b95ea665ab03f5a54765fa41abf0529dbaf372c3b83d91ad2cfa695779b"}, - {file = "watchfiles-0.24.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01def80eb62bd5db99a798d5e1f5f940ca0a05986dcfae21d833af7a46f7ee22"}, - {file = "watchfiles-0.24.0-cp38-none-win32.whl", hash = "sha256:4d28cea3c976499475f5b7a2fec6b3a36208656963c1a856d328aeae056fc5c1"}, - {file = "watchfiles-0.24.0-cp38-none-win_amd64.whl", hash = "sha256:21ab23fdc1208086d99ad3f69c231ba265628014d4aed31d4e8746bd59e88cd1"}, - {file = "watchfiles-0.24.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:b665caeeda58625c3946ad7308fbd88a086ee51ccb706307e5b1fa91556ac886"}, - {file = "watchfiles-0.24.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5c51749f3e4e269231510da426ce4a44beb98db2dce9097225c338f815b05d4f"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b2509f08761f29a0fdad35f7e1638b8ab1adfa2666d41b794090361fb8b855"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a60e2bf9dc6afe7f743e7c9b149d1fdd6dbf35153c78fe3a14ae1a9aee3d98b"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7d9b87c4c55e3ea8881dfcbf6d61ea6775fffed1fedffaa60bd047d3c08c430"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78470906a6be5199524641f538bd2c56bb809cd4bf29a566a75051610bc982c3"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:07cdef0c84c03375f4e24642ef8d8178e533596b229d32d2bbd69e5128ede02a"}, - {file = "watchfiles-0.24.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d337193bbf3e45171c8025e291530fb7548a93c45253897cd764a6a71c937ed9"}, - {file = "watchfiles-0.24.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ec39698c45b11d9694a1b635a70946a5bad066b593af863460a8e600f0dff1ca"}, - {file = "watchfiles-0.24.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2e28d91ef48eab0afb939fa446d8ebe77e2f7593f5f463fd2bb2b14132f95b6e"}, - {file = "watchfiles-0.24.0-cp39-none-win32.whl", hash = "sha256:7138eff8baa883aeaa074359daabb8b6c1e73ffe69d5accdc907d62e50b1c0da"}, - {file = "watchfiles-0.24.0-cp39-none-win_amd64.whl", hash = "sha256:b3ef2c69c655db63deb96b3c3e587084612f9b1fa983df5e0c3379d41307467f"}, - {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:632676574429bee8c26be8af52af20e0c718cc7f5f67f3fb658c71928ccd4f7f"}, - {file = "watchfiles-0.24.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a2a9891723a735d3e2540651184be6fd5b96880c08ffe1a98bae5017e65b544b"}, - {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7fa2bc0efef3e209a8199fd111b8969fe9db9c711acc46636686331eda7dd4"}, - {file = "watchfiles-0.24.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01550ccf1d0aed6ea375ef259706af76ad009ef5b0203a3a4cce0f6024f9b68a"}, - {file = "watchfiles-0.24.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:96619302d4374de5e2345b2b622dc481257a99431277662c30f606f3e22f42be"}, - {file = "watchfiles-0.24.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:85d5f0c7771dcc7a26c7a27145059b6bb0ce06e4e751ed76cdf123d7039b60b5"}, - {file = "watchfiles-0.24.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:951088d12d339690a92cef2ec5d3cfd957692834c72ffd570ea76a6790222777"}, - {file = "watchfiles-0.24.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49fb58bcaa343fedc6a9e91f90195b20ccb3135447dc9e4e2570c3a39565853e"}, - {file = "watchfiles-0.24.0.tar.gz", hash = "sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "wcwidth" -version = "0.2.13" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = "*" -files = [ - {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, - {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, -] - -[[package]] -name = "websockets" -version = "13.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, - {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, - {file = "websockets-13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f779498eeec470295a2b1a5d97aa1bc9814ecd25e1eb637bd9d1c73a327387f6"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4676df3fe46956fbb0437d8800cd5f2b6d41143b6e7e842e60554398432cf29b"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7affedeb43a70351bb811dadf49493c9cfd1ed94c9c70095fd177e9cc1541fa"}, - {file = "websockets-13.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1971e62d2caa443e57588e1d82d15f663b29ff9dfe7446d9964a4b6f12c1e700"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5f2e75431f8dc4a47f31565a6e1355fb4f2ecaa99d6b89737527ea917066e26c"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:58cf7e75dbf7e566088b07e36ea2e3e2bd5676e22216e4cad108d4df4a7402a0"}, - {file = "websockets-13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c90d6dec6be2c7d03378a574de87af9b1efea77d0c52a8301dd831ece938452f"}, - {file = "websockets-13.1-cp310-cp310-win32.whl", hash = "sha256:730f42125ccb14602f455155084f978bd9e8e57e89b569b4d7f0f0c17a448ffe"}, - {file = "websockets-13.1-cp310-cp310-win_amd64.whl", hash = "sha256:5993260f483d05a9737073be197371940c01b257cc45ae3f1d5d7adb371b266a"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:61fc0dfcda609cda0fc9fe7977694c0c59cf9d749fbb17f4e9483929e3c48a19"}, - {file = "websockets-13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ceec59f59d092c5007e815def4ebb80c2de330e9588e101cf8bd94c143ec78a5"}, - {file = "websockets-13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c1dca61c6db1166c48b95198c0b7d9c990b30c756fc2923cc66f68d17dc558fd"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308e20f22c2c77f3f39caca508e765f8725020b84aa963474e18c59accbf4c02"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62d516c325e6540e8a57b94abefc3459d7dab8ce52ac75c96cad5549e187e3a7"}, - {file = "websockets-13.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87c6e35319b46b99e168eb98472d6c7d8634ee37750d7693656dc766395df096"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5f9fee94ebafbc3117c30be1844ed01a3b177bb6e39088bc6b2fa1dc15572084"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7c1e90228c2f5cdde263253fa5db63e6653f1c00e7ec64108065a0b9713fa1b3"}, - {file = "websockets-13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6548f29b0e401eea2b967b2fdc1c7c7b5ebb3eeb470ed23a54cd45ef078a0db9"}, - {file = "websockets-13.1-cp311-cp311-win32.whl", hash = "sha256:c11d4d16e133f6df8916cc5b7e3e96ee4c44c936717d684a94f48f82edb7c92f"}, - {file = "websockets-13.1-cp311-cp311-win_amd64.whl", hash = "sha256:d04f13a1d75cb2b8382bdc16ae6fa58c97337253826dfe136195b7f89f661557"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9d75baf00138f80b48f1eac72ad1535aac0b6461265a0bcad391fc5aba875cfc"}, - {file = "websockets-13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9b6f347deb3dcfbfde1c20baa21c2ac0751afaa73e64e5b693bb2b848efeaa49"}, - {file = "websockets-13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de58647e3f9c42f13f90ac7e5f58900c80a39019848c5547bc691693098ae1bd"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1b54689e38d1279a51d11e3467dd2f3a50f5f2e879012ce8f2d6943f00e83f0"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf1781ef73c073e6b0f90af841aaf98501f975d306bbf6221683dd594ccc52b6"}, - {file = "websockets-13.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d23b88b9388ed85c6faf0e74d8dec4f4d3baf3ecf20a65a47b836d56260d4b9"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3c78383585f47ccb0fcf186dcb8a43f5438bd7d8f47d69e0b56f71bf431a0a68"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d6d300f8ec35c24025ceb9b9019ae9040c1ab2f01cddc2bcc0b518af31c75c14"}, - {file = "websockets-13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a9dcaf8b0cc72a392760bb8755922c03e17a5a54e08cca58e8b74f6902b433cf"}, - {file = "websockets-13.1-cp312-cp312-win32.whl", hash = "sha256:2f85cf4f2a1ba8f602298a853cec8526c2ca42a9a4b947ec236eaedb8f2dc80c"}, - {file = "websockets-13.1-cp312-cp312-win_amd64.whl", hash = "sha256:38377f8b0cdeee97c552d20cf1865695fcd56aba155ad1b4ca8779a5b6ef4ac3"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a9ab1e71d3d2e54a0aa646ab6d4eebfaa5f416fe78dfe4da2839525dc5d765c6"}, - {file = "websockets-13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b9d7439d7fab4dce00570bb906875734df13d9faa4b48e261c440a5fec6d9708"}, - {file = "websockets-13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:327b74e915cf13c5931334c61e1a41040e365d380f812513a255aa804b183418"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:325b1ccdbf5e5725fdcb1b0e9ad4d2545056479d0eee392c291c1bf76206435a"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:346bee67a65f189e0e33f520f253d5147ab76ae42493804319b5716e46dddf0f"}, - {file = "websockets-13.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91a0fa841646320ec0d3accdff5b757b06e2e5c86ba32af2e0815c96c7a603c5"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:18503d2c5f3943e93819238bf20df71982d193f73dcecd26c94514f417f6b135"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9cd1af7e18e5221d2878378fbc287a14cd527fdd5939ed56a18df8a31136bb2"}, - {file = "websockets-13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:70c5be9f416aa72aab7a2a76c90ae0a4fe2755c1816c153c1a2bcc3333ce4ce6"}, - {file = "websockets-13.1-cp313-cp313-win32.whl", hash = "sha256:624459daabeb310d3815b276c1adef475b3e6804abaf2d9d2c061c319f7f187d"}, - {file = "websockets-13.1-cp313-cp313-win_amd64.whl", hash = "sha256:c518e84bb59c2baae725accd355c8dc517b4a3ed8db88b4bc93c78dae2974bf2"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c7934fd0e920e70468e676fe7f1b7261c1efa0d6c037c6722278ca0228ad9d0d"}, - {file = "websockets-13.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:149e622dc48c10ccc3d2760e5f36753db9cacf3ad7bc7bbbfd7d9c819e286f23"}, - {file = "websockets-13.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a569eb1b05d72f9bce2ebd28a1ce2054311b66677fcd46cf36204ad23acead8c"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95df24ca1e1bd93bbca51d94dd049a984609687cb2fb08a7f2c56ac84e9816ea"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8dbb1bf0c0a4ae8b40bdc9be7f644e2f3fb4e8a9aca7145bfa510d4a374eeb7"}, - {file = "websockets-13.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:035233b7531fb92a76beefcbf479504db8c72eb3bff41da55aecce3a0f729e54"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e4450fc83a3df53dec45922b576e91e94f5578d06436871dce3a6be38e40f5db"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:463e1c6ec853202dd3657f156123d6b4dad0c546ea2e2e38be2b3f7c5b8e7295"}, - {file = "websockets-13.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6d6855bbe70119872c05107e38fbc7f96b1d8cb047d95c2c50869a46c65a8e96"}, - {file = "websockets-13.1-cp38-cp38-win32.whl", hash = "sha256:204e5107f43095012b00f1451374693267adbb832d29966a01ecc4ce1db26faf"}, - {file = "websockets-13.1-cp38-cp38-win_amd64.whl", hash = "sha256:485307243237328c022bc908b90e4457d0daa8b5cf4b3723fd3c4a8012fce4c6"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b37c184f8b976f0c0a231a5f3d6efe10807d41ccbe4488df8c74174805eea7d"}, - {file = "websockets-13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:163e7277e1a0bd9fb3c8842a71661ad19c6aa7bb3d6678dc7f89b17fbcc4aeb7"}, - {file = "websockets-13.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b889dbd1342820cc210ba44307cf75ae5f2f96226c0038094455a96e64fb07a"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:586a356928692c1fed0eca68b4d1c2cbbd1ca2acf2ac7e7ebd3b9052582deefa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7bd6abf1e070a6b72bfeb71049d6ad286852e285f146682bf30d0296f5fbadfa"}, - {file = "websockets-13.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2aad13a200e5934f5a6767492fb07151e1de1d6079c003ab31e1823733ae79"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:df01aea34b6e9e33572c35cd16bae5a47785e7d5c8cb2b54b2acdb9678315a17"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e54affdeb21026329fb0744ad187cf812f7d3c2aa702a5edb562b325191fcab6"}, - {file = "websockets-13.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9ef8aa8bdbac47f4968a5d66462a2a0935d044bf35c0e5a8af152d58516dbeb5"}, - {file = "websockets-13.1-cp39-cp39-win32.whl", hash = "sha256:deeb929efe52bed518f6eb2ddc00cc496366a14c726005726ad62c2dd9017a3c"}, - {file = "websockets-13.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c65ffa900e7cc958cd088b9a9157a8141c991f8c53d11087e6fb7277a03f81d"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5dd6da9bec02735931fccec99d97c29f47cc61f644264eb995ad6c0c27667238"}, - {file = "websockets-13.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:2510c09d8e8df777177ee3d40cd35450dc169a81e747455cc4197e63f7e7bfe5"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1c3cf67185543730888b20682fb186fc8d0fa6f07ccc3ef4390831ab4b388d9"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcc03c8b72267e97b49149e4863d57c2d77f13fae12066622dc78fe322490fe6"}, - {file = "websockets-13.1-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:004280a140f220c812e65f36944a9ca92d766b6cc4560be652a0a3883a79ed8a"}, - {file = "websockets-13.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e2620453c075abeb0daa949a292e19f56de518988e079c36478bacf9546ced23"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9156c45750b37337f7b0b00e6248991a047be4aa44554c9886fe6bdd605aab3b"}, - {file = "websockets-13.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:80c421e07973a89fbdd93e6f2003c17d20b69010458d3a8e37fb47874bd67d51"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82d0ba76371769d6a4e56f7e83bb8e81846d17a6190971e38b5de108bde9b0d7"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9875a0143f07d74dc5e1ded1c4581f0d9f7ab86c78994e2ed9e95050073c94d"}, - {file = "websockets-13.1-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11e38ad8922c7961447f35c7b17bffa15de4d17c70abd07bfbe12d6faa3e027"}, - {file = "websockets-13.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4059f790b6ae8768471cddb65d3c4fe4792b0ab48e154c9f0a04cefaabcd5978"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:25c35bf84bf7c7369d247f0b8cfa157f989862c49104c5cf85cb5436a641d93e"}, - {file = "websockets-13.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:83f91d8a9bb404b8c2c41a707ac7f7f75b9442a0a876df295de27251a856ad09"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a43cfdcddd07f4ca2b1afb459824dd3c6d53a51410636a2c7fc97b9a8cf4842"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a2ef1381632a2f0cb4efeff34efa97901c9fbc118e01951ad7cfc10601a9bb"}, - {file = "websockets-13.1-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:459bf774c754c35dbb487360b12c5727adab887f1622b8aed5755880a21c4a20"}, - {file = "websockets-13.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:95858ca14a9f6fa8413d29e0a585b31b278388aa775b8a81fa24830123874678"}, - {file = "websockets-13.1-py3-none-any.whl", hash = "sha256:a9a396a6ad26130cdae92ae10c36af09d9bfe6cafe69670fd3b6da9b07b4044f"}, - {file = "websockets-13.1.tar.gz", hash = "sha256:a3b3366087c1bc0a2795111edcadddb8b3b59509d5db5d7ea3fdd69f954a8878"}, -] - -[[package]] -name = "win32-setctime" -version = "1.1.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, - {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[[package]] -name = "wmi" -version = "1.5.1" -description = "Windows Management Instrumentation" -optional = false -python-versions = "*" -files = [ - {file = "WMI-1.5.1-py2.py3-none-any.whl", hash = "sha256:1d6b085e5c445141c475476000b661f60fff1aaa19f76bf82b7abb92e0ff4942"}, - {file = "WMI-1.5.1.tar.gz", hash = "sha256:b6a6be5711b1b6c8d55bda7a8befd75c48c12b770b9d227d31c1737dbf0d40a6"}, -] - -[package.dependencies] -pywin32 = "*" - -[package.extras] -all = ["pytest", "sphinx", "twine", "wheel"] -dev = ["pytest", "sphinx", "twine", "wheel"] -docs = ["sphinx"] -package = ["twine", "wheel"] -tests = ["pytest"] - -[[package]] -name = "zipp" -version = "3.20.2" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] -type = ["pytest-mypy"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.8.1" -content-hash = "362200492ac43056236d4342b3ba0809016ba1132da706acd8d442502dd5d878" diff --git a/pyproject.toml b/pyproject.toml index 59e4645..4e5d78e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,15 +1,11 @@ -[tool.poetry] +[project] name = "nb-cli-plugin-webui" version = "0.4.2" description = "web ui support for nb-cli" -authors = ["Kyomotoi "] -license = "MIT" -packages = [{ include = 'nb_cli_plugin_webui' }] -include = ["nb_cli_plugin_webui/dist/**/*"] +authors = [{ name = "Kyomotoi", email = "kyomotoiowo@gmail.com" }] +license = { text = "MIT" } +requires-python = ">=3.10" readme = "README.md" -homepage = "https://github.com/nonebot/cli-plugin-webui" -repository = "https://github.com/nonebot/cli-plugin-webui" -documentation = "https://github.com/nonebot/cli-plugin-webui" keywords = ["nonebot", "cli", "web"] classifiers = [ "Development Status :: 5 - Production/Stable", @@ -19,40 +15,57 @@ classifiers = [ "Operating System :: OS Independent", "Programming Language :: Python :: 3", ] +dependencies = [ + "psutil>=7.2.2", + "pathlib>=1.0.1,<2.0.0", + "WMI>=1.5.1,<2.0.0; sys_platform == 'win32'", + "nb-cli>=1.2.3,<2.0.0", + "pydantic>=2.0.0", + "fastapi>=0.115.0,<1.0.0", + "APScheduler>=3.10.1,<4.0.0", + "loguru>=0.7.0,<0.8.0", + "PyJWT>=2.7.0,<3.0.0", + "bcrypt>=5.0.0", + "passlib>=1.7.4,<2.0.0", + "uvicorn[standard]>=0.22.0,<1.0.0", + "httpx[socks]>=0.24.1,<1.0.0", + "python-dotenv>=1.0.0,<2.0.0", +] -[tool.poetry.dependencies] -python = "^3.8.1" -psutil = "^5.9.5" -pathlib = "^1.0.1" -WMI = { version = "^1.5.1", markers = "sys_platform == 'win32'" } -nb-cli = "^1.2.3" -fastapi = "^0.95.1" -APScheduler = "^3.10.1" -loguru = "^0.7.0" -PyJWT = "^2.7.0" -bcrypt = "^4.0.1" -passlib = "^1.7.4" -uvicorn = { extras = ["standard"], version = "^0.22.0" } -httpx = { extras = ["socks"], version = "^0.24.1" } -python-dotenv = "^1.0.0" +[project.urls] +Homepage = "https://github.com/nonebot/cli-plugin-webui" +Repository = "https://github.com/nonebot/cli-plugin-webui" +Documentation = "https://github.com/nonebot/cli-plugin-webui" -[tool.poetry.group.dev.dependencies] -isort = "^5.10.1" -black = "^23.1.0" -nonemoji = "^0.1.2" -pre-commit = "^3.1.0" -flake8 = "^6.0.0" -babel = "^2.16.0" +[project.optional-dependencies] +dev = [ + "isort>=8.0.1", + "black>=26.5.1", + "nonemoji>=0.1.2,<0.2.0", + "pre-commit>=4.6.0", + "flake8>=7.3.0", + "babel>=2.16.0,<3.0.0", +] -[tool.poetry.plugins.nb] +[project.entry-points."nb"] webui = "nb_cli_plugin_webui.plugin:install" -[tool.poetry.scripts] +[project.scripts] init = "nb_cli_plugin_webui.scripts:init" update = "nb_cli_plugin_webui.scripts:update" compile = "nb_cli_plugin_webui.scripts:compile" generate = "nb_cli_plugin_webui.scripts:generate_openapi" +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[tool.hatch.build.targets.wheel] +packages = ["nb_cli_plugin_webui"] + +[tool.hatch.build.targets.sdist] +include = ["nb_cli_plugin_webui/dist/**/*"] + [tool.black] line-length = 88 include = '\.pyi?$' @@ -70,6 +83,6 @@ extra_standard_library = ["typing_extensions"] [tool.pycln] path = "." -[build-system] -requires = ["poetry_core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +[tool.pdm.scripts] +dev-backend = "python -m nb_cli_plugin_webui.server" +dev-frontend = { cmd = "pnpm dev", working_dir = "frontend" }
+
跨平台 PYTHON 异步机器人框架
插件安装完成,需要重启实例以应用更改。是否立即重启?