diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 588802e6..cabd6e3d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,19 +33,19 @@ jobs: - name: Load cached venv id: cached-poetry-dependencies - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: .venv key: venv-${{ runner.os }}-${{ matrix.python-version }}-${{ hashFiles('**/poetry.lock') }} - name: Install dependencies - if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' run: poetry install --with dev,format - name: Run linting run: | poetry run ruff check . poetry run mypy . + poetry run pylint . - name: Run tests run: poetry run pytest tests/ -v --tb=short diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0d62d61a..e41c1509 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,29 +1,47 @@ repos: - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.11 + - repo: local hooks: - - id: ruff - args: [--config=pyproject.toml] + - id: ruff-check + name: ruff check + entry: poetry run ruff check . + language: system + pass_filenames: false + always_run: true + - id: ruff-format - args: [--config=pyproject.toml] + name: ruff format + entry: poetry run ruff format . + language: system + pass_filenames: false + always_run: true - - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.17.1 - hooks: - id: mypy - args: [--config-file=pyproject.toml] - files: ^dify_oapi/ - exclude: ^(examples/|tests/) + name: mypy + entry: poetry run mypy . + language: system + pass_filenames: false + always_run: true - - repo: https://github.com/pylint-dev/pylint - rev: v3.3.8 - hooks: - id: pylint - args: [--rcfile=pyproject.toml] - files: ^dify_oapi/ + name: pylint + entry: poetry run pylint . + language: system + pass_filenames: false + always_run: true - - repo: https://github.com/commitizen-tools/commitizen - rev: v4.8.3 - hooks: - id: commitizen + name: commitizen check + entry: poetry run cz check + language: system stages: [commit-msg] + args: [--commit-msg-file] + pass_filenames: true + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files + - id: check-merge-conflict diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 84d25e36..efd560ae 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -72,4 +72,4 @@ "problemMatcher": [] } ] -} \ No newline at end of file +} diff --git a/MANIFEST.in b/MANIFEST.in index 1cd16a86..490df535 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1 @@ -recursive-include dify_oapi *.py \ No newline at end of file +recursive-include dify_oapi *.py diff --git a/dify_oapi/api/chat/v1/resource/__init__.py b/dify_oapi/api/chat/v1/resource/__init__.py index 8b137891..e69de29b 100755 --- a/dify_oapi/api/chat/v1/resource/__init__.py +++ b/dify_oapi/api/chat/v1/resource/__init__.py @@ -1 +0,0 @@ - diff --git a/dify_oapi/api/chatflow/v1/model/chatflow_types.py b/dify_oapi/api/chatflow/v1/model/chatflow_types.py index ca5ce2ce..0b4a0c86 100644 --- a/dify_oapi/api/chatflow/v1/model/chatflow_types.py +++ b/dify_oapi/api/chatflow/v1/model/chatflow_types.py @@ -8,7 +8,7 @@ # Response mode types for chat messages ResponseMode = Literal["streaming", "blocking"] -"""Response mode for chat messages. +"""Response mode for chat messages. - streaming: Real-time streaming response - blocking: Complete response after processing (Cloudflare timeout is 100s) """ diff --git a/dify_oapi/api/chatflow/v1/model/send_chat_message_request_body.py b/dify_oapi/api/chatflow/v1/model/send_chat_message_request_body.py index 3d9321de..1c434137 100644 --- a/dify_oapi/api/chatflow/v1/model/send_chat_message_request_body.py +++ b/dify_oapi/api/chatflow/v1/model/send_chat_message_request_body.py @@ -8,7 +8,7 @@ class SendChatMessageRequestBody(BaseModel): query: str | None = None - #TODO: Create a more specific models for inputs values + # TODO: Create a more specific models for inputs values inputs: dict[str, Any] | None = None response_mode: ResponseMode | None = None user: str | None = None diff --git a/dify_oapi/api/chatflow/v1/model/tool_icon.py b/dify_oapi/api/chatflow/v1/model/tool_icon.py index 3fb0b00f..bb1fee9d 100644 --- a/dify_oapi/api/chatflow/v1/model/tool_icon.py +++ b/dify_oapi/api/chatflow/v1/model/tool_icon.py @@ -1,5 +1,3 @@ -from typing import Union - from pydantic import BaseModel @@ -29,7 +27,7 @@ def content(self, content: str) -> "ToolIconDetailBuilder": class AppMeta(BaseModel): - tool_icons: dict[str, Union[str, ToolIconDetail]] | None = None + tool_icons: dict[str, str | ToolIconDetail] | None = None @staticmethod def builder() -> "AppMetaBuilder": @@ -43,6 +41,6 @@ def __init__(self): def build(self) -> AppMeta: return self._app_meta - def tool_icons(self, tool_icons: dict[str, Union[str, ToolIconDetail]]) -> "AppMetaBuilder": + def tool_icons(self, tool_icons: dict[str, str | ToolIconDetail]) -> "AppMetaBuilder": self._app_meta.tool_icons = tool_icons return self diff --git a/dify_oapi/api/knowledge/v1/model/batch_info.py b/dify_oapi/api/knowledge/v1/model/batch_info.py index c16fe727..1a2e1773 100644 --- a/dify_oapi/api/knowledge/v1/model/batch_info.py +++ b/dify_oapi/api/knowledge/v1/model/batch_info.py @@ -1,7 +1,5 @@ """Batch information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import IndexingStatus @@ -10,18 +8,18 @@ class BatchInfo(BaseModel): """Batch information model with builder pattern.""" - id: Optional[str] = None - indexing_status: Optional[IndexingStatus] = None - processing_started_at: Optional[float] = None - parsing_completed_at: Optional[float] = None - cleaning_completed_at: Optional[float] = None - splitting_completed_at: Optional[float] = None - completed_at: Optional[float] = None - paused_at: Optional[float] = None - error: Optional[str] = None - stopped_at: Optional[float] = None - completed_segments: Optional[int] = None - total_segments: Optional[int] = None + id: str | None = None + indexing_status: IndexingStatus | None = None + processing_started_at: float | None = None + parsing_completed_at: float | None = None + cleaning_completed_at: float | None = None + splitting_completed_at: float | None = None + completed_at: float | None = None + paused_at: float | None = None + error: str | None = None + stopped_at: float | None = None + completed_segments: int | None = None + total_segments: int | None = None @staticmethod def builder() -> "BatchInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/child_chunk_info.py b/dify_oapi/api/knowledge/v1/model/child_chunk_info.py index 6e210330..d0666cb3 100644 --- a/dify_oapi/api/knowledge/v1/model/child_chunk_info.py +++ b/dify_oapi/api/knowledge/v1/model/child_chunk_info.py @@ -1,7 +1,5 @@ """Child chunk information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import ChunkStatus @@ -10,21 +8,21 @@ class ChildChunkInfo(BaseModel): """Child chunk information model with builder pattern.""" - id: Optional[str] = None - segment_id: Optional[str] = None - content: Optional[str] = None - word_count: Optional[int] = None - tokens: Optional[int] = None - keywords: Optional[list[str]] = None - index_node_id: Optional[str] = None - index_node_hash: Optional[str] = None - status: Optional[ChunkStatus] = None - created_by: Optional[str] = None - created_at: Optional[float] = None - indexing_at: Optional[float] = None - completed_at: Optional[float] = None - error: Optional[str] = None - stopped_at: Optional[float] = None + id: str | None = None + segment_id: str | None = None + content: str | None = None + word_count: int | None = None + tokens: int | None = None + keywords: list[str] | None = None + index_node_id: str | None = None + index_node_hash: str | None = None + status: ChunkStatus | None = None + created_by: str | None = None + created_at: float | None = None + indexing_at: float | None = None + completed_at: float | None = None + error: str | None = None + stopped_at: float | None = None @staticmethod def builder() -> "ChildChunkInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/data_source_detail.py b/dify_oapi/api/knowledge/v1/model/data_source_detail.py index f394f115..d3993b20 100644 --- a/dify_oapi/api/knowledge/v1/model/data_source_detail.py +++ b/dify_oapi/api/knowledge/v1/model/data_source_detail.py @@ -1,23 +1,21 @@ """Data source detail models.""" -from typing import Optional - from pydantic import BaseModel class UploadFileDetail(BaseModel): """Upload file detail information.""" - id: Optional[str] = None - name: Optional[str] = None - size: Optional[int] = None - extension: Optional[str] = None - mime_type: Optional[str] = None - created_by: Optional[str] = None - created_at: Optional[float] = None + id: str | None = None + name: str | None = None + size: int | None = None + extension: str | None = None + mime_type: str | None = None + created_by: str | None = None + created_at: float | None = None class DataSourceDetailDict(BaseModel): """Data source detail dictionary.""" - upload_file: Optional[UploadFileDetail] = None + upload_file: UploadFileDetail | None = None diff --git a/dify_oapi/api/knowledge/v1/model/data_source_info.py b/dify_oapi/api/knowledge/v1/model/data_source_info.py index e9bfddef..a6dc89d1 100644 --- a/dify_oapi/api/knowledge/v1/model/data_source_info.py +++ b/dify_oapi/api/knowledge/v1/model/data_source_info.py @@ -1,15 +1,13 @@ """Data source info model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class DataSourceInfo(BaseModel): """Data source info model with builder pattern.""" - upload_file_id: Optional[str] = None - original_document_id: Optional[str] = None + upload_file_id: str | None = None + original_document_id: str | None = None @staticmethod def builder() -> "DataSourceInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/dataset_info.py b/dify_oapi/api/knowledge/v1/model/dataset_info.py index 451233ce..1f8013a2 100644 --- a/dify_oapi/api/knowledge/v1/model/dataset_info.py +++ b/dify_oapi/api/knowledge/v1/model/dataset_info.py @@ -1,7 +1,5 @@ """Dataset information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .dataset_metadata import DatasetMetadata @@ -15,30 +13,30 @@ class DatasetInfo(BaseModel): """Dataset information model with builder pattern.""" - id: Optional[str] = None - name: Optional[str] = None - description: Optional[str] = None - provider: Optional[str] = None - permission: Optional[Permission] = None - data_source_type: Optional[DataSourceType] = None - indexing_technique: Optional[IndexingTechnique] = None - app_count: Optional[int] = None - document_count: Optional[int] = None - word_count: Optional[int] = None - created_by: Optional[str] = None - created_at: Optional[int] = None - updated_by: Optional[str] = None - updated_at: Optional[int] = None - embedding_model: Optional[str] = None - embedding_model_provider: Optional[str] = None - embedding_available: Optional[bool] = None - retrieval_model_dict: Optional[RetrievalModel] = None - tags: Optional[list[TagInfo]] = None - doc_form: Optional[DocumentForm] = None - external_knowledge_info: Optional[ExternalKnowledgeInfo] = None - external_retrieval_model: Optional[ExternalRetrievalModel] = None - doc_metadata: Optional[list[DatasetMetadata]] = None - built_in_field_enabled: Optional[bool] = None + id: str | None = None + name: str | None = None + description: str | None = None + provider: str | None = None + permission: Permission | None = None + data_source_type: DataSourceType | None = None + indexing_technique: IndexingTechnique | None = None + app_count: int | None = None + document_count: int | None = None + word_count: int | None = None + created_by: str | None = None + created_at: int | None = None + updated_by: str | None = None + updated_at: int | None = None + embedding_model: str | None = None + embedding_model_provider: str | None = None + embedding_available: bool | None = None + retrieval_model_dict: RetrievalModel | None = None + tags: list[TagInfo] | None = None + doc_form: DocumentForm | None = None + external_knowledge_info: ExternalKnowledgeInfo | None = None + external_retrieval_model: ExternalRetrievalModel | None = None + doc_metadata: list[DatasetMetadata] | None = None + built_in_field_enabled: bool | None = None @staticmethod def builder() -> "DatasetInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/dataset_metadata.py b/dify_oapi/api/knowledge/v1/model/dataset_metadata.py index 5b36ab2d..19341e54 100644 --- a/dify_oapi/api/knowledge/v1/model/dataset_metadata.py +++ b/dify_oapi/api/knowledge/v1/model/dataset_metadata.py @@ -1,7 +1,5 @@ """Dataset metadata model.""" -from typing import Optional - from pydantic import BaseModel @@ -10,5 +8,5 @@ class DatasetMetadata(BaseModel): # Based on API response, this is typically an empty array # Can be extended when actual metadata structure is known - key: Optional[str] = None - value: Optional[str] = None + key: str | None = None + value: str | None = None diff --git a/dify_oapi/api/knowledge/v1/model/document_info.py b/dify_oapi/api/knowledge/v1/model/document_info.py index 5dc88b0c..fd15a149 100644 --- a/dify_oapi/api/knowledge/v1/model/document_info.py +++ b/dify_oapi/api/knowledge/v1/model/document_info.py @@ -13,29 +13,29 @@ class DocumentInfo(BaseModel): """Document information model with builder pattern.""" - id: Optional[str] = None - position: Optional[int] = None - data_source_type: Optional[DataSourceType] = None + id: str | None = None + position: int | None = None + data_source_type: DataSourceType | None = None data_source_info: Optional["DataSourceInfo"] = None - data_source_detail_dict: Optional[DataSourceDetailDict] = None - dataset_process_rule_id: Optional[str] = None - name: Optional[str] = None - created_from: Optional[str] = None - created_by: Optional[str] = None - created_at: Optional[int] = None - tokens: Optional[int] = None - indexing_status: Optional[IndexingStatus] = None - error: Optional[str] = None - enabled: Optional[bool] = None - disabled_at: Optional[int] = None - disabled_by: Optional[str] = None - archived: Optional[bool] = None - display_status: Optional[DocumentDisplayStatus] = None - word_count: Optional[int] = None - hit_count: Optional[int] = None - doc_form: Optional[DocumentForm] = None - doc_metadata: Optional[DocumentMetadata] = None - updated_at: Optional[int] = None + data_source_detail_dict: DataSourceDetailDict | None = None + dataset_process_rule_id: str | None = None + name: str | None = None + created_from: str | None = None + created_by: str | None = None + created_at: int | None = None + tokens: int | None = None + indexing_status: IndexingStatus | None = None + error: str | None = None + enabled: bool | None = None + disabled_at: int | None = None + disabled_by: str | None = None + archived: bool | None = None + display_status: DocumentDisplayStatus | None = None + word_count: int | None = None + hit_count: int | None = None + doc_form: DocumentForm | None = None + doc_metadata: DocumentMetadata | None = None + updated_at: int | None = None @staticmethod def builder() -> "DocumentInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/document_metadata.py b/dify_oapi/api/knowledge/v1/model/document_metadata.py index 7be2397f..c7dfbf52 100644 --- a/dify_oapi/api/knowledge/v1/model/document_metadata.py +++ b/dify_oapi/api/knowledge/v1/model/document_metadata.py @@ -1,16 +1,14 @@ """Document metadata model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class DocumentMetadata(BaseModel): """Document metadata model with builder pattern.""" - id: Optional[str] = None - name: Optional[str] = None - type: Optional[str] = None + id: str | None = None + name: str | None = None + type: str | None = None @staticmethod def builder() -> "DocumentMetadataBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/embedding_model_parameters.py b/dify_oapi/api/knowledge/v1/model/embedding_model_parameters.py index 65a3ad8b..ee7e1462 100644 --- a/dify_oapi/api/knowledge/v1/model/embedding_model_parameters.py +++ b/dify_oapi/api/knowledge/v1/model/embedding_model_parameters.py @@ -1,7 +1,5 @@ """Embedding model parameters for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .model_credentials import ModelCredentials @@ -11,10 +9,10 @@ class EmbeddingModelParameters(BaseModel): """Embedding model parameters with builder pattern.""" - model: Optional[str] = None - provider: Optional[str] = None - credentials: Optional[ModelCredentials] = None - model_parameters: Optional[ModelParameters] = None + model: str | None = None + provider: str | None = None + credentials: ModelCredentials | None = None + model_parameters: ModelParameters | None = None @staticmethod def builder() -> "EmbeddingModelParametersBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/external_knowledge_info.py b/dify_oapi/api/knowledge/v1/model/external_knowledge_info.py index c1e7889f..2b95460b 100644 --- a/dify_oapi/api/knowledge/v1/model/external_knowledge_info.py +++ b/dify_oapi/api/knowledge/v1/model/external_knowledge_info.py @@ -1,17 +1,15 @@ """External knowledge info model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class ExternalKnowledgeInfo(BaseModel): """External knowledge info model with builder pattern.""" - external_knowledge_id: Optional[str] = None - external_knowledge_api_id: Optional[str] = None - external_knowledge_api_name: Optional[str] = None - external_knowledge_api_endpoint: Optional[str] = None + external_knowledge_id: str | None = None + external_knowledge_api_id: str | None = None + external_knowledge_api_name: str | None = None + external_knowledge_api_endpoint: str | None = None @staticmethod def builder() -> "ExternalKnowledgeInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/external_retrieval_model.py b/dify_oapi/api/knowledge/v1/model/external_retrieval_model.py index 9c6178ab..eb4cb873 100644 --- a/dify_oapi/api/knowledge/v1/model/external_retrieval_model.py +++ b/dify_oapi/api/knowledge/v1/model/external_retrieval_model.py @@ -1,13 +1,11 @@ """External retrieval model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class ExternalRetrievalModel(BaseModel): """External retrieval model configuration.""" - top_k: Optional[int] = None - score_threshold: Optional[float] = None - score_threshold_enabled: Optional[bool] = None + top_k: int | None = None + score_threshold: float | None = None + score_threshold_enabled: bool | None = None diff --git a/dify_oapi/api/knowledge/v1/model/file_info.py b/dify_oapi/api/knowledge/v1/model/file_info.py index 82665ad6..069ea4bc 100644 --- a/dify_oapi/api/knowledge/v1/model/file_info.py +++ b/dify_oapi/api/knowledge/v1/model/file_info.py @@ -1,7 +1,5 @@ """File information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import FileType @@ -10,15 +8,15 @@ class FileInfo(BaseModel): """File information model with builder pattern.""" - id: Optional[str] = None - name: Optional[str] = None - size: Optional[int] = None - extension: Optional[str] = None - mime_type: Optional[str] = None - type: Optional[FileType] = None - created_by: Optional[str] = None - created_at: Optional[float] = None - upload_file_id: Optional[str] = None + id: str | None = None + name: str | None = None + size: int | None = None + extension: str | None = None + mime_type: str | None = None + type: FileType | None = None + created_by: str | None = None + created_at: float | None = None + upload_file_id: str | None = None @staticmethod def builder() -> "FileInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_response.py b/dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_response.py index be1e9d55..3f7e5506 100644 --- a/dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_response.py +++ b/dify_oapi/api/knowledge/v1/model/get_batch_indexing_status_response.py @@ -1,22 +1,20 @@ """Get batch indexing status response model.""" -from typing import Optional - from dify_oapi.core.model.base_response import BaseResponse class GetBatchIndexingStatusResponse(BaseResponse): """Response model for get batch indexing status API.""" - id: Optional[str] = None - indexing_status: Optional[str] = None - processing_started_at: Optional[float] = None - parsing_completed_at: Optional[float] = None - cleaning_completed_at: Optional[float] = None - splitting_completed_at: Optional[float] = None - completed_at: Optional[float] = None - paused_at: Optional[float] = None - error: Optional[str] = None - stopped_at: Optional[float] = None - completed_segments: Optional[int] = None - total_segments: Optional[int] = None + id: str | None = None + indexing_status: str | None = None + processing_started_at: float | None = None + parsing_completed_at: float | None = None + cleaning_completed_at: float | None = None + splitting_completed_at: float | None = None + completed_at: float | None = None + paused_at: float | None = None + error: str | None = None + stopped_at: float | None = None + completed_segments: int | None = None + total_segments: int | None = None diff --git a/dify_oapi/api/knowledge/v1/model/model_credentials.py b/dify_oapi/api/knowledge/v1/model/model_credentials.py index c5b39ff1..da161087 100644 --- a/dify_oapi/api/knowledge/v1/model/model_credentials.py +++ b/dify_oapi/api/knowledge/v1/model/model_credentials.py @@ -1,15 +1,13 @@ """Model credentials for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class ModelCredentials(BaseModel): """Model credentials with builder pattern.""" - api_key: Optional[str] = None - api_base: Optional[str] = None + api_key: str | None = None + api_base: str | None = None @staticmethod def builder() -> "ModelCredentialsBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/model_info.py b/dify_oapi/api/knowledge/v1/model/model_info.py index 625e65ac..494b56e7 100644 --- a/dify_oapi/api/knowledge/v1/model/model_info.py +++ b/dify_oapi/api/knowledge/v1/model/model_info.py @@ -1,7 +1,5 @@ """Model information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import ModelFeature, ModelFetchFrom, ModelStatus @@ -11,40 +9,40 @@ class ModelLabel(BaseModel): """Model label with localization support.""" - en_US: Optional[str] = None # noqa: N815 - zh_Hans: Optional[str] = None # noqa: N815 + en_US: str | None = None # noqa: N815 + zh_Hans: str | None = None # noqa: N815 class ModelIcon(BaseModel): """Model icon with different sizes.""" - en_US: Optional[str] = None # noqa: N815 - zh_Hans: Optional[str] = None # noqa: N815 + en_US: str | None = None # noqa: N815 + zh_Hans: str | None = None # noqa: N815 class EmbeddingModelDetails(BaseModel): """Individual embedding model details.""" - model: Optional[str] = None - label: Optional[ModelLabel] = None - model_type: Optional[str] = None - features: Optional[list[ModelFeature]] = None - fetch_from: Optional[ModelFetchFrom] = None - model_properties: Optional[ModelParameters] = None - deprecated: Optional[bool] = None - status: Optional[ModelStatus] = None - load_balancing_enabled: Optional[bool] = None + model: str | None = None + label: ModelLabel | None = None + model_type: str | None = None + features: list[ModelFeature] | None = None + fetch_from: ModelFetchFrom | None = None + model_properties: ModelParameters | None = None + deprecated: bool | None = None + status: ModelStatus | None = None + load_balancing_enabled: bool | None = None class ModelInfo(BaseModel): """Model provider information with embedding models.""" - provider: Optional[str] = None - label: Optional[ModelLabel] = None - icon_small: Optional[ModelIcon] = None - icon_large: Optional[ModelIcon] = None - status: Optional[ModelStatus] = None - models: Optional[list[EmbeddingModelDetails]] = None + provider: str | None = None + label: ModelLabel | None = None + icon_small: ModelIcon | None = None + icon_large: ModelIcon | None = None + status: ModelStatus | None = None + models: list[EmbeddingModelDetails] | None = None @staticmethod def builder() -> "ModelInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/model_parameters.py b/dify_oapi/api/knowledge/v1/model/model_parameters.py index f3f548ed..df34046e 100644 --- a/dify_oapi/api/knowledge/v1/model/model_parameters.py +++ b/dify_oapi/api/knowledge/v1/model/model_parameters.py @@ -1,15 +1,13 @@ """Model parameters for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class ModelParameters(BaseModel): """Model parameters with builder pattern.""" - context_size: Optional[int] = None - max_chunks: Optional[int] = None + context_size: int | None = None + max_chunks: int | None = None @staticmethod def builder() -> "ModelParametersBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/pagination_info.py b/dify_oapi/api/knowledge/v1/model/pagination_info.py index c467a8f1..ca7a6396 100644 --- a/dify_oapi/api/knowledge/v1/model/pagination_info.py +++ b/dify_oapi/api/knowledge/v1/model/pagination_info.py @@ -1,17 +1,15 @@ """Pagination information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class PaginationInfo(BaseModel): """Pagination information model with builder pattern.""" - page: Optional[int] = None - limit: Optional[int] = None - total: Optional[int] = None - has_more: Optional[bool] = None + page: int | None = None + limit: int | None = None + total: int | None = None + has_more: bool | None = None @staticmethod def builder() -> "PaginationInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/preprocessing_rule.py b/dify_oapi/api/knowledge/v1/model/preprocessing_rule.py index 1bdc7924..7563e024 100644 --- a/dify_oapi/api/knowledge/v1/model/preprocessing_rule.py +++ b/dify_oapi/api/knowledge/v1/model/preprocessing_rule.py @@ -1,7 +1,5 @@ """Preprocessing rule model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import PreprocessingRuleId @@ -10,8 +8,8 @@ class PreprocessingRule(BaseModel): """Preprocessing rule model with builder pattern.""" - id: Optional[PreprocessingRuleId] = None - enabled: Optional[bool] = None + id: PreprocessingRuleId | None = None + enabled: bool | None = None @staticmethod def builder() -> "PreprocessingRuleBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/process_rule.py b/dify_oapi/api/knowledge/v1/model/process_rule.py index bbd073f6..b3b36f9e 100644 --- a/dify_oapi/api/knowledge/v1/model/process_rule.py +++ b/dify_oapi/api/knowledge/v1/model/process_rule.py @@ -1,7 +1,5 @@ """Process rule model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import ProcessingMode @@ -11,8 +9,8 @@ class ProcessRule(BaseModel): """Process rule model with builder pattern.""" - mode: Optional[ProcessingMode] = None - rules: Optional[ProcessRules] = None + mode: ProcessingMode | None = None + rules: ProcessRules | None = None @staticmethod def builder() -> "ProcessRuleBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/process_rules.py b/dify_oapi/api/knowledge/v1/model/process_rules.py index fb3a2f58..a91c86bc 100644 --- a/dify_oapi/api/knowledge/v1/model/process_rules.py +++ b/dify_oapi/api/knowledge/v1/model/process_rules.py @@ -1,7 +1,5 @@ """Process rules model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import ParentMode @@ -13,10 +11,10 @@ class ProcessRules(BaseModel): """Process rules model with builder pattern.""" - pre_processing_rules: Optional[list[PreprocessingRule]] = None - segmentation: Optional[SegmentationRule] = None - parent_mode: Optional[ParentMode] = None - subchunk_segmentation: Optional[SubChunkSegmentationRule] = None + pre_processing_rules: list[PreprocessingRule] | None = None + segmentation: SegmentationRule | None = None + parent_mode: ParentMode | None = None + subchunk_segmentation: SubChunkSegmentationRule | None = None @staticmethod def builder() -> "ProcessRulesBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/query_info.py b/dify_oapi/api/knowledge/v1/model/query_info.py index 3346a8a2..2871c49c 100644 --- a/dify_oapi/api/knowledge/v1/model/query_info.py +++ b/dify_oapi/api/knowledge/v1/model/query_info.py @@ -1,14 +1,12 @@ """Query information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class QueryInfo(BaseModel): """Query information model with builder pattern.""" - content: Optional[str] = None + content: str | None = None @staticmethod def builder() -> "QueryInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/reranking_mode.py b/dify_oapi/api/knowledge/v1/model/reranking_mode.py index 96138e87..445cb957 100644 --- a/dify_oapi/api/knowledge/v1/model/reranking_mode.py +++ b/dify_oapi/api/knowledge/v1/model/reranking_mode.py @@ -1,7 +1,5 @@ """Reranking mode model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import RerankingModelName, RerankingProviderName @@ -10,8 +8,8 @@ class RerankingMode(BaseModel): """Reranking mode model with builder pattern.""" - reranking_provider_name: Optional[RerankingProviderName] = None - reranking_model_name: Optional[RerankingModelName] = None + reranking_provider_name: RerankingProviderName | None = None + reranking_model_name: RerankingModelName | None = None @staticmethod def builder() -> "RerankingModeBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/reranking_model.py b/dify_oapi/api/knowledge/v1/model/reranking_model.py index 3f80f35c..9ef10071 100644 --- a/dify_oapi/api/knowledge/v1/model/reranking_model.py +++ b/dify_oapi/api/knowledge/v1/model/reranking_model.py @@ -1,7 +1,5 @@ """Reranking model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .model_credentials import ModelCredentials @@ -11,10 +9,10 @@ class RerankingModel(BaseModel): """Reranking model with builder pattern.""" - model: Optional[str] = None - provider: Optional[str] = None - credentials: Optional[ModelCredentials] = None - model_parameters: Optional[ModelParameters] = None + model: str | None = None + provider: str | None = None + credentials: ModelCredentials | None = None + model_parameters: ModelParameters | None = None @staticmethod def builder() -> "RerankingModelBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/retrieval_model.py b/dify_oapi/api/knowledge/v1/model/retrieval_model.py index af7dcfa4..51024f3a 100644 --- a/dify_oapi/api/knowledge/v1/model/retrieval_model.py +++ b/dify_oapi/api/knowledge/v1/model/retrieval_model.py @@ -1,7 +1,5 @@ """Retrieval model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import SearchMethod @@ -12,14 +10,14 @@ class RetrievalModel(BaseModel): """Retrieval model with builder pattern.""" - search_method: Optional[SearchMethod] = None - reranking_enable: Optional[bool] = None - reranking_mode: Optional[str] = None - reranking_model: Optional[RerankingMode] = None - top_k: Optional[int] = None - score_threshold_enabled: Optional[bool] = None - score_threshold: Optional[float] = None - weights: Optional[Weights] = None + search_method: SearchMethod | None = None + reranking_enable: bool | None = None + reranking_mode: str | None = None + reranking_model: RerankingMode | None = None + top_k: int | None = None + score_threshold_enabled: bool | None = None + score_threshold: float | None = None + weights: Weights | None = None @staticmethod def builder() -> "RetrievalModelBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/retrieval_segment_info.py b/dify_oapi/api/knowledge/v1/model/retrieval_segment_info.py index 670aefb5..646bf4ad 100644 --- a/dify_oapi/api/knowledge/v1/model/retrieval_segment_info.py +++ b/dify_oapi/api/knowledge/v1/model/retrieval_segment_info.py @@ -1,7 +1,5 @@ """Retrieval segment information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .segment_document_info import SegmentDocumentInfo @@ -10,9 +8,9 @@ class RetrievalSegmentInfo(BaseModel): """Retrieval segment information model with builder pattern.""" - id: Optional[str] = None - content: Optional[str] = None - document: Optional[SegmentDocumentInfo] = None + id: str | None = None + content: str | None = None + document: SegmentDocumentInfo | None = None @staticmethod def builder() -> "RetrievalSegmentInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/segment_document_info.py b/dify_oapi/api/knowledge/v1/model/segment_document_info.py index 5aa8e464..be7a2f9c 100644 --- a/dify_oapi/api/knowledge/v1/model/segment_document_info.py +++ b/dify_oapi/api/knowledge/v1/model/segment_document_info.py @@ -1,7 +1,5 @@ """Segment document information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import DataSourceType @@ -10,9 +8,9 @@ class SegmentDocumentInfo(BaseModel): """Segment document information model with builder pattern.""" - id: Optional[str] = None - data_source_type: Optional[DataSourceType] = None - name: Optional[str] = None + id: str | None = None + data_source_type: DataSourceType | None = None + name: str | None = None @staticmethod def builder() -> "SegmentDocumentInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/segment_info.py b/dify_oapi/api/knowledge/v1/model/segment_info.py index 01d4f489..c932c34c 100644 --- a/dify_oapi/api/knowledge/v1/model/segment_info.py +++ b/dify_oapi/api/knowledge/v1/model/segment_info.py @@ -1,7 +1,5 @@ """Segment information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import SegmentStatus @@ -10,27 +8,27 @@ class SegmentInfo(BaseModel): """Segment information model with builder pattern.""" - id: Optional[str] = None - position: Optional[int] = None - document_id: Optional[str] = None - content: Optional[str] = None - answer: Optional[str] = None - word_count: Optional[int] = None - tokens: Optional[int] = None - keywords: Optional[list[str]] = None - index_node_id: Optional[str] = None - index_node_hash: Optional[str] = None - hit_count: Optional[int] = None - enabled: Optional[bool] = None - disabled_at: Optional[float] = None - disabled_by: Optional[str] = None - status: Optional[SegmentStatus] = None - created_by: Optional[str] = None - created_at: Optional[float] = None - indexing_at: Optional[float] = None - completed_at: Optional[float] = None - error: Optional[str] = None - stopped_at: Optional[float] = None + id: str | None = None + position: int | None = None + document_id: str | None = None + content: str | None = None + answer: str | None = None + word_count: int | None = None + tokens: int | None = None + keywords: list[str] | None = None + index_node_id: str | None = None + index_node_hash: str | None = None + hit_count: int | None = None + enabled: bool | None = None + disabled_at: float | None = None + disabled_by: str | None = None + status: SegmentStatus | None = None + created_by: str | None = None + created_at: float | None = None + indexing_at: float | None = None + completed_at: float | None = None + error: str | None = None + stopped_at: float | None = None @staticmethod def builder() -> "SegmentInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/segmentation_rule.py b/dify_oapi/api/knowledge/v1/model/segmentation_rule.py index bfc1913f..91ecb2f4 100644 --- a/dify_oapi/api/knowledge/v1/model/segmentation_rule.py +++ b/dify_oapi/api/knowledge/v1/model/segmentation_rule.py @@ -1,17 +1,15 @@ """Segmentation rule model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class SegmentationRule(BaseModel): """Segmentation rule model with builder pattern.""" - separator: Optional[str] = None - max_tokens: Optional[int] = None - chunk_overlap: Optional[int] = None - rules: Optional[dict] = None + separator: str | None = None + max_tokens: int | None = None + chunk_overlap: int | None = None + rules: dict | None = None @staticmethod def builder() -> "SegmentationRuleBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/subchunk_segmentation_rule.py b/dify_oapi/api/knowledge/v1/model/subchunk_segmentation_rule.py index 84f8568d..293e351a 100644 --- a/dify_oapi/api/knowledge/v1/model/subchunk_segmentation_rule.py +++ b/dify_oapi/api/knowledge/v1/model/subchunk_segmentation_rule.py @@ -1,16 +1,14 @@ """Sub-chunk segmentation rule model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel class SubChunkSegmentationRule(BaseModel): """Sub-chunk segmentation rule model with builder pattern.""" - separator: Optional[str] = None - max_tokens: Optional[int] = None - chunk_overlap: Optional[int] = None + separator: str | None = None + max_tokens: int | None = None + chunk_overlap: int | None = None @staticmethod def builder() -> "SubChunkSegmentationRuleBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/tag_info.py b/dify_oapi/api/knowledge/v1/model/tag_info.py index e986b2af..10ae383e 100644 --- a/dify_oapi/api/knowledge/v1/model/tag_info.py +++ b/dify_oapi/api/knowledge/v1/model/tag_info.py @@ -1,7 +1,5 @@ """Tag information model for Knowledge Base API.""" -from typing import Optional - from pydantic import BaseModel from .knowledge_types import TagType @@ -10,12 +8,12 @@ class TagInfo(BaseModel): """Tag information model with builder pattern.""" - id: Optional[str] = None - name: Optional[str] = None - type: Optional[TagType] = None - binding_count: Optional[int] = None - created_by: Optional[str] = None - created_at: Optional[float] = None + id: str | None = None + name: str | None = None + type: TagType | None = None + binding_count: int | None = None + created_by: str | None = None + created_at: float | None = None @staticmethod def builder() -> "TagInfoBuilder": diff --git a/dify_oapi/api/knowledge/v1/model/weights.py b/dify_oapi/api/knowledge/v1/model/weights.py index 5a018bcf..7e5a9d5e 100644 --- a/dify_oapi/api/knowledge/v1/model/weights.py +++ b/dify_oapi/api/knowledge/v1/model/weights.py @@ -1,27 +1,25 @@ """Weights model for retrieval configuration.""" -from typing import Optional - from pydantic import BaseModel class KeywordSetting(BaseModel): """Keyword search weight settings.""" - keyword_weight: Optional[float] = None + keyword_weight: float | None = None class VectorSetting(BaseModel): """Vector search weight settings.""" - vector_weight: Optional[float] = None - embedding_model_name: Optional[str] = None - embedding_provider_name: Optional[str] = None + vector_weight: float | None = None + embedding_model_name: str | None = None + embedding_provider_name: str | None = None class Weights(BaseModel): """Weights configuration for hybrid search.""" - weight_type: Optional[str] = None - keyword_setting: Optional[KeywordSetting] = None - vector_setting: Optional[VectorSetting] = None + weight_type: str | None = None + keyword_setting: KeywordSetting | None = None + vector_setting: VectorSetting | None = None diff --git a/dify_oapi/api/workflow/v1/model/chunk_workflow_event.py b/dify_oapi/api/workflow/v1/model/chunk_workflow_event.py index 18fc7da8..d40765f3 100644 --- a/dify_oapi/api/workflow/v1/model/chunk_workflow_event.py +++ b/dify_oapi/api/workflow/v1/model/chunk_workflow_event.py @@ -4,7 +4,7 @@ and specific event data models. """ -from typing import Any, Optional +from typing import Any from pydantic import BaseModel @@ -15,12 +15,12 @@ class ChunkWorkflowEvent(BaseModel): """Base streaming event structure for workflow execution.""" event: EventType - task_id: Optional[str] = None - workflow_run_id: Optional[str] = None - data: Optional[dict[str, Any]] = None - message_id: Optional[str] = None - audio: Optional[str] = None - created_at: Optional[int] = None + task_id: str | None = None + workflow_run_id: str | None = None + data: dict[str, Any] | None = None + message_id: str | None = None + audio: str | None = None + created_at: int | None = None @staticmethod def builder() -> "ChunkWorkflowEventBuilder": diff --git a/dify_oapi/api/workflow/v1/model/input_file_object_workflow.py b/dify_oapi/api/workflow/v1/model/input_file_object_workflow.py index ed7c8eab..e845f1d6 100644 --- a/dify_oapi/api/workflow/v1/model/input_file_object_workflow.py +++ b/dify_oapi/api/workflow/v1/model/input_file_object_workflow.py @@ -4,8 +4,6 @@ in workflow execution with proper validation rules. """ -from typing import Optional - from pydantic import BaseModel, model_validator from .workflow_types import FileType, TransferMethod @@ -21,8 +19,8 @@ class InputFileObjectWorkflow(BaseModel): type: FileType transfer_method: TransferMethod - url: Optional[str] = None - upload_file_id: Optional[str] = None + url: str | None = None + upload_file_id: str | None = None @model_validator(mode="after") def validate_transfer_method_fields(self): diff --git a/dify_oapi/api/workflow/v1/model/node_finished_data.py b/dify_oapi/api/workflow/v1/model/node_finished_data.py index 8784cda5..2e1eef48 100644 --- a/dify_oapi/api/workflow/v1/model/node_finished_data.py +++ b/dify_oapi/api/workflow/v1/model/node_finished_data.py @@ -3,7 +3,7 @@ This module defines the data structure for node_finished streaming events. """ -from typing import Any, Optional +from typing import Any from pydantic import BaseModel @@ -19,14 +19,14 @@ class NodeFinishedData(BaseModel): node_type: NodeType title: str index: int - predecessor_node_id: Optional[str] = None - inputs: Optional[dict[str, Any]] = None - process_data: Optional[dict[str, Any]] = None - outputs: Optional[dict[str, Any]] = None + predecessor_node_id: str | None = None + inputs: dict[str, Any] | None = None + process_data: dict[str, Any] | None = None + outputs: dict[str, Any] | None = None status: NodeStatus - error: Optional[str] = None - elapsed_time: Optional[float] = None - execution_metadata: Optional[ExecutionMetadata] = None + error: str | None = None + elapsed_time: float | None = None + execution_metadata: ExecutionMetadata | None = None created_at: int @staticmethod diff --git a/dify_oapi/api/workflow/v1/model/node_started_data.py b/dify_oapi/api/workflow/v1/model/node_started_data.py index bfc7bd36..a6bc88c6 100644 --- a/dify_oapi/api/workflow/v1/model/node_started_data.py +++ b/dify_oapi/api/workflow/v1/model/node_started_data.py @@ -3,7 +3,7 @@ This module defines the data structure for node_started streaming events. """ -from typing import Any, Optional +from typing import Any from pydantic import BaseModel @@ -18,7 +18,7 @@ class NodeStartedData(BaseModel): node_type: NodeType title: str index: int - predecessor_node_id: Optional[str] = None + predecessor_node_id: str | None = None inputs: dict[str, Any] created_at: int diff --git a/dify_oapi/api/workflow/v1/model/workflow_finished_data.py b/dify_oapi/api/workflow/v1/model/workflow_finished_data.py index f8aed384..b783bd98 100644 --- a/dify_oapi/api/workflow/v1/model/workflow_finished_data.py +++ b/dify_oapi/api/workflow/v1/model/workflow_finished_data.py @@ -3,7 +3,7 @@ This module defines the data structure for workflow_finished streaming events. """ -from typing import Any, Optional +from typing import Any from pydantic import BaseModel @@ -16,10 +16,10 @@ class WorkflowFinishedData(BaseModel): id: str workflow_id: str status: WorkflowStatus - outputs: Optional[dict[str, Any]] = None - error: Optional[str] = None - elapsed_time: Optional[float] = None - total_tokens: Optional[int] = None + outputs: dict[str, Any] | None = None + error: str | None = None + elapsed_time: float | None = None + total_tokens: int | None = None total_steps: int created_at: int finished_at: int diff --git a/dify_oapi/api/workflow/v1/model/workflow_inputs.py b/dify_oapi/api/workflow/v1/model/workflow_inputs.py index 5438f259..ddbe2e86 100644 --- a/dify_oapi/api/workflow/v1/model/workflow_inputs.py +++ b/dify_oapi/api/workflow/v1/model/workflow_inputs.py @@ -1,22 +1,20 @@ from __future__ import annotations -from typing import Union - from pydantic import BaseModel from .workflow_file_info import WorkflowFileInfo # Define specific types for workflow input values -WorkflowInputValue = Union[ - str, # Text values - int, # Integer values - float, # Float values - bool, # Boolean values - WorkflowFileInfo, # Single file type variable - list[WorkflowFileInfo], # File list type variables - list[str], # String arrays - dict[str, Union[str, int, float, bool]], # Object values -] +WorkflowInputValue = ( + str # Text values + | int # Integer values + | float # Float values + | bool # Boolean values + | WorkflowFileInfo # Single file type variable + | list[WorkflowFileInfo] # File list type variables + | list[str] # String arrays + | dict[str, str | int | float | bool] # Object values +) class WorkflowInputs(BaseModel): diff --git a/dify_oapi/core/http/transport/connection_pool.py b/dify_oapi/core/http/transport/connection_pool.py index 6ff6ca37..01942ec8 100644 --- a/dify_oapi/core/http/transport/connection_pool.py +++ b/dify_oapi/core/http/transport/connection_pool.py @@ -29,7 +29,7 @@ def __init__(self): def get_sync_client( self, domain: str, - timeout: Optional[float] = None, + timeout: float | None = None, max_keepalive: int = 20, max_connections: int = 100, keepalive_expiry: float = 30.0, @@ -59,7 +59,7 @@ def get_sync_client( def get_async_client( self, domain: str, - timeout: Optional[float] = None, + timeout: float | None = None, max_keepalive: int = 20, max_connections: int = 100, keepalive_expiry: float = 30.0, diff --git a/examples/chat/README.md b/examples/chat/README.md index 40b5e03e..991864f4 100644 --- a/examples/chat/README.md +++ b/examples/chat/README.md @@ -117,4 +117,4 @@ export CHAT_KEY="your-chat-api-key" - [Chatflow API](../chatflow/) - Enhanced chat with workflow events - [Dify Core API](../dify/) - Core functionality like file upload -- [Completion API](../completion/) - Text completion services \ No newline at end of file +- [Completion API](../completion/) - Text completion services diff --git a/examples/chat/annotation/README.md b/examples/chat/annotation/README.md index bc010227..c5d64673 100644 --- a/examples/chat/annotation/README.md +++ b/examples/chat/annotation/README.md @@ -75,4 +75,4 @@ response = client.chat.v1.annotation.configure_annotation_reply(req, req_option) - **Content Moderation**: Add moderation notes to messages - **Quality Control**: Annotate messages for training purposes - **User Feedback**: Collect and organize user feedback -- **Automated Replies**: Set up automatic responses based on annotations \ No newline at end of file +- **Automated Replies**: Set up automatic responses based on annotations diff --git a/examples/chat/chat/README.md b/examples/chat/chat/README.md index 56448427..f5ce28f0 100644 --- a/examples/chat/chat/README.md +++ b/examples/chat/chat/README.md @@ -115,4 +115,4 @@ req_body = ( - [File Management](../file/) - File upload and handling - [Conversation Management](../conversation/) - Conversation lifecycle -- [Feedback](../feedback/) - User feedback collection \ No newline at end of file +- [Feedback](../feedback/) - User feedback collection diff --git a/examples/chat/conversation/README.md b/examples/chat/conversation/README.md index e39451f2..a63e3a77 100644 --- a/examples/chat/conversation/README.md +++ b/examples/chat/conversation/README.md @@ -100,4 +100,4 @@ response = client.chat.v1.conversation.rename_conversation(req, req_option) - [Chat Operations](../chat/) - Core chat functionality - [Message Operations](../message/) - Message-specific operations -- [Annotation Management](../annotation/) - Message annotations \ No newline at end of file +- [Annotation Management](../annotation/) - Message annotations diff --git a/examples/chat/file/README.md b/examples/chat/file/README.md index 53cd6b75..e4cf7206 100644 --- a/examples/chat/file/README.md +++ b/examples/chat/file/README.md @@ -41,4 +41,4 @@ req_body = ( ## 🔗 Related Examples - [Chat Operations](../chat/) - Use files in chat -- [Dify File Management](../../dify/file/) - Core file upload functionality \ No newline at end of file +- [Dify File Management](../../dify/file/) - Core file upload functionality diff --git a/examples/chat/message/README.md b/examples/chat/message/README.md index 866bfe94..323c64b7 100644 --- a/examples/chat/message/README.md +++ b/examples/chat/message/README.md @@ -38,4 +38,4 @@ print(f"Response: {response.answer}") ## 🔗 Related Examples - [Chat Operations](../chat/) - Advanced chat functionality -- [Conversation Management](../conversation/) - Conversation lifecycle \ No newline at end of file +- [Conversation Management](../conversation/) - Conversation lifecycle diff --git a/examples/chatflow/README.md b/examples/chatflow/README.md index 9cb2c9ac..dddaaba1 100644 --- a/examples/chatflow/README.md +++ b/examples/chatflow/README.md @@ -101,4 +101,4 @@ export CHATFLOW_KEY="your-chatflow-api-key" - [Chat API](../chat/) - Basic chat functionality - [Workflow API](../workflow/) - Workflow execution -- [Dify Core API](../dify/) - Core functionality \ No newline at end of file +- [Dify Core API](../dify/) - Core functionality diff --git a/examples/completion/README.md b/examples/completion/README.md index 9643d59b..5d753f01 100644 --- a/examples/completion/README.md +++ b/examples/completion/README.md @@ -98,4 +98,4 @@ export COMPLETION_KEY="your-completion-api-key" - [Chat API](../chat/) - Interactive conversations - [Dify Core API](../dify/) - Core functionality -- [Workflow API](../workflow/) - Workflow integration \ No newline at end of file +- [Workflow API](../workflow/) - Workflow integration diff --git a/examples/completion/completion/README.md b/examples/completion/completion/README.md index 56592be6..65962338 100644 --- a/examples/completion/completion/README.md +++ b/examples/completion/completion/README.md @@ -64,4 +64,4 @@ print(response.answer) - **File Integration**: Process files through Dify Core API integration - **Error Recovery**: Robust error handling and retry mechanisms - **Performance Optimization**: Efficient text generation with caching -- **Type Safety**: Comprehensive type validation with Pydantic models \ No newline at end of file +- **Type Safety**: Comprehensive type validation with Pydantic models diff --git a/examples/dify/README.md b/examples/dify/README.md index 570437a6..f4648f37 100644 --- a/examples/dify/README.md +++ b/examples/dify/README.md @@ -165,4 +165,4 @@ The Dify Core API is used by all other Dify services: - [Completion API](../completion/) - Text generation - [Chatflow API](../chatflow/) - Enhanced chat with workflows - [Workflow API](../workflow/) - Automated workflow execution -- [Knowledge Base API](../knowledge/) - Knowledge management \ No newline at end of file +- [Knowledge Base API](../knowledge/) - Knowledge management diff --git a/examples/knowledge/README.md b/examples/knowledge/README.md index 5c0cbb54..9e75af48 100644 --- a/examples/knowledge/README.md +++ b/examples/knowledge/README.md @@ -177,4 +177,4 @@ The Knowledge Base API integrates seamlessly with other Dify services: 3. **Use Tags Strategically**: Implement a consistent tagging strategy 4. **Monitor Processing Status**: Always check indexing status for large uploads 5. **Choose Appropriate Models**: Select embedding models based on your content type -6. **Implement Error Handling**: Handle API errors gracefully in production code \ No newline at end of file +6. **Implement Error Handling**: Handle API errors gracefully in production code diff --git a/examples/knowledge/chunk/README.md b/examples/knowledge/chunk/README.md index 0475f920..40f1df17 100644 --- a/examples/knowledge/chunk/README.md +++ b/examples/knowledge/chunk/README.md @@ -60,4 +60,4 @@ response = client.knowledge.v1.chunk.create_child_chunk(req, req_option) - **Precise Retrieval**: Enable exact content matching for specific queries - **Content Versioning**: Track changes at the most granular level - **Performance Optimization**: Balance content granularity with search performance -- **Semantic Chunking**: Organize content by semantic meaning and context \ No newline at end of file +- **Semantic Chunking**: Organize content by semantic meaning and context diff --git a/examples/knowledge/dataset/README.md b/examples/knowledge/dataset/README.md index 665d0a1b..e5c9c590 100644 --- a/examples/knowledge/dataset/README.md +++ b/examples/knowledge/dataset/README.md @@ -152,4 +152,4 @@ retrieval_model = { - [Document Management](../document/) - Add content to datasets - [Tag Management](../tag/) - Organize datasets with tags -- [Segment Management](../segment/) - Fine-grained content management \ No newline at end of file +- [Segment Management](../segment/) - Fine-grained content management diff --git a/examples/knowledge/model/README.md b/examples/knowledge/model/README.md index 0d6414bc..21bf818b 100644 --- a/examples/knowledge/model/README.md +++ b/examples/knowledge/model/README.md @@ -24,4 +24,4 @@ for model in response.data: - **Model Discovery**: List available embedding models - **Provider Information**: Get model provider details -- **Configuration Support**: Model-specific configuration options \ No newline at end of file +- **Configuration Support**: Model-specific configuration options diff --git a/examples/knowledge/segment/README.md b/examples/knowledge/segment/README.md index 957d2b32..d254ce24 100644 --- a/examples/knowledge/segment/README.md +++ b/examples/knowledge/segment/README.md @@ -154,4 +154,4 @@ export DOCUMENT_ID="your-document-id" - [Document Management](../document/) - Manage parent documents - [Child Chunk Management](../chunk/) - Create sub-segments - [Dataset Management](../dataset/) - Query segmented content -- [Tag Management](../tag/) - Organize segments with tags \ No newline at end of file +- [Tag Management](../tag/) - Organize segments with tags diff --git a/examples/knowledge/tag/README.md b/examples/knowledge/tag/README.md index 7e70c569..9d11ca1b 100644 --- a/examples/knowledge/tag/README.md +++ b/examples/knowledge/tag/README.md @@ -164,4 +164,4 @@ export DATASET_ID="your-dataset-id" - [Dataset Management](../dataset/) - Organize datasets with tags - [Document Management](../document/) - Tag-based document organization -- [Model Management](../model/) - Tag embedding models and configurations \ No newline at end of file +- [Model Management](../model/) - Tag embedding models and configurations diff --git a/examples/workflow/README.md b/examples/workflow/README.md index 696fa98d..b49492b9 100644 --- a/examples/workflow/README.md +++ b/examples/workflow/README.md @@ -143,4 +143,4 @@ Workflows can integrate with other Dify services: 3. **Monitor Resource Usage**: Track workflow execution resources 4. **Implement Timeouts**: Set appropriate timeouts for long-running workflows 5. **Error Recovery**: Implement retry logic for failed workflows -6. **Log Management**: Regularly clean up old workflow logs \ No newline at end of file +6. **Log Management**: Regularly clean up old workflow logs diff --git a/examples/workflow/workflow/README.md b/examples/workflow/workflow/README.md index 4907f852..104cf226 100644 --- a/examples/workflow/workflow/README.md +++ b/examples/workflow/workflow/README.md @@ -65,4 +65,4 @@ response = client.workflow.v1.workflow.run_workflow(req, req_option, False) ## 🔗 Related Examples -- [File Management](../file/) - Upload files for workflows \ No newline at end of file +- [File Management](../file/) - Upload files for workflows diff --git a/poetry.lock b/poetry.lock index 2c0f2fb5..15b0cce1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -48,6 +48,21 @@ files = [ [package.extras] test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] +[[package]] +name = "astroid" +version = "4.0.3" +description = "An abstract syntax tree for Python with inference support." +optional = false +python-versions = ">=3.10.0" +groups = ["format"] +files = [ + {file = "astroid-4.0.3-py3-none-any.whl", hash = "sha256:864a0a34af1bd70e1049ba1e61cee843a7252c826d97825fcee9b2fcbd9e1b14"}, + {file = "astroid-4.0.3.tar.gz", hash = "sha256:08d1de40d251cc3dc4a7a12726721d475ac189e4e583d596ece7422bc176bda3"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} + [[package]] name = "backports-asyncio-runner" version = "1.2.0" @@ -63,45 +78,46 @@ files = [ [[package]] name = "black" -version = "25.11.0" +version = "26.1.0" description = "The uncompromising code formatter." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["format"] files = [ - {file = "black-25.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ec311e22458eec32a807f029b2646f661e6859c3f61bc6d9ffb67958779f392e"}, - {file = "black-25.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1032639c90208c15711334d681de2e24821af0575573db2810b0763bcd62e0f0"}, - {file = "black-25.11.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0c0f7c461df55cf32929b002335883946a4893d759f2df343389c4396f3b6b37"}, - {file = "black-25.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:f9786c24d8e9bd5f20dc7a7f0cdd742644656987f6ea6947629306f937726c03"}, - {file = "black-25.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:895571922a35434a9d8ca67ef926da6bc9ad464522a5fe0db99b394ef1c0675a"}, - {file = "black-25.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cb4f4b65d717062191bdec8e4a442539a8ea065e6af1c4f4d36f0cdb5f71e170"}, - {file = "black-25.11.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d81a44cbc7e4f73a9d6ae449ec2317ad81512d1e7dce7d57f6333fd6259737bc"}, - {file = "black-25.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:7eebd4744dfe92ef1ee349dc532defbf012a88b087bb7ddd688ff59a447b080e"}, - {file = "black-25.11.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:80e7486ad3535636657aa180ad32a7d67d7c273a80e12f1b4bfa0823d54e8fac"}, - {file = "black-25.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cced12b747c4c76bc09b4db057c319d8545307266f41aaee665540bc0e04e96"}, - {file = "black-25.11.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cb2d54a39e0ef021d6c5eef442e10fd71fcb491be6413d083a320ee768329dd"}, - {file = "black-25.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae263af2f496940438e5be1a0c1020e13b09154f3af4df0835ea7f9fe7bfa409"}, - {file = "black-25.11.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0a1d40348b6621cc20d3d7530a5b8d67e9714906dfd7346338249ad9c6cedf2b"}, - {file = "black-25.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:51c65d7d60bb25429ea2bf0731c32b2a2442eb4bd3b2afcb47830f0b13e58bfd"}, - {file = "black-25.11.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:936c4dd07669269f40b497440159a221ee435e3fddcf668e0c05244a9be71993"}, - {file = "black-25.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:f42c0ea7f59994490f4dccd64e6b2dd49ac57c7c84f38b8faab50f8759db245c"}, - {file = "black-25.11.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35690a383f22dd3e468c85dc4b915217f87667ad9cce781d7b42678ce63c4170"}, - {file = "black-25.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:dae49ef7369c6caa1a1833fd5efb7c3024bb7e4499bf64833f65ad27791b1545"}, - {file = "black-25.11.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bd4a22a0b37401c8e492e994bce79e614f91b14d9ea911f44f36e262195fdda"}, - {file = "black-25.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:aa211411e94fdf86519996b7f5f05e71ba34835d8f0c0f03c00a26271da02664"}, - {file = "black-25.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3bb5ce32daa9ff0605d73b6f19da0b0e6c1f8f2d75594db539fdfed722f2b06"}, - {file = "black-25.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9815ccee1e55717fe9a4b924cae1646ef7f54e0f990da39a34fc7b264fcf80a2"}, - {file = "black-25.11.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:92285c37b93a1698dcbc34581867b480f1ba3a7b92acf1fe0467b04d7a4da0dc"}, - {file = "black-25.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:43945853a31099c7c0ff8dface53b4de56c41294fa6783c0441a8b1d9bf668bc"}, - {file = "black-25.11.0-py3-none-any.whl", hash = "sha256:e3f562da087791e96cefcd9dda058380a442ab322a02e222add53736451f604b"}, - {file = "black-25.11.0.tar.gz", hash = "sha256:9a323ac32f5dc75ce7470501b887250be5005a01602e931a15e45593f70f6e08"}, + {file = "black-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ca699710dece84e3ebf6e92ee15f5b8f72870ef984bf944a57a777a48357c168"}, + {file = "black-26.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e8e75dabb6eb83d064b0db46392b25cabb6e784ea624219736e8985a6b3675d"}, + {file = "black-26.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb07665d9a907a1a645ee41a0df8a25ffac8ad9c26cdb557b7b88eeeeec934e0"}, + {file = "black-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ed300200918147c963c87700ccf9966dceaefbbb7277450a8d646fc5646bf24"}, + {file = "black-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c5b7713daea9bf943f79f8c3b46f361cc5229e0e604dcef6a8bb6d1c37d9df89"}, + {file = "black-26.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3cee1487a9e4c640dc7467aaa543d6c0097c391dc8ac74eb313f2fbf9d7a7cb5"}, + {file = "black-26.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d62d14ca31c92adf561ebb2e5f2741bf8dea28aef6deb400d49cca011d186c68"}, + {file = "black-26.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb1dafbbaa3b1ee8b4550a84425aac8874e5f390200f5502cf3aee4a2acb2f14"}, + {file = "black-26.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:101540cb2a77c680f4f80e628ae98bd2bd8812fb9d72ade4f8995c5ff019e82c"}, + {file = "black-26.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:6f3977a16e347f1b115662be07daa93137259c711e526402aa444d7a88fdc9d4"}, + {file = "black-26.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6eeca41e70b5f5c84f2f913af857cf2ce17410847e1d54642e658e078da6544f"}, + {file = "black-26.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd39eef053e58e60204f2cdf059e2442e2eb08f15989eefe259870f89614c8b6"}, + {file = "black-26.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9459ad0d6cd483eacad4c6566b0f8e42af5e8b583cee917d90ffaa3778420a0a"}, + {file = "black-26.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a19915ec61f3a8746e8b10adbac4a577c6ba9851fa4a9e9fbfbcf319887a5791"}, + {file = "black-26.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:643d27fb5facc167c0b1b59d0315f2674a6e950341aed0fc05cf307d22bf4954"}, + {file = "black-26.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ba1d768fbfb6930fc93b0ecc32a43d8861ded16f47a40f14afa9bb04ab93d304"}, + {file = "black-26.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2b807c240b64609cb0e80d2200a35b23c7df82259f80bef1b2c96eb422b4aac9"}, + {file = "black-26.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1de0f7d01cc894066a1153b738145b194414cc6eeaad8ef4397ac9abacf40f6b"}, + {file = "black-26.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:91a68ae46bf07868963671e4d05611b179c2313301bd756a89ad4e3b3db2325b"}, + {file = "black-26.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:be5e2fe860b9bd9edbf676d5b60a9282994c03fbbd40fe8f5e75d194f96064ca"}, + {file = "black-26.1.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9dc8c71656a79ca49b8d3e2ce8103210c9481c57798b48deeb3a8bb02db5f115"}, + {file = "black-26.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b22b3810451abe359a964cc88121d57f7bce482b53a066de0f1584988ca36e79"}, + {file = "black-26.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:53c62883b3f999f14e5d30b5a79bd437236658ad45b2f853906c7cbe79de00af"}, + {file = "black-26.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:f016baaadc423dc960cdddf9acae679e71ee02c4c341f78f3179d7e4819c095f"}, + {file = "black-26.1.0-cp314-cp314-win_arm64.whl", hash = "sha256:66912475200b67ef5a0ab665011964bf924745103f51977a78b4fb92a9fc1bf0"}, + {file = "black-26.1.0-py3-none-any.whl", hash = "sha256:1054e8e47ebd686e078c0bb0eaf31e6ce69c966058d122f2c0c950311f9f3ede"}, + {file = "black-26.1.0.tar.gz", hash = "sha256:d294ac3340eef9c9eb5d29288e96dc719ff269a88e27b396340459dd85da4c58"}, ] [package.dependencies] click = ">=8.0.0" mypy-extensions = ">=0.4.3" packaging = ">=22.0" -pathspec = ">=0.9.0" +pathspec = ">=1.0.0" platformdirs = ">=2" pytokens = ">=0.3.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -252,7 +268,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"}, ] -markers = {format = "platform_system == \"Windows\""} +markers = {format = "platform_system == \"Windows\" or sys_platform == \"win32\""} [[package]] name = "commitizen" @@ -291,6 +307,22 @@ files = [ {file = "decli-0.6.3.tar.gz", hash = "sha256:87f9d39361adf7f16b9ca6e3b614badf7519da13092f2db3c80ca223c53c7656"}, ] +[[package]] +name = "dill" +version = "0.4.1" +description = "serialize all of Python" +optional = false +python-versions = ">=3.9" +groups = ["format"] +files = [ + {file = "dill-0.4.1-py3-none-any.whl", hash = "sha256:1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d"}, + {file = "dill-0.4.1.tar.gz", hash = "sha256:423092df4182177d4d8ba8290c8a5b640c66ab35ec7da59ccfa00f6fa3eea5fa"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + [[package]] name = "distlib" version = "0.4.0" @@ -324,14 +356,14 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.19.1" +version = "3.20.3" description = "A platform independent file lock." optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" groups = ["dev", "format"] files = [ - {file = "filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d"}, - {file = "filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58"}, + {file = "filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1"}, + {file = "filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1"}, ] [[package]] @@ -435,6 +467,22 @@ files = [ {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] +[[package]] +name = "isort" +version = "7.0.0" +description = "A Python utility / library to sort Python imports." +optional = false +python-versions = ">=3.10.0" +groups = ["format"] +files = [ + {file = "isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1"}, + {file = "isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187"}, +] + +[package.extras] +colors = ["colorama"] +plugins = ["setuptools"] + [[package]] name = "jinja2" version = "3.1.6" @@ -453,6 +501,93 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "librt" +version = "0.6.3" +description = "Mypyc runtime library" +optional = false +python-versions = ">=3.9" +groups = ["format"] +markers = "platform_python_implementation != \"PyPy\"" +files = [ + {file = "librt-0.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:45660d26569cc22ed30adf583389d8a0d1b468f8b5e518fcf9bfe2cd298f9dd1"}, + {file = "librt-0.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:54f3b2177fb892d47f8016f1087d21654b44f7fc4cf6571c1c6b3ea531ab0fcf"}, + {file = "librt-0.6.3-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c5b31bed2c2f2fa1fcb4815b75f931121ae210dc89a3d607fb1725f5907f1437"}, + {file = "librt-0.6.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f8ed5053ef9fb08d34f1fd80ff093ccbd1f67f147633a84cf4a7d9b09c0f089"}, + {file = "librt-0.6.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3f0e4bd9bcb0ee34fa3dbedb05570da50b285f49e52c07a241da967840432513"}, + {file = "librt-0.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d8f89c8d20dfa648a3f0a56861946eb00e5b00d6b00eea14bc5532b2fcfa8ef1"}, + {file = "librt-0.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:ecc2c526547eacd20cb9fbba19a5268611dbc70c346499656d6cf30fae328977"}, + {file = "librt-0.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fbedeb9b48614d662822ee514567d2d49a8012037fc7b4cd63f282642c2f4b7d"}, + {file = "librt-0.6.3-cp310-cp310-win32.whl", hash = "sha256:0765b0fe0927d189ee14b087cd595ae636bef04992e03fe6dfdaa383866c8a46"}, + {file = "librt-0.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:8c659f9fb8a2f16dc4131b803fa0144c1dadcb3ab24bb7914d01a6da58ae2457"}, + {file = "librt-0.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:61348cc488b18d1b1ff9f3e5fcd5ac43ed22d3e13e862489d2267c2337285c08"}, + {file = "librt-0.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64645b757d617ad5f98c08e07620bc488d4bced9ced91c6279cec418f16056fa"}, + {file = "librt-0.6.3-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:26b8026393920320bb9a811b691d73c5981385d537ffc5b6e22e53f7b65d4122"}, + {file = "librt-0.6.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d998b432ed9ffccc49b820e913c8f327a82026349e9c34fa3690116f6b70770f"}, + {file = "librt-0.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e18875e17ef69ba7dfa9623f2f95f3eda6f70b536079ee6d5763ecdfe6cc9040"}, + {file = "librt-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a218f85081fc3f70cddaed694323a1ad7db5ca028c379c214e3a7c11c0850523"}, + {file = "librt-0.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ef42ff4edd369e84433ce9b188a64df0837f4f69e3d34d3b34d4955c599d03f"}, + {file = "librt-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0e0f2b79993fec23a685b3e8107ba5f8675eeae286675a216da0b09574fa1e47"}, + {file = "librt-0.6.3-cp311-cp311-win32.whl", hash = "sha256:fd98cacf4e0fabcd4005c452cb8a31750258a85cab9a59fb3559e8078da408d7"}, + {file = "librt-0.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:e17b5b42c8045867ca9d1f54af00cc2275198d38de18545edaa7833d7e9e4ac8"}, + {file = "librt-0.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:87597e3d57ec0120a3e1d857a708f80c02c42ea6b00227c728efbc860f067c45"}, + {file = "librt-0.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74418f718083009108dc9a42c21bf2e4802d49638a1249e13677585fcc9ca176"}, + {file = "librt-0.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:514f3f363d1ebc423357d36222c37e5c8e6674b6eae8d7195ac9a64903722057"}, + {file = "librt-0.6.3-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cf1115207a5049d1f4b7b4b72de0e52f228d6c696803d94843907111cbf80610"}, + {file = "librt-0.6.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ad8ba80cdcea04bea7b78fcd4925bfbf408961e9d8397d2ee5d3ec121e20c08c"}, + {file = "librt-0.6.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4018904c83eab49c814e2494b4e22501a93cdb6c9f9425533fe693c3117126f9"}, + {file = "librt-0.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8983c5c06ac9c990eac5eb97a9f03fe41dc7e9d7993df74d9e8682a1056f596c"}, + {file = "librt-0.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7769c579663a6f8dbf34878969ac71befa42067ce6bf78e6370bf0d1194997c"}, + {file = "librt-0.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d3c9a07eafdc70556f8c220da4a538e715668c0c63cabcc436a026e4e89950bf"}, + {file = "librt-0.6.3-cp312-cp312-win32.whl", hash = "sha256:38320386a48a15033da295df276aea93a92dfa94a862e06893f75ea1d8bbe89d"}, + {file = "librt-0.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:c0ecf4786ad0404b072196b5df774b1bb23c8aacdcacb6c10b4128bc7b00bd01"}, + {file = "librt-0.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:9f2a6623057989ebc469cd9cc8fe436c40117a0147627568d03f84aef7854c55"}, + {file = "librt-0.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9e716f9012148a81f02f46a04fc4c663420c6fbfeacfac0b5e128cf43b4413d3"}, + {file = "librt-0.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:669ff2495728009a96339c5ad2612569c6d8be4474e68f3f3ac85d7c3261f5f5"}, + {file = "librt-0.6.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:349b6873ebccfc24c9efd244e49da9f8a5c10f60f07575e248921aae2123fc42"}, + {file = "librt-0.6.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c74c26736008481c9f6d0adf1aedb5a52aff7361fea98276d1f965c0256ee70"}, + {file = "librt-0.6.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:408a36ddc75e91918cb15b03460bdc8a015885025d67e68c6f78f08c3a88f522"}, + {file = "librt-0.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e61ab234624c9ffca0248a707feffe6fac2343758a36725d8eb8a6efef0f8c30"}, + {file = "librt-0.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:324462fe7e3896d592b967196512491ec60ca6e49c446fe59f40743d08c97917"}, + {file = "librt-0.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:36b2ec8c15030002c7f688b4863e7be42820d7c62d9c6eece3db54a2400f0530"}, + {file = "librt-0.6.3-cp313-cp313-win32.whl", hash = "sha256:25b1b60cb059471c0c0c803e07d0dfdc79e41a0a122f288b819219ed162672a3"}, + {file = "librt-0.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:10a95ad074e2a98c9e4abc7f5b7d40e5ecbfa84c04c6ab8a70fabf59bd429b88"}, + {file = "librt-0.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:17000df14f552e86877d67e4ab7966912224efc9368e998c96a6974a8d609bf9"}, + {file = "librt-0.6.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8e695f25d1a425ad7a272902af8ab8c8d66c1998b177e4b5f5e7b4e215d0c88a"}, + {file = "librt-0.6.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3e84a4121a7ae360ca4da436548a9c1ca8ca134a5ced76c893cc5944426164bd"}, + {file = "librt-0.6.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:05f385a414de3f950886ea0aad8f109650d4b712cf9cc14cc17f5f62a9ab240b"}, + {file = "librt-0.6.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36a8e337461150b05ca2c7bdedb9e591dfc262c5230422cea398e89d0c746cdc"}, + {file = "librt-0.6.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dcbe48f6a03979384f27086484dc2a14959be1613cb173458bd58f714f2c48f3"}, + {file = "librt-0.6.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4bca9e4c260233fba37b15c4ec2f78aa99c1a79fbf902d19dd4a763c5c3fb751"}, + {file = "librt-0.6.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:760c25ed6ac968e24803eb5f7deb17ce026902d39865e83036bacbf5cf242aa8"}, + {file = "librt-0.6.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4aa4a93a353ccff20df6e34fa855ae8fd788832c88f40a9070e3ddd3356a9f0e"}, + {file = "librt-0.6.3-cp314-cp314-win32.whl", hash = "sha256:cb92741c2b4ea63c09609b064b26f7f5d9032b61ae222558c55832ec3ad0bcaf"}, + {file = "librt-0.6.3-cp314-cp314-win_amd64.whl", hash = "sha256:fdcd095b1b812d756fa5452aca93b962cf620694c0cadb192cec2bb77dcca9a2"}, + {file = "librt-0.6.3-cp314-cp314-win_arm64.whl", hash = "sha256:822ca79e28720a76a935c228d37da6579edef048a17cd98d406a2484d10eda78"}, + {file = "librt-0.6.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:078cd77064d1640cb7b0650871a772956066174d92c8aeda188a489b58495179"}, + {file = "librt-0.6.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5cc22f7f5c0cc50ed69f4b15b9c51d602aabc4500b433aaa2ddd29e578f452f7"}, + {file = "librt-0.6.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:14b345eb7afb61b9fdcdfda6738946bd11b8e0f6be258666b0646af3b9bb5916"}, + {file = "librt-0.6.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d46aa46aa29b067f0b8b84f448fd9719aaf5f4c621cc279164d76a9dc9ab3e8"}, + {file = "librt-0.6.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1b51ba7d9d5d9001494769eca8c0988adce25d0a970c3ba3f2eb9df9d08036fc"}, + {file = "librt-0.6.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ced0925a18fddcff289ef54386b2fc230c5af3c83b11558571124bfc485b8c07"}, + {file = "librt-0.6.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:6bac97e51f66da2ca012adddbe9fd656b17f7368d439de30898f24b39512f40f"}, + {file = "librt-0.6.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b2922a0e8fa97395553c304edc3bd36168d8eeec26b92478e292e5d4445c1ef0"}, + {file = "librt-0.6.3-cp314-cp314t-win32.whl", hash = "sha256:f33462b19503ba68d80dac8a1354402675849259fb3ebf53b67de86421735a3a"}, + {file = "librt-0.6.3-cp314-cp314t-win_amd64.whl", hash = "sha256:04f8ce401d4f6380cfc42af0f4e67342bf34c820dae01343f58f472dbac75dcf"}, + {file = "librt-0.6.3-cp314-cp314t-win_arm64.whl", hash = "sha256:afb39550205cc5e5c935762c6bf6a2bb34f7d21a68eadb25e2db7bf3593fecc0"}, + {file = "librt-0.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:09262cb2445b6f15d09141af20b95bb7030c6f13b00e876ad8fdd1a9045d6aa5"}, + {file = "librt-0.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57705e8eec76c5b77130d729c0f70190a9773366c555c5457c51eace80afd873"}, + {file = "librt-0.6.3-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3ac2a7835434b31def8ed5355dd9b895bbf41642d61967522646d1d8b9681106"}, + {file = "librt-0.6.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71f0a5918aebbea1e7db2179a8fe87e8a8732340d9e8b8107401fb407eda446e"}, + {file = "librt-0.6.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa346e202e6e1ebc01fe1c69509cffe486425884b96cb9ce155c99da1ecbe0e9"}, + {file = "librt-0.6.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:92267f865c7bbd12327a0d394666948b9bf4b51308b52947c0cc453bfa812f5d"}, + {file = "librt-0.6.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:86605d5bac340beb030cbc35859325982a79047ebdfba1e553719c7126a2389d"}, + {file = "librt-0.6.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:98e4bbecbef8d2a60ecf731d735602feee5ac0b32117dbbc765e28b054bac912"}, + {file = "librt-0.6.3-cp39-cp39-win32.whl", hash = "sha256:3caa0634c02d5ff0b2ae4a28052e0d8c5f20d497623dc13f629bd4a9e2a6efad"}, + {file = "librt-0.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:b47395091e7e0ece1e6ebac9b98bf0c9084d1e3d3b2739aa566be7e56e3f7bf2"}, + {file = "librt-0.6.3.tar.gz", hash = "sha256:c724a884e642aa2bbad52bb0203ea40406ad742368a5f90da1b220e970384aae"}, +] + [[package]] name = "markupsafe" version = "3.0.2" @@ -524,55 +659,68 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +optional = false +python-versions = ">=3.6" +groups = ["format"] +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 = "mypy" -version = "1.18.2" +version = "1.19.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.9" groups = ["format"] files = [ - {file = "mypy-1.18.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eab0cf6294dafe397c261a75f96dc2c31bffe3b944faa24db5def4e2b0f77c"}, - {file = "mypy-1.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a780ca61fc239e4865968ebc5240bb3bf610ef59ac398de9a7421b54e4a207e"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448acd386266989ef11662ce3c8011fd2a7b632e0ec7d61a98edd8e27472225b"}, - {file = "mypy-1.18.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f9e171c465ad3901dc652643ee4bffa8e9fef4d7d0eece23b428908c77a76a66"}, - {file = "mypy-1.18.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:592ec214750bc00741af1f80cbf96b5013d81486b7bb24cb052382c19e40b428"}, - {file = "mypy-1.18.2-cp310-cp310-win_amd64.whl", hash = "sha256:7fb95f97199ea11769ebe3638c29b550b5221e997c63b14ef93d2e971606ebed"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:807d9315ab9d464125aa9fcf6d84fde6e1dc67da0b6f80e7405506b8ac72bc7f"}, - {file = "mypy-1.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:776bb00de1778caf4db739c6e83919c1d85a448f71979b6a0edd774ea8399341"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1379451880512ffce14505493bd9fe469e0697543717298242574882cf8cdb8d"}, - {file = "mypy-1.18.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1331eb7fd110d60c24999893320967594ff84c38ac6d19e0a76c5fd809a84c86"}, - {file = "mypy-1.18.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3ca30b50a51e7ba93b00422e486cbb124f1c56a535e20eff7b2d6ab72b3b2e37"}, - {file = "mypy-1.18.2-cp311-cp311-win_amd64.whl", hash = "sha256:664dc726e67fa54e14536f6e1224bcfce1d9e5ac02426d2326e2bb4e081d1ce8"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:33eca32dd124b29400c31d7cf784e795b050ace0e1f91b8dc035672725617e34"}, - {file = "mypy-1.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a3c47adf30d65e89b2dcd2fa32f3aeb5e94ca970d2c15fcb25e297871c8e4764"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d6c838e831a062f5f29d11c9057c6009f60cb294fea33a98422688181fe2893"}, - {file = "mypy-1.18.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01199871b6110a2ce984bde85acd481232d17413868c9807e95c1b0739a58914"}, - {file = "mypy-1.18.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a2afc0fa0b0e91b4599ddfe0f91e2c26c2b5a5ab263737e998d6817874c5f7c8"}, - {file = "mypy-1.18.2-cp312-cp312-win_amd64.whl", hash = "sha256:d8068d0afe682c7c4897c0f7ce84ea77f6de953262b12d07038f4d296d547074"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:07b8b0f580ca6d289e69209ec9d3911b4a26e5abfde32228a288eb79df129fcc"}, - {file = "mypy-1.18.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed4482847168439651d3feee5833ccedbf6657e964572706a2adb1f7fa4dfe2e"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ad2afadd1e9fea5cf99a45a822346971ede8685cc581ed9cd4d42eaf940986"}, - {file = "mypy-1.18.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a431a6f1ef14cf8c144c6b14793a23ec4eae3db28277c358136e79d7d062f62d"}, - {file = "mypy-1.18.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7ab28cc197f1dd77a67e1c6f35cd1f8e8b73ed2217e4fc005f9e6a504e46e7ba"}, - {file = "mypy-1.18.2-cp313-cp313-win_amd64.whl", hash = "sha256:0e2785a84b34a72ba55fb5daf079a1003a34c05b22238da94fcae2bbe46f3544"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:62f0e1e988ad41c2a110edde6c398383a889d95b36b3e60bcf155f5164c4fdce"}, - {file = "mypy-1.18.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8795a039bab805ff0c1dfdb8cd3344642c2b99b8e439d057aba30850b8d3423d"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ca1e64b24a700ab5ce10133f7ccd956a04715463d30498e64ea8715236f9c9c"}, - {file = "mypy-1.18.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d924eef3795cc89fecf6bedc6ed32b33ac13e8321344f6ddbf8ee89f706c05cb"}, - {file = "mypy-1.18.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:20c02215a080e3a2be3aa50506c67242df1c151eaba0dcbc1e4e557922a26075"}, - {file = "mypy-1.18.2-cp314-cp314-win_amd64.whl", hash = "sha256:749b5f83198f1ca64345603118a6f01a4e99ad4bf9d103ddc5a3200cc4614adf"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:25a9c8fb67b00599f839cf472713f54249a62efd53a54b565eb61956a7e3296b"}, - {file = "mypy-1.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c2b9c7e284ee20e7598d6f42e13ca40b4928e6957ed6813d1ab6348aa3f47133"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d6985ed057513e344e43a26cc1cd815c7a94602fb6a3130a34798625bc2f07b6"}, - {file = "mypy-1.18.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22f27105f1525ec024b5c630c0b9f36d5c1cc4d447d61fe51ff4bd60633f47ac"}, - {file = "mypy-1.18.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:030c52d0ea8144e721e49b1f68391e39553d7451f0c3f8a7565b59e19fcb608b"}, - {file = "mypy-1.18.2-cp39-cp39-win_amd64.whl", hash = "sha256:aa5e07ac1a60a253445797e42b8b2963c9675563a94f11291ab40718b016a7a0"}, - {file = "mypy-1.18.2-py3-none-any.whl", hash = "sha256:22a1748707dd62b58d2ae53562ffc4d7f8bcc727e8ac7cbc69c053ddc874d47e"}, - {file = "mypy-1.18.2.tar.gz", hash = "sha256:06a398102a5f203d7477b2923dda3634c36727fa5c237d8f859ef90c42a9924b"}, + {file = "mypy-1.19.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec"}, + {file = "mypy-1.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b"}, + {file = "mypy-1.19.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6"}, + {file = "mypy-1.19.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74"}, + {file = "mypy-1.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1"}, + {file = "mypy-1.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac"}, + {file = "mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288"}, + {file = "mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab"}, + {file = "mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6"}, + {file = "mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331"}, + {file = "mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925"}, + {file = "mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042"}, + {file = "mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1"}, + {file = "mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e"}, + {file = "mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2"}, + {file = "mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8"}, + {file = "mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a"}, + {file = "mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13"}, + {file = "mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250"}, + {file = "mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b"}, + {file = "mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e"}, + {file = "mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef"}, + {file = "mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75"}, + {file = "mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd"}, + {file = "mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1"}, + {file = "mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718"}, + {file = "mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b"}, + {file = "mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045"}, + {file = "mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957"}, + {file = "mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f"}, + {file = "mypy-1.19.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3"}, + {file = "mypy-1.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a"}, + {file = "mypy-1.19.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67"}, + {file = "mypy-1.19.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e"}, + {file = "mypy-1.19.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376"}, + {file = "mypy-1.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24"}, + {file = "mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247"}, + {file = "mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba"}, ] [package.dependencies] +librt = {version = ">=0.6.2", markers = "platform_python_implementation != \"PyPy\""} mypy_extensions = ">=1.0.0" pathspec = ">=0.9.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -623,16 +771,22 @@ files = [ [[package]] name = "pathspec" -version = "0.12.1" +version = "1.0.3" description = "Utility library for gitignore style pattern matching of file paths." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" groups = ["format"] files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, + {file = "pathspec-1.0.3-py3-none-any.whl", hash = "sha256:e80767021c1cc524aa3fb14bedda9c34406591343cc42797b386ce7b9354fb6c"}, + {file = "pathspec-1.0.3.tar.gz", hash = "sha256:bac5cf97ae2c2876e2d25ebb15078eb04d76e4b98921ee31c6f85ade8b59444d"}, ] +[package.extras] +hyperscan = ["hyperscan (>=0.7)"] +optional = ["typing-extensions (>=4)"] +re2 = ["google-re2 (>=1.1)"] +tests = ["pytest (>=9)", "typing-extensions (>=4.15)"] + [[package]] name = "platformdirs" version = "4.4.0" @@ -668,14 +822,14 @@ testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "4.5.0" +version = "4.5.1" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.10" groups = ["dev", "format"] files = [ - {file = "pre_commit-4.5.0-py2.py3-none-any.whl", hash = "sha256:25e2ce09595174d9c97860a95609f9f852c0614ba602de3561e267547f2335e1"}, - {file = "pre_commit-4.5.0.tar.gz", hash = "sha256:dc5a065e932b19fc1d4c653c6939068fe54325af8e741e74e88db4d28a4dd66b"}, + {file = "pre_commit-4.5.1-py2.py3-none-any.whl", hash = "sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77"}, + {file = "pre_commit-4.5.1.tar.gz", hash = "sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61"}, ] [package.dependencies] @@ -702,14 +856,14 @@ wcwidth = "*" [[package]] name = "pydantic" -version = "2.12.4" +version = "2.12.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.9" groups = ["main"] files = [ - {file = "pydantic-2.12.4-py3-none-any.whl", hash = "sha256:92d3d202a745d46f9be6df459ac5a064fdaa3c1c4cd8adcfa332ccf3c05f871e"}, - {file = "pydantic-2.12.4.tar.gz", hash = "sha256:0f8cb9555000a4b5b617f66bfd2566264c4984b27589d3b845685983e8ea85ac"}, + {file = "pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d"}, + {file = "pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49"}, ] [package.dependencies] @@ -871,16 +1025,46 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pylint" +version = "4.0.4" +description = "python code static checker" +optional = false +python-versions = ">=3.10.0" +groups = ["format"] +files = [ + {file = "pylint-4.0.4-py3-none-any.whl", hash = "sha256:63e06a37d5922555ee2c20963eb42559918c20bd2b21244e4ef426e7c43b92e0"}, + {file = "pylint-4.0.4.tar.gz", hash = "sha256:d9b71674e19b1c36d79265b5887bf8e55278cbe236c9e95d22dc82cf044fdbd2"}, +] + +[package.dependencies] +astroid = ">=4.0.2,<=4.1.dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version == \"3.11\""}, +] +isort = ">=5,<5.13 || >5.13,<8" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2" +tomli = {version = ">=1.1", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + [[package]] name = "pytest" -version = "9.0.1" +version = "9.0.2" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.10" groups = ["dev"] files = [ - {file = "pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad"}, - {file = "pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8"}, + {file = "pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b"}, + {file = "pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11"}, ] [package.dependencies] @@ -1030,31 +1214,31 @@ prompt_toolkit = ">=2.0,<4.0" [[package]] name = "ruff" -version = "0.12.12" +version = "0.14.13" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" groups = ["format"] files = [ - {file = "ruff-0.12.12-py3-none-linux_armv6l.whl", hash = "sha256:de1c4b916d98ab289818e55ce481e2cacfaad7710b01d1f990c497edf217dafc"}, - {file = "ruff-0.12.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7acd6045e87fac75a0b0cdedacf9ab3e1ad9d929d149785903cff9bb69ad9727"}, - {file = "ruff-0.12.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:abf4073688d7d6da16611f2f126be86523a8ec4343d15d276c614bda8ec44edb"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:968e77094b1d7a576992ac078557d1439df678a34c6fe02fd979f973af167577"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42a67d16e5b1ffc6d21c5f67851e0e769517fb57a8ebad1d0781b30888aa704e"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b216ec0a0674e4b1214dcc998a5088e54eaf39417327b19ffefba1c4a1e4971e"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:59f909c0fdd8f1dcdbfed0b9569b8bf428cf144bec87d9de298dcd4723f5bee8"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ac93d87047e765336f0c18eacad51dad0c1c33c9df7484c40f98e1d773876f5"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:01543c137fd3650d322922e8b14cc133b8ea734617c4891c5a9fccf4bfc9aa92"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2afc2fa864197634e549d87fb1e7b6feb01df0a80fd510d6489e1ce8c0b1cc45"}, - {file = "ruff-0.12.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0c0945246f5ad776cb8925e36af2438e66188d2b57d9cf2eed2c382c58b371e5"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a0fbafe8c58e37aae28b84a80ba1817f2ea552e9450156018a478bf1fa80f4e4"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:b9c456fb2fc8e1282affa932c9e40f5ec31ec9cbb66751a316bd131273b57c23"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f12856123b0ad0147d90b3961f5c90e7427f9acd4b40050705499c98983f489"}, - {file = "ruff-0.12.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:26a1b5a2bf7dd2c47e3b46d077cd9c0fc3b93e6c6cc9ed750bd312ae9dc302ee"}, - {file = "ruff-0.12.12-py3-none-win32.whl", hash = "sha256:173be2bfc142af07a01e3a759aba6f7791aa47acf3604f610b1c36db888df7b1"}, - {file = "ruff-0.12.12-py3-none-win_amd64.whl", hash = "sha256:e99620bf01884e5f38611934c09dd194eb665b0109104acae3ba6102b600fd0d"}, - {file = "ruff-0.12.12-py3-none-win_arm64.whl", hash = "sha256:2a8199cab4ce4d72d158319b63370abf60991495fb733db96cd923a34c52d093"}, - {file = "ruff-0.12.12.tar.gz", hash = "sha256:b86cd3415dbe31b3b46a71c598f4c4b2f550346d1ccf6326b347cc0c8fd063d6"}, + {file = "ruff-0.14.13-py3-none-linux_armv6l.whl", hash = "sha256:76f62c62cd37c276cb03a275b198c7c15bd1d60c989f944db08a8c1c2dbec18b"}, + {file = "ruff-0.14.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:914a8023ece0528d5cc33f5a684f5f38199bbb566a04815c2c211d8f40b5d0ed"}, + {file = "ruff-0.14.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d24899478c35ebfa730597a4a775d430ad0d5631b8647a3ab368c29b7e7bd063"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9aaf3870f14d925bbaf18b8a2347ee0ae7d95a2e490e4d4aea6813ed15ebc80e"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac5b7f63dd3b27cc811850f5ffd8fff845b00ad70e60b043aabf8d6ecc304e09"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2b1097750d90ba82ce4ba676e85230a0ed694178ca5e61aa9b459970b3eb9"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:7d0bf87705acbbcb8d4c24b2d77fbb73d40210a95c3903b443cd9e30824a5032"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3eb5da8e2c9e9f13431032fdcbe7681de9ceda5835efee3269417c13f1fed5c"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:642442b42957093811cd8d2140dfadd19c7417030a7a68cf8d51fcdd5f217427"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4acdf009f32b46f6e8864af19cbf6841eaaed8638e65c8dac845aea0d703c841"}, + {file = "ruff-0.14.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:591a7f68860ea4e003917d19b5c4f5ac39ff558f162dc753a2c5de897fd5502c"}, + {file = "ruff-0.14.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:774c77e841cc6e046fc3e91623ce0903d1cd07e3a36b1a9fe79b81dab3de506b"}, + {file = "ruff-0.14.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:61f4e40077a1248436772bb6512db5fc4457fe4c49e7a94ea7c5088655dd21ae"}, + {file = "ruff-0.14.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:6d02f1428357fae9e98ac7aa94b7e966fd24151088510d32cf6f902d6c09235e"}, + {file = "ruff-0.14.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:e399341472ce15237be0c0ae5fbceca4b04cd9bebab1a2b2c979e015455d8f0c"}, + {file = "ruff-0.14.13-py3-none-win32.whl", hash = "sha256:ef720f529aec113968b45dfdb838ac8934e519711da53a0456038a0efecbd680"}, + {file = "ruff-0.14.13-py3-none-win_amd64.whl", hash = "sha256:6070bd026e409734b9257e03e3ef18c6e1a216f0435c6751d7a8ec69cb59abef"}, + {file = "ruff-0.14.13-py3-none-win_arm64.whl", hash = "sha256:7ab819e14f1ad9fe39f246cfcc435880ef7a9390d81a2b6ac7e01039083dd247"}, + {file = "ruff-0.14.13.tar.gz", hash = "sha256:83cd6c0763190784b99650a20fec7633c59f6ebe41c5cc9d45ee42749563ad47"}, ] [[package]] @@ -1133,7 +1317,7 @@ version = "0.13.3" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["dev", "format"] files = [ {file = "tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0"}, {file = "tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1"}, @@ -1150,7 +1334,7 @@ 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"}, ] -markers = {dev = "python_version < \"3.13\""} +markers = {dev = "python_version <= \"3.12\""} [[package]] name = "typing-inspection" @@ -1169,19 +1353,19 @@ typing-extensions = ">=4.12.0" [[package]] name = "virtualenv" -version = "20.34.0" +version = "20.36.1" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" groups = ["dev", "format"] files = [ - {file = "virtualenv-20.34.0-py3-none-any.whl", hash = "sha256:341f5afa7eee943e4984a9207c025feedd768baff6753cd660c857ceb3e36026"}, - {file = "virtualenv-20.34.0.tar.gz", hash = "sha256:44815b2c9dee7ed86e387b842a84f20b93f7f417f95886ca1996a72a4138eb1a"}, + {file = "virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f"}, + {file = "virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba"}, ] [package.dependencies] distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" +filelock = {version = ">=3.20.1,<4", markers = "python_version >= \"3.10\""} platformdirs = ">=3.9.1,<5" typing-extensions = {version = ">=4.13.2", markers = "python_version < \"3.11\""} @@ -1204,4 +1388,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.10" -content-hash = "f4fdce0ee373a4d42768481ef645997ccbeacb88ae83172ef2efaf315643a1a4" +content-hash = "4a09f7a4dfcd8da0746140a33c738d32715c05b0e286acdb267103f03698467a" diff --git a/pyproject.toml b/pyproject.toml index 53e282ef..c1b2bc55 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -97,6 +97,10 @@ disable = ["all"] # diable all rule first enable = ["too-many-statements"] # then enable too-many-statements rule max-statements = 50 # function max statement +[tool.pylint.main] +py-version = "3.10" +ignore = [".venv", "venv", "examples", "tests", "build", "dist"] + ############################################################ # Dependency group ############################################################ @@ -128,30 +132,14 @@ addopts = [ "-ra" ] - - - - - - - - - - - - - - - - - [tool.poetry.group.format] optional = true [tool.poetry.group.format.dependencies] pre-commit = "^4" mypy = "^1" -ruff = "^0" -black = "^25" +ruff = "^0.14" +black = ">=25,<27" +pylint = "^4" [tool.commitizen] name = "cz_conventional_commits" diff --git a/tests/README.md b/tests/README.md index b274236a..b4459938 100644 --- a/tests/README.md +++ b/tests/README.md @@ -121,4 +121,4 @@ make test-cov pytest tests/chat/ pytest tests/knowledge/ pytest tests/workflow/ -``` \ No newline at end of file +```