From bf5ec2b65f744b50992f92c02ae6c898f8c6be41 Mon Sep 17 00:00:00 2001 From: ytqh Date: Mon, 3 Feb 2025 15:22:56 +0800 Subject: [PATCH 01/26] fix build info --- api/Dockerfile | 4 +++- docker/docker-compose-template.yaml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index fd3532e32d..167f8c69ed 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -55,9 +55,11 @@ RUN apt-get update \ && echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list \ && apt-get update \ # For Security - && apt-get install -y --no-install-recommends expat=2.6.4-1 libldap-2.5-0=2.5.19+dfsg-1 perl=5.40.0-8 libsqlite3-0=3.46.1-1 zlib1g=1:1.3.dfsg+really1.3.1-1+b1 \ + && apt-get install -y --no-install-recommends expat=2.6.4-1 libldap-2.5-0 perl=5.40.0-8 libsqlite3-0=3.46.1-1 zlib1g=1:1.3.dfsg+really1.3.1-1+b1 \ # install a chinese font to support the use of tools like matplotlib && apt-get install -y fonts-noto-cjk \ + # Add libmagic1 installation + && apt-get install -y libmagic1 libmagic-mgc=1:5.44-3 \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 6f6508c77b..b5e135a065 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -2,7 +2,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: langgenius/dify-api:0.15.2 + image: akiyu303/lefeng-api:0.15.2 restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -27,7 +27,7 @@ services: # worker service # The Celery worker for processing the queue. worker: - image: langgenius/dify-api:0.15.2 + image: akiyu303/lefeng-api:0.15.2 restart: always extra_hosts: - "host.docker.internal:host-gateway" From 1c770fec97df2de74e764b5cafccfc472fefc1f5 Mon Sep 17 00:00:00 2001 From: ytqh Date: Mon, 3 Feb 2025 15:23:08 +0800 Subject: [PATCH 02/26] upadte --- docker/docker-compose.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 0c4c3b2bfe..90c4b3f2fc 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -396,7 +396,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: langgenius/dify-api:0.15.2 + image: akiyu303/lefeng-api:0.15.2 restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -421,7 +421,7 @@ services: # worker service # The Celery worker for processing the queue. worker: - image: langgenius/dify-api:0.15.2 + image: akiyu303/lefeng-api:0.15.2 restart: always extra_hosts: - "host.docker.internal:host-gateway" From 75113374e2854bf2087f5965572d5df2fb728827 Mon Sep 17 00:00:00 2001 From: ytqh Date: Mon, 3 Feb 2025 15:23:49 +0800 Subject: [PATCH 03/26] change template --- docker/docker-compose-template.yaml | 6 +++--- docker/docker-compose.yaml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index b5e135a065..88ca6b0257 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -2,7 +2,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: akiyu303/lefeng-api:0.15.2 + image: akiyu303/lefeng-api:latest restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -27,7 +27,7 @@ services: # worker service # The Celery worker for processing the queue. worker: - image: akiyu303/lefeng-api:0.15.2 + image: akiyu303/lefeng-api:latest restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -51,7 +51,7 @@ services: # Frontend web application. web: - image: langgenius/dify-web:0.15.2 + image: akiyu303/lefeng-web:latest restart: always environment: CONSOLE_API_URL: ${CONSOLE_API_URL:-} diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 90c4b3f2fc..4f9886f27e 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -396,7 +396,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: akiyu303/lefeng-api:0.15.2 + image: akiyu303/lefeng-api:latest restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -421,7 +421,7 @@ services: # worker service # The Celery worker for processing the queue. worker: - image: akiyu303/lefeng-api:0.15.2 + image: akiyu303/lefeng-api:latest restart: always extra_hosts: - "host.docker.internal:host-gateway" @@ -445,7 +445,7 @@ services: # Frontend web application. web: - image: langgenius/dify-web:0.15.2 + image: akiyu303/lefeng-web:latest restart: always environment: CONSOLE_API_URL: ${CONSOLE_API_URL:-} From 66be912f77f956d23082ad0b34fb614d62d9dc57 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 19:38:43 +0800 Subject: [PATCH 04/26] fix docker build --- api/Dockerfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 167f8c69ed..21ee010a2c 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -52,14 +52,17 @@ RUN apt-get update \ && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev \ # if you located in China, you can use aliyun mirror to speed up # && echo "deb http://mirrors.aliyun.com/debian testing main" > /etc/apt/sources.list \ - && echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list \ + # Don't replace the sources.list file, create a separate testing.list file + && echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list \ + # Create apt preferences to prioritize main repository + && echo 'Package: *\nPin: release a=bookworm\nPin-Priority: 900\n\nPackage: *\nPin: release a=testing\nPin-Priority: 400' > /etc/apt/preferences.d/priority \ && apt-get update \ # For Security - && apt-get install -y --no-install-recommends expat=2.6.4-1 libldap-2.5-0 perl=5.40.0-8 libsqlite3-0=3.46.1-1 zlib1g=1:1.3.dfsg+really1.3.1-1+b1 \ + && apt-get install -y --no-install-recommends expat libldap-2.5-0 perl libsqlite3-0 zlib1g \ # install a chinese font to support the use of tools like matplotlib && apt-get install -y fonts-noto-cjk \ - # Add libmagic1 installation - && apt-get install -y libmagic1 libmagic-mgc=1:5.44-3 \ + # Add libmagic1 installation - specify version from bookworm + && apt-get install -y -t bookworm libmagic1 libmagic-mgc \ && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* From f36c3783903071ebb6821a3eddda4ae1bc94fdbe Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 20:00:19 +0800 Subject: [PATCH 05/26] add oss cmd --- api/commands.py | 138 +++++++++++++++++++++++++++++++-- api/extensions/ext_commands.py | 4 + 2 files changed, 134 insertions(+), 8 deletions(-) diff --git a/api/commands.py b/api/commands.py index 334e7daab5..8f11bc01d2 100644 --- a/api/commands.py +++ b/api/commands.py @@ -1,13 +1,13 @@ import base64 import json import logging +import os import secrets +import time +from pathlib import Path from typing import Optional import click -from flask import current_app -from werkzeug.exceptions import NotFound - from configs import dify_config from constants.languages import languages from core.rag.datasource.vdb.vector_factory import Vector @@ -16,15 +16,19 @@ from core.rag.models.document import Document from events.app_event import app_was_created from extensions.ext_database import db from extensions.ext_redis import redis_client +from extensions.ext_storage import storage +from flask import current_app from libs.helper import email as email_validate from libs.password import hash_password, password_pattern, valid_password from libs.rsa import generate_key_pair from models import Tenant -from models.dataset import Dataset, DatasetCollectionBinding, DocumentSegment +from models.dataset import Dataset, DatasetCollectionBinding from models.dataset import Document as DatasetDocument -from models.model import Account, App, AppAnnotationSetting, AppMode, Conversation, MessageAnnotation +from models.dataset import DocumentSegment +from models.model import Account, App, AppAnnotationSetting, AppMode, Conversation, MessageAnnotation, UploadFile from models.provider import Provider, ProviderModel from services.account_service import RegisterService, TenantService +from werkzeug.exceptions import NotFound @click.command("reset-password", help="Reset the account password.") @@ -490,11 +494,10 @@ def add_qdrant_doc_id_index(field: str): click.echo(click.style("No dataset collection bindings found.", fg="red")) return import qdrant_client + from core.rag.datasource.vdb.qdrant.qdrant_vector import QdrantConfig from qdrant_client.http.exceptions import UnexpectedResponse from qdrant_client.http.models import PayloadSchemaType - from core.rag.datasource.vdb.qdrant.qdrant_vector import QdrantConfig - for binding in bindings: if dify_config.QDRANT_URL is None: raise ValueError("Qdrant URL is required.") @@ -507,7 +510,7 @@ def add_qdrant_doc_id_index(field: str): prefer_grpc=dify_config.QDRANT_GRPC_ENABLED, ) try: - client = qdrant_client.QdrantClient(**qdrant_config.to_qdrant_params()) + client = qdrant_client.QdrantClient(**qdrant_config.to_qdrant_params()) # type: ignore # create payload index client.create_payload_index(binding.collection_name, field, field_schema=PayloadSchemaType.KEYWORD) create_count += 1 @@ -649,3 +652,122 @@ where sites.id is null limit 1000""" break click.echo(click.style("Fix for missing app-related sites completed successfully!", fg="green")) + + +@click.command("upload-private-key-file-to-cloud-storage", help="upload private key file to cloud storage") +@click.option("--tenant_id", prompt=False, help="tenant_id") +def upload_private_key_file_cloud_storage(tenant_id: Optional[str] = None): + """ + upload private.pem to cloud storage + """ + click.echo( + click.style( + "Start upload private.pem to cloud storage", + fg="green", + ) + ) + + if not tenant_id: + click.echo( + click.style( + "Warning: did not provide an tenant_id, it will be auto queried in the database", + fg="yellow", + ) + ) + tenants_list: list[Tenant] = Tenant.query.all() + tenants = [item.id for item in tenants_list] + else: + tenants = [ + tenant_id, + ] + + for tenant_id in tenants: + click.echo( + click.style( + f"Current tenant_id is: {tenant_id}", + fg="green", + ) + ) + + file_key = f"privkeys/{tenant_id}/private.pem" + file_content = Path(f"{os.environ.get('STORAGE_LOCAL_PATH', 'storage')}/{file_key}").read_bytes() + storage.save(filename=file_key, data=file_content) + click.echo( + click.style( + f"Congratulations! file uploaded. file.key: {file_key}", + fg="green", + ) + ) + + +@click.command("upload-local-files-to-cloud-storage", help="upload local files to cloud storage") +def upload_local_files_to_cloud_storage(): + """ + upload local files to cloud storage + """ + click.echo( + click.style( + "Start upload local files to cloud storage", + fg="green", + ) + ) + + total_count = UploadFile.query.filter_by(storage_type="local").count() + click.echo(click.style(f"Total files to process: {total_count}", fg="green")) + + batch_size = 100 + processed_count = 0 + while processed_count < total_count: + files: list[UploadFile] = UploadFile.query.filter_by(storage_type="local").limit(batch_size).all() + + for file in files: + target_filepath = f"{os.environ.get('STORAGE_LOCAL_PATH', 'storage')}/{file.key}" + + # if the file exists + if not os.path.exists(target_filepath): + click.echo( + click.style( + f"Warning! file not exist. filepath: {target_filepath}, ignore this, continue", + fg="yellow", + ) + ) + processed_count += 1 + if processed_count % 10 == 0 or processed_count == total_count: + click.echo(click.style(f"Processed {processed_count}/{total_count} files\n", fg="blue")) + continue + + # Upload to cloud storage + file_content = Path(target_filepath).read_bytes() + storage.save(filename=file.key, data=file_content) + click.echo( + click.style( + f"File uploaded. file.key: {file.key}", + fg="green", + ) + ) + + # Update database record + try: + file.storage_type = os.environ["STORAGE_TYPE"] + db.session.commit() + click.echo( + click.style( + f"file.storage_type updated to database. file.key: {file.key}", + fg="green", + ) + ) + except Exception as e: + click.echo(click.style(f"An error occurred: {str(e)}", fg="red")) + db.session.rollback() + + processed_count += 1 + if processed_count % 10 == 0 or processed_count == total_count: + click.echo(click.style(f"Processed {processed_count}/{total_count} files\n", fg="blue")) + + time.sleep(3) + click.echo( + click.style( + "Congratulations! finish files uploaded.", + fg="green", + ) + ) diff --git a/api/extensions/ext_commands.py b/api/extensions/ext_commands.py index ccf0d316ca..d96b3e3b49 100644 --- a/api/extensions/ext_commands.py +++ b/api/extensions/ext_commands.py @@ -11,6 +11,8 @@ def init_app(app: DifyApp): reset_encrypt_key_pair, reset_password, upgrade_db, + upload_local_files_to_cloud_storage, + upload_private_key_file_cloud_storage, vdb_migrate, ) @@ -24,6 +26,8 @@ def init_app(app: DifyApp): create_tenant, upgrade_db, fix_app_site_missing, + upload_private_key_file_cloud_storage, + upload_local_files_to_cloud_storage, ] for cmd in cmds_to_register: app.cli.add_command(cmd) From 71bc05235c4c7c626de3f19c2a4331cf4e4e9791 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 21:06:37 +0800 Subject: [PATCH 06/26] support mark inner api --- api/controllers/inner_tools/__init__.py | 7 + .../inner_tools/markdown_to_pdf.py | 151 ++++ api/core/tools/tool_file_manager.py | 3 +- api/extensions/ext_blueprints.py | 6 +- ...80409a1_make_tool_file_user_id_optional.py | 37 + api/models/tools.py | 12 +- api/poetry.lock | 653 ++++-------------- api/pyproject.toml | 22 +- 8 files changed, 372 insertions(+), 519 deletions(-) create mode 100644 api/controllers/inner_tools/__init__.py create mode 100644 api/controllers/inner_tools/markdown_to_pdf.py create mode 100644 api/migrations/versions/2025_04_05_2100-e927d80409a1_make_tool_file_user_id_optional.py diff --git a/api/controllers/inner_tools/__init__.py b/api/controllers/inner_tools/__init__.py new file mode 100644 index 0000000000..7d52cbe00f --- /dev/null +++ b/api/controllers/inner_tools/__init__.py @@ -0,0 +1,7 @@ +from flask import Blueprint +from libs.external_api import ExternalApi + +bp = Blueprint("inner_tools", __name__, url_prefix="/inner_tools") +api = ExternalApi(bp) + +from . import markdown_to_pdf diff --git a/api/controllers/inner_tools/markdown_to_pdf.py b/api/controllers/inner_tools/markdown_to_pdf.py new file mode 100644 index 0000000000..6f8259c508 --- /dev/null +++ b/api/controllers/inner_tools/markdown_to_pdf.py @@ -0,0 +1,151 @@ +import io +import urllib.parse +import uuid +from pathlib import Path +from typing import Optional, Tuple + +import markdown +from controllers.inner_tools import api +from core.tools.tool_file_manager import ToolFileManager +from flask import Response, jsonify, request +from flask_restful import Resource # type: ignore +from models.account import Tenant +from reportlab.lib.pagesizes import letter +from reportlab.pdfgen import canvas + + +class MarkdownToPDFApi(Resource): + def post(self): + """Convert markdown to PDF + + This endpoint takes markdown text and converts it to a PDF document. + Returns URL of uploaded PDF file. + No authentication required. + """ + # Parse request arguments + if not request.is_json: + return {"error": "Request must be JSON"}, 400 + + data = request.get_json() + markdown_text = data.get('markdown_text') + title = data.get('title', 'Document') + + if not markdown_text: + return {"error": "markdown_text is required"}, 400 + + # get first tenant from database + tenant = Tenant.query.first() + if not tenant: + return {"error": "no tenant found"}, 400 + + tenant_id = tenant.id + + # Generate PDF + pdf_binary, filename = self._generate_pdf_binary(markdown_text, title) + + # Save the file using ToolFileManager + tool_file = ToolFileManager.create_file_by_raw( + user_id=None, + tenant_id=tenant_id, + conversation_id=None, + file_binary=pdf_binary, + mimetype='application/pdf', + ) + + # Return the file info with URL + file_url = ToolFileManager.sign_file(tool_file.id, '.pdf') + return jsonify({'url': file_url, 'file_id': tool_file.id, 'file_name': filename, 'file_size': tool_file.size}) + + def _generate_pdf_binary(self, markdown_text: str, title: str) -> Tuple[bytes, str]: + """Generate PDF from markdown text and return the binary data and filename""" + # Convert markdown to HTML (for potential future enhancement) + html_content = markdown.markdown(markdown_text, extensions=['extra']) + + # Create PDF using reportlab + buffer = io.BytesIO() + pdf = canvas.Canvas(buffer, pagesize=letter) + + # Add title + pdf.setFont("Helvetica-Bold", 16) + pdf.drawString(72, 760, title) + + # Add markdown content + pdf.setFont("Helvetica", 12) + y_position = 730 + + # Simple text rendering - each line as a separate line in the PDF + for line in markdown_text.split('\n'): + if line.startswith('# '): # H1 heading + pdf.setFont("Helvetica-Bold", 14) + pdf.drawString(72, y_position, line[2:]) + y_position -= 20 + pdf.setFont("Helvetica", 12) + elif line.startswith('## '): # H2 heading + pdf.setFont("Helvetica-Bold", 13) + pdf.drawString(72, y_position, line[3:]) + y_position -= 18 + pdf.setFont("Helvetica", 12) + elif line.startswith('### '): # H3 heading + pdf.setFont("Helvetica-Bold", 12) + pdf.drawString(72, y_position, line[4:]) + y_position -= 16 + pdf.setFont("Helvetica", 12) + elif line.strip() == '': # Empty line + y_position -= 12 + else: # Regular text + pdf.drawString(72, y_position, line) + y_position -= 14 + + # Check if we need a new page + if y_position < 72: + pdf.showPage() + y_position = 760 + pdf.setFont("Helvetica", 12) + + # Save the PDF + pdf.save() + buffer.seek(0) + + # Generate a filename based on the title + filename = f"{title.replace(' ', '_')}_{uuid.uuid4().hex[:8]}.pdf" + + return buffer.getvalue(), filename + + +# Add API endpoint for getting PDF from stored file +class MarkdownToPDFFileApi(Resource): + def get(self, file_id): + """Get a PDF file by its tool file ID + + This endpoint retrieves a PDF file stored in the system using its tool file ID. + No authentication required. + """ + try: + # Get the file binary from ToolFileManager + result = ToolFileManager.get_file_binary(file_id) + + if result is None: + return {"error": "File not found"}, 404 + + # Safely unpack result only after confirming it's not None + file_binary, mimetype = result + + if mimetype != 'application/pdf': + return {"error": "File is not a PDF"}, 400 + + # Return the PDF + response = Response( + file_binary, + mimetype='application/pdf', + headers={ + 'Content-Disposition': f'attachment; filename="{file_id}.pdf"', + 'Content-Type': 'application/pdf', + }, + ) + return response + except Exception as e: + return {"error": str(e)}, 500 + + +api.add_resource(MarkdownToPDFApi, '/markdown-to-pdf') +api.add_resource(MarkdownToPDFFileApi, '/markdown-to-pdf/') diff --git a/api/core/tools/tool_file_manager.py b/api/core/tools/tool_file_manager.py index 2aaca6d82e..b74c2a7eeb 100644 --- a/api/core/tools/tool_file_manager.py +++ b/api/core/tools/tool_file_manager.py @@ -9,7 +9,6 @@ from typing import Optional, Union from uuid import uuid4 import httpx - from configs import dify_config from core.helper import ssrf_proxy from extensions.ext_database import db @@ -58,7 +57,7 @@ class ToolFileManager: @staticmethod def create_file_by_raw( *, - user_id: str, + user_id: Optional[str], tenant_id: str, conversation_id: Optional[str], file_binary: bytes, diff --git a/api/extensions/ext_blueprints.py b/api/extensions/ext_blueprints.py index 316be12f5c..9e2dc1c552 100644 --- a/api/extensions/ext_blueprints.py +++ b/api/extensions/ext_blueprints.py @@ -5,13 +5,13 @@ from dify_app import DifyApp def init_app(app: DifyApp): # register blueprint routers - from flask_cors import CORS # type: ignore - from controllers.console import bp as console_app_bp from controllers.files import bp as files_bp from controllers.inner_api import bp as inner_api_bp + from controllers.inner_tools import bp as inner_tools_bp from controllers.service_api import bp as service_api_bp from controllers.web import bp as web_bp + from flask_cors import CORS # type: ignore CORS( service_api_bp, @@ -46,3 +46,5 @@ def init_app(app: DifyApp): app.register_blueprint(files_bp) app.register_blueprint(inner_api_bp) + + app.register_blueprint(inner_tools_bp) diff --git a/api/migrations/versions/2025_04_05_2100-e927d80409a1_make_tool_file_user_id_optional.py b/api/migrations/versions/2025_04_05_2100-e927d80409a1_make_tool_file_user_id_optional.py new file mode 100644 index 0000000000..94c5494882 --- /dev/null +++ b/api/migrations/versions/2025_04_05_2100-e927d80409a1_make_tool_file_user_id_optional.py @@ -0,0 +1,37 @@ +"""make tool file user id optional + +Revision ID: e927d80409a1 +Revises: a91b476a53de +Create Date: 2025-04-05 21:00:53.060052 + +""" +from alembic import op +import models as models +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'e927d80409a1' +down_revision = 'a91b476a53de' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('tool_files', schema=None) as batch_op: + batch_op.alter_column('user_id', + existing_type=sa.UUID(), + nullable=True) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('tool_files', schema=None) as batch_op: + batch_op.alter_column('user_id', + existing_type=sa.UUID(), + nullable=False) + + # ### end Alembic commands ### diff --git a/api/models/tools.py b/api/models/tools.py index 13a112ee83..087c3848f8 100644 --- a/api/models/tools.py +++ b/api/models/tools.py @@ -2,12 +2,12 @@ import json from typing import Any, Optional import sqlalchemy as sa -from sqlalchemy import ForeignKey, func -from sqlalchemy.orm import Mapped, mapped_column - from core.tools.entities.common_entities import I18nObject from core.tools.entities.tool_bundle import ApiToolBundle -from core.tools.entities.tool_entities import ApiProviderSchemaType, WorkflowToolParameterConfiguration +from core.tools.entities.tool_entities import ( + ApiProviderSchemaType, WorkflowToolParameterConfiguration) +from sqlalchemy import ForeignKey, func +from sqlalchemy.orm import Mapped, mapped_column from .engine import db from .model import Account, App, Tenant @@ -294,7 +294,7 @@ class ToolFile(db.Model): # type: ignore[name-defined] ) id = db.Column(StringUUID, server_default=db.text("uuid_generate_v4()")) - user_id: Mapped[str] = db.Column(StringUUID, nullable=False) + user_id: Mapped[Optional[str]] = db.Column(StringUUID, nullable=True) tenant_id: Mapped[str] = db.Column(StringUUID, nullable=False) conversation_id: Mapped[Optional[str]] = db.Column(StringUUID, nullable=True) file_key: Mapped[str] = db.Column(db.String(255), nullable=False) @@ -306,7 +306,7 @@ class ToolFile(db.Model): # type: ignore[name-defined] def __init__( self, *, - user_id: str, + user_id: Optional[str], tenant_id: str, conversation_id: Optional[str] = None, file_key: str, diff --git a/api/poetry.lock b/api/poetry.lock index 1f72270dd4..014711a2ac 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.0.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. [[package]] name = "aiofiles" @@ -7,7 +7,6 @@ description = "File support for asyncio." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiofiles-24.1.0-py3-none-any.whl", hash = "sha256:b4ec55f4195e3eb5d7abd1bf7e061763e864dd4954231fb8539a0ef8bb8260e5"}, {file = "aiofiles-24.1.0.tar.gz", hash = "sha256:22a075c9e5a3810f0c2e48f3008c94d68c65d763b9b03857924c99e57355166c"}, @@ -20,7 +19,6 @@ description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -33,7 +31,6 @@ description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60804bff28662cbcf340a4d61598891f12eea3a66af48ecfdc975ceec21e3c8"}, {file = "aiohttp-3.11.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4b4fa1cb5f270fb3eab079536b764ad740bb749ce69a94d4ec30ceee1b5940d5"}, @@ -123,7 +120,7 @@ propcache = ">=0.2.0" yarl = ">=1.17.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aiohttp-retry" @@ -132,7 +129,6 @@ description = "Simple retry client for aiohttp" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiohttp_retry-2.9.1-py3-none-any.whl", hash = "sha256:66d2759d1921838256a05a3f80ad7e724936f083e35be5abb5e16eed6be6dc54"}, {file = "aiohttp_retry-2.9.1.tar.gz", hash = "sha256:8eb75e904ed4ee5c2ec242fefe85bf04240f685391c4879d8f541d6028ff01f1"}, @@ -148,7 +144,6 @@ description = "MySQL driver for asyncio." optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiomysql-0.2.0-py3-none-any.whl", hash = "sha256:b7c26da0daf23a5ec5e0b133c03d20657276e4eae9b73e040b72787f6f6ade0a"}, {file = "aiomysql-0.2.0.tar.gz", hash = "sha256:558b9c26d580d08b8c5fd1be23c5231ce3aeff2dadad989540fee740253deb67"}, @@ -168,7 +163,6 @@ description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.9" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aiosignal-1.3.2-py2.py3-none-any.whl", hash = "sha256:45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5"}, {file = "aiosignal-1.3.2.tar.gz", hash = "sha256:a8c255c66fafb1e499c9351d0bf32ff2d8a0321595ebac3b93713656d2436f54"}, @@ -184,7 +178,6 @@ description = "A database migration tool for SQLAlchemy." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alembic-1.14.0-py3-none-any.whl", hash = "sha256:99bd884ca390466db5e27ffccff1d179ec5c05c965cfefc0607e69f9e411cb25"}, {file = "alembic-1.14.0.tar.gz", hash = "sha256:b00892b53b3642d0b8dbedba234dbf1924b69be83a9a769d5a624b01094e304b"}, @@ -196,7 +189,7 @@ SQLAlchemy = ">=1.3.0" typing-extensions = ">=4" [package.extras] -tz = ["backports.zoneinfo"] +tz = ["backports.zoneinfo ; python_version < \"3.9\""] [[package]] name = "alibabacloud-credentials" @@ -205,7 +198,6 @@ description = "The alibabacloud credentials module of alibabaCloud Python SDK." optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_credentials-0.3.6.tar.gz", hash = "sha256:caa82cf258648dcbe1ca14aeba50ba21845567d6ac3cd48d318e0a445fff7f96"}, ] @@ -220,7 +212,6 @@ description = "The endpoint-util module of alibabaCloud Python SDK." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_endpoint_util-0.0.3.tar.gz", hash = "sha256:8c0efb76fdcc3af4ca716ef24bbce770201a3f83f98c0afcf81655f684b9c7d2"}, ] @@ -235,7 +226,6 @@ description = "Alibaba Cloud Gateway SPI SDK Library for Python" optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_gateway_spi-0.0.2.tar.gz", hash = "sha256:f932c8ba67291531dfbee6ca521dcf3523eb4ff93512bf0aaf135f2d4fc4704d"}, ] @@ -250,7 +240,6 @@ description = "Alibaba Cloud AnalyticDB for PostgreSQL (20160503) SDK Library fo optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_gpdb20160503-3.8.3-py3-none-any.whl", hash = "sha256:06e1c46ce5e4e9d1bcae76e76e51034196c625799d06b2efec8d46a7df323fe8"}, {file = "alibabacloud_gpdb20160503-3.8.3.tar.gz", hash = "sha256:4dfcc0d9cff5a921d529d76f4bf97e2ceb9dc2fa53f00ab055f08509423d8e30"}, @@ -273,7 +262,6 @@ description = "Aliyun Tea OpenApi Library for Python" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_openapi_util-0.2.2.tar.gz", hash = "sha256:ebbc3906f554cb4bf8f513e43e8a33e8b6a3d4a0ef13617a0e14c3dda8ef52a8"}, ] @@ -289,7 +277,6 @@ description = "Alibaba Cloud OpenPlatform (20191219) SDK Library for Python" optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_openplatform20191219-2.0.0-py3-none-any.whl", hash = "sha256:873821c45bca72a6c6ec7a906c9cb21554c122e88893bbac3986934dab30dd36"}, {file = "alibabacloud_openplatform20191219-2.0.0.tar.gz", hash = "sha256:e67f4c337b7542538746592c6a474bd4ae3a9edccdf62e11a32ca61fad3c9020"}, @@ -308,7 +295,6 @@ description = "Aliyun Tea OSS SDK Library for Python" optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_oss_sdk-0.1.0.tar.gz", hash = "sha256:cc5ce36044bae758047fccb56c0cb6204cbc362d18cc3dd4ceac54c8c0897b8b"}, ] @@ -327,7 +313,6 @@ description = "The oss util module of alibabaCloud Python SDK." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_oss_util-0.0.6.tar.gz", hash = "sha256:d3ecec36632434bd509a113e8cf327dc23e830ac8d9dd6949926f4e334c8b5d6"}, ] @@ -342,7 +327,6 @@ description = "The tea module of alibabaCloud Python SDK." optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud-tea-0.4.0.tar.gz", hash = "sha256:bdf72d747723bab190331b3c8593109fe2807504469bc0147f78c8c4945ed396"}, {file = "alibabacloud_tea-0.4.0-py3-none-any.whl", hash = "sha256:59fae5765e6654f884e130233df6fb61ca0fbe01a29ed0755a1cf099a3d4d863"}, @@ -359,7 +343,6 @@ description = "The tea-fileform module of alibabaCloud Python SDK." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_tea_fileform-0.0.5.tar.gz", hash = "sha256:fd00a8c9d85e785a7655059e9651f9e91784678881831f60589172387b968ee8"}, ] @@ -374,7 +357,6 @@ description = "Alibaba Cloud openapi SDK Library for Python" optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_tea_openapi-0.3.12.tar.gz", hash = "sha256:2e14809f357438e62c1ef4976a7655110dd54a75bbfa7d905fa3798355cfd974"}, ] @@ -393,7 +375,6 @@ description = "The tea-util module of alibabaCloud Python SDK." optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_tea_util-0.3.13.tar.gz", hash = "sha256:8cbdfd2a03fbbf622f901439fa08643898290dd40e1d928347f6346e43f63c90"}, ] @@ -408,7 +389,6 @@ description = "The tea-xml module of alibabaCloud Python SDK." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "alibabacloud_tea_xml-0.0.2.tar.gz", hash = "sha256:f0135e8148fd7d9c1f029db161863f37f144f837c280cba16c2edeb2f9c549d8"}, ] @@ -423,7 +403,6 @@ description = "The core module of Aliyun Python SDK." optional = false python-versions = ">=3.7" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aliyun-python-sdk-core-2.16.0.tar.gz", hash = "sha256:651caad597eb39d4fad6cf85133dffe92837d53bdf62db9d8f37dab6508bb8f9"}, ] @@ -439,7 +418,6 @@ description = "The kms module of Aliyun Python sdk." optional = false python-versions = "*" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aliyun-python-sdk-kms-2.16.5.tar.gz", hash = "sha256:f328a8a19d83ecbb965ffce0ec1e9930755216d104638cd95ecd362753b813b3"}, {file = "aliyun_python_sdk_kms-2.16.5-py2.py3-none-any.whl", hash = "sha256:24b6cdc4fd161d2942619479c8d050c63ea9cd22b044fe33b60bbb60153786f0"}, @@ -455,7 +433,6 @@ description = "Low-level AMQP client for Python (fork of amqplib)." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "amqp-5.3.1-py3-none-any.whl", hash = "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2"}, {file = "amqp-5.3.1.tar.gz", hash = "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432"}, @@ -471,7 +448,6 @@ description = "A library for parsing ISO 8601 strings." optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "aniso8601-9.0.1-py2.py3-none-any.whl", hash = "sha256:1d2b7ef82963909e93c4f24ce48d4de9e66009a21bf1c1e1c85bdd0812fe412f"}, {file = "aniso8601-9.0.1.tar.gz", hash = "sha256:72e3117667eedf66951bb2d93f4296a56b94b078a8a95905a052611fb3f1b973"}, @@ -487,7 +463,6 @@ description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -500,7 +475,6 @@ description = "The official Python library for the anthropic API" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anthropic-0.23.1-py3-none-any.whl", hash = "sha256:6dc5779dae83a5834864f4a4af0166c972b70f4cb8fd2765e1558282cc6d6242"}, {file = "anthropic-0.23.1.tar.gz", hash = "sha256:9325103702cbc96bb09d1b58c36bde75c726f6a01029fb4d85f41ebba07e9066"}, @@ -526,7 +500,6 @@ description = "High level compatibility layer for multiple asynchronous event lo optional = false python-versions = ">=3.9" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "anyio-4.8.0-py3-none-any.whl", hash = "sha256:b5011f270ab5eb0abf13385f851315585cc37ef330dd88e27ec3d34d651fd47a"}, {file = "anyio-4.8.0.tar.gz", hash = "sha256:1d9fe889df5212298c0c0723fa20479d1b94883a2df44bd3897aa91083316f7a"}, @@ -539,7 +512,7 @@ typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -549,7 +522,6 @@ description = "Python wrapper for the arXiv API: https://arxiv.org/help/api/" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "arxiv-2.1.0-py3-none-any.whl", hash = "sha256:d634a0a59c9f05baf524eaa65563bb0a4532d2b4727a1162a1a9ba7e1e6e48cc"}, {file = "arxiv-2.1.0.tar.gz", hash = "sha256:eb4b1d5ab9dfd66027c344bb324c20be21d56fe15f6ce216ed5b209df747dea8"}, @@ -566,7 +538,6 @@ description = "ASGI specs, helper code, and adapters" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47"}, {file = "asgiref-3.8.1.tar.gz", hash = "sha256:c343bd80a0bec947a9860adb4c432ffa7db769836c64238fc34bdc3fec84d590"}, @@ -582,7 +553,7 @@ description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" and python_full_version < \"3.11.3\"" +markers = "python_full_version < \"3.11.3\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -595,7 +566,6 @@ description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" groups = ["main", "lint", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, @@ -606,8 +576,8 @@ cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6) ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\""] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "authlib" @@ -616,7 +586,6 @@ description = "The ultimate Python library in building OAuth and OpenID Connect optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, @@ -632,7 +601,6 @@ description = "Microsoft Azure AI Inference Client Library for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure_ai_inference-1.0.0b6-py3-none-any.whl", hash = "sha256:5699ad78d70ec2d227a5eff2c1bafc845018f6624edc5b03589dfff861c54958"}, {file = "azure_ai_inference-1.0.0b6.tar.gz", hash = "sha256:b8ac941de1e69151bad464191e18856d4e74f962ae03235da137a9a326143676"}, @@ -654,7 +622,6 @@ description = "Microsoft Azure Machine Learning Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure-ai-ml-1.20.0.tar.gz", hash = "sha256:6432a0da1b7250cb0db5a1c33202e0419935e19ea32d4c2b3220705f8f1d4101"}, {file = "azure_ai_ml-1.20.0-py3-none-any.whl", hash = "sha256:c7eb3c5ccf82a6ee94403c3e5060763decd38cf03ff2620a4a6577526e605104"}, @@ -692,7 +659,6 @@ description = "Microsoft Azure Client Library for Python (Common)" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"}, {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"}, @@ -705,7 +671,6 @@ description = "Microsoft Azure Core Library for Python" optional = false python-versions = ">=3.8" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure_core-1.32.0-py3-none-any.whl", hash = "sha256:eac191a0efb23bfa83fddf321b27b122b4ec847befa3091fa736a5c32c50d7b4"}, {file = "azure_core-1.32.0.tar.gz", hash = "sha256:22b3c35d6b2dae14990f6c1be2912bf23ffe50b220e708a28ab1bb92b1c730e5"}, @@ -726,7 +691,6 @@ description = "Microsoft Azure Identity Library for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure-identity-1.16.1.tar.gz", hash = "sha256:6d93f04468f240d59246d8afde3091494a5040d4f141cad0f49fc0c399d0d91e"}, {file = "azure_identity-1.16.1-py3-none-any.whl", hash = "sha256:8fb07c25642cd4ac422559a8b50d3e77f73dcc2bbfaba419d06d6c9d7cff6726"}, @@ -745,7 +709,6 @@ description = "Microsoft Azure Management Core Library for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure_mgmt_core-1.5.0-py3-none-any.whl", hash = "sha256:18aaa5a723ee8ae05bf1bfc9f6d0ffb996631c7ea3c922cc86f522973ce07b5f"}, {file = "azure_mgmt_core-1.5.0.tar.gz", hash = "sha256:380ae3dfa3639f4a5c246a7db7ed2d08374e88230fd0da3eb899f7c11e5c441a"}, @@ -761,7 +724,6 @@ description = "Microsoft Azure Blob Storage Client Library for Python" optional = false python-versions = ">=3.6" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure-storage-blob-12.13.0.zip", hash = "sha256:53f0d4cd32970ac9ff9b9753f83dd2fb3f9ac30e1d01e71638c436c509bfd884"}, {file = "azure_storage_blob-12.13.0-py3-none-any.whl", hash = "sha256:280a6ab032845bab9627582bee78a50497ca2f14772929b5c5ee8b4605af0cb3"}, @@ -779,7 +741,6 @@ description = "Microsoft Azure File DataLake Storage Client Library for Python" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure-storage-file-datalake-12.8.0.zip", hash = "sha256:12e6306e5efb5ca28e0ccd9fa79a2c61acd589866d6109fe5601b18509da92f4"}, {file = "azure_storage_file_datalake-12.8.0-py3-none-any.whl", hash = "sha256:b6cf5733fe794bf3c866efbe3ce1941409e35b6b125028ac558b436bf90f2de7"}, @@ -797,7 +758,6 @@ description = "Microsoft Azure Azure File Share Storage Client Library for Pytho optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "azure_storage_file_share-12.20.0-py3-none-any.whl", hash = "sha256:fd5c4f09d7784d68b8ed3de473b7525904f1c4b115f9cd200c838b0ee720cb5f"}, {file = "azure_storage_file_share-12.20.0.tar.gz", hash = "sha256:f120fc67bae0a84c1b54d06faa70df351be14d1395b9a085350e833f7d347a65"}, @@ -819,7 +779,6 @@ description = "Function decoration for backoff and retry" optional = false python-versions = ">=3.7,<4.0" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -832,7 +791,6 @@ description = "BCE SDK for python" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,<4,>=2.7" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bce_python_sdk-0.9.25-py3-none-any.whl", hash = "sha256:cd1ab4c887e163adba6bfb3cd40465a365e5f4255705a015b0cdbe768e649877"}, {file = "bce_python_sdk-0.9.25.tar.gz", hash = "sha256:93a0623fbb1bf3a58b4f2d7bdbd799a3b342a538f0c72950c77168e431470e86"}, @@ -850,7 +808,6 @@ description = "Modern password hashing for your software and your servers" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bcrypt-4.2.1-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:1340411a0894b7d3ef562fb233e4b6ed58add185228650942bdc885362f32c17"}, {file = "bcrypt-4.2.1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ee315739bc8387aa36ff127afc99120ee452924e0df517a8f3e4c0187a0f5f"}, @@ -890,7 +847,6 @@ description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, @@ -910,7 +866,6 @@ description = "Python multiprocessing fork with improvements and bugfixes" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "billiard-4.2.1-py3-none-any.whl", hash = "sha256:40b59a4ac8806ba2c2369ea98d876bc6108b051c227baffd928c644d15d8f3cb"}, {file = "billiard-4.2.1.tar.gz", hash = "sha256:12b641b0c539073fc8d3f5b8b7be998956665c4233c7c1fcd66a7e677c4fb36f"}, @@ -923,7 +878,6 @@ description = "Fast, simple object-to-object and broadcast signaling" optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, @@ -936,7 +890,6 @@ description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "boto3-1.36.4-py3-none-any.whl", hash = "sha256:9f8f699e75ec63fcc98c4dd7290997c7c06c68d3ac8161ad4735fe71f5fe945c"}, {file = "boto3-1.36.4.tar.gz", hash = "sha256:eeceeb74ef8b65634d358c27aa074917f4449dc828f79301f1075232618eb502"}, @@ -957,7 +910,6 @@ description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "botocore-1.36.5-py3-none-any.whl", hash = "sha256:6d9f70afa9bf9d21407089dc22b8cc8ec6fa44866d4660858c062c74fc8555eb"}, {file = "botocore-1.36.5.tar.gz", hash = "sha256:234ed3d29a8954c37a551c933453bf14c6ae44a69a4f273ffef377a2612ca6a6"}, @@ -978,7 +930,6 @@ description = "Fast NumPy array functions written in C" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Bottleneck-1.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:125436df93751a226eab1732783aa8f6125e88e779587aa61be071fb66e41f9d"}, {file = "Bottleneck-1.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c6df9a60ec6ab88fec934ca864266ba95edd89c490af71dc9cd8afb2a54ebd9"}, @@ -1031,7 +982,7 @@ description = "Python bindings for the Brotli compression library" optional = false python-versions = "*" groups = ["main"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"PyPy\"" +markers = "platform_python_implementation != \"PyPy\"" files = [ {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, @@ -1167,7 +1118,7 @@ description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation == \"PyPy\"" +markers = "platform_python_implementation == \"PyPy\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, @@ -1208,7 +1159,6 @@ description = "Dummy package for Beautiful Soup (beautifulsoup4)" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "bs4-0.0.2-py2.py3-none-any.whl", hash = "sha256:abf8742c0805ef7f662dce4b51cca104cffe52b835238afc169142ab9b3fbccc"}, {file = "bs4-0.0.2.tar.gz", hash = "sha256:a48685c58f50fe127722417bae83fe6badf500d54b55f7e39ffe43b798653925"}, @@ -1224,7 +1174,6 @@ description = "A simple, correct Python build frontend" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "build-1.2.2.post1-py3-none-any.whl", hash = "sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5"}, {file = "build-1.2.2.post1.tar.gz", hash = "sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7"}, @@ -1237,7 +1186,7 @@ pyproject_hooks = "*" [package.extras] docs = ["furo (>=2023.08.17)", "sphinx (>=7.0,<8.0)", "sphinx-argparse-cli (>=1.5)", "sphinx-autodoc-typehints (>=1.10)", "sphinx-issues (>=3.0.0)"] -test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0)", "setuptools (>=56.0.0)", "setuptools (>=56.0.0)", "setuptools (>=67.8.0)", "wheel (>=0.36.0)"] +test = ["build[uv,virtualenv]", "filelock (>=3)", "pytest (>=6.2.4)", "pytest-cov (>=2.12)", "pytest-mock (>=2)", "pytest-rerunfailures (>=9.1)", "pytest-xdist (>=1.34)", "setuptools (>=42.0.0) ; python_version < \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.10\"", "setuptools (>=56.0.0) ; python_version == \"3.11\"", "setuptools (>=67.8.0) ; python_version >= \"3.12\"", "wheel (>=0.36.0)"] typing = ["build[uv]", "importlib-metadata (>=5.1)", "mypy (>=1.9.0,<1.10.0)", "tomli", "typing-extensions (>=3.7.4.3)"] uv = ["uv (>=0.1.18)"] virtualenv = ["virtualenv (>=20.0.35)"] @@ -1249,7 +1198,6 @@ description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, @@ -1262,7 +1210,6 @@ description = "Distributed Task Queue." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "celery-5.4.0-py3-none-any.whl", hash = "sha256:369631eb580cf8c51a82721ec538684994f8277637edde2dfc0dacd73ed97f64"}, {file = "celery-5.4.0.tar.gz", hash = "sha256:504a19140e8d3029d5acad88330c541d4c3f64c789d85f94756762d8bca7e706"}, @@ -1283,32 +1230,32 @@ vine = ">=5.1.0,<6.0" arangodb = ["pyArango (>=2.0.2)"] auth = ["cryptography (==42.0.5)"] azureblockblob = ["azure-storage-blob (>=12.15.0)"] -brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] +brotli = ["brotli (>=1.0.0) ; platform_python_implementation == \"CPython\"", "brotlipy (>=0.7.0) ; platform_python_implementation == \"PyPy\""] cassandra = ["cassandra-driver (>=3.25.0,<4)"] consul = ["python-consul2 (==0.1.5)"] cosmosdbsql = ["pydocumentdb (==2.3.5)"] -couchbase = ["couchbase (>=3.0.0)"] +couchbase = ["couchbase (>=3.0.0) ; platform_python_implementation != \"PyPy\" and (platform_system != \"Windows\" or python_version < \"3.10\")"] couchdb = ["pycouchdb (==1.14.2)"] django = ["Django (>=2.2.28)"] dynamodb = ["boto3 (>=1.26.143)"] elasticsearch = ["elastic-transport (<=8.13.0)", "elasticsearch (<=8.13.0)"] -eventlet = ["eventlet (>=0.32.0)"] +eventlet = ["eventlet (>=0.32.0) ; python_version < \"3.10\""] gcs = ["google-cloud-storage (>=2.10.0)"] gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -memcache = ["pylibmc (==1.6.3)"] +librabbitmq = ["librabbitmq (>=2.0.0) ; python_version < \"3.11\""] +memcache = ["pylibmc (==1.6.3) ; platform_system != \"Windows\""] mongodb = ["pymongo[srv] (>=4.0.2)"] msgpack = ["msgpack (==1.0.8)"] pymemcache = ["python-memcached (>=1.61)"] -pyro = ["pyro4 (==4.82)"] +pyro = ["pyro4 (==4.82) ; python_version < \"3.11\""] pytest = ["pytest-celery[all] (>=1.0.0)"] redis = ["redis (>=4.5.2,!=4.5.5,<6.0.0)"] s3 = ["boto3 (>=1.26.143)"] slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem (==4.1.5)"] +solar = ["ephem (==4.1.5) ; platform_python_implementation != \"PyPy\""] sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] -sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.4)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] -tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] +sqs = ["boto3 (>=1.26.143)", "kombu[sqs] (>=5.3.4)", "pycurl (>=7.43.0.5) ; sys_platform != \"win32\" and platform_python_implementation == \"CPython\"", "urllib3 (>=1.26.16)"] +tblib = ["tblib (>=1.3.0) ; python_version < \"3.8.0\"", "tblib (>=1.5.0) ; python_version >= \"3.8.0\""] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] zstd = ["zstandard (==0.22.0)"] @@ -1320,7 +1267,6 @@ description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, @@ -1402,7 +1348,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] -markers = {main = "python_version == \"3.11\" or python_version >= \"3.12\"", storage = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"PyPy\"", tools = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation == \"PyPy\"", vdb = "python_version == \"3.11\" or python_version >= \"3.12\""} +markers = {storage = "platform_python_implementation != \"PyPy\"", tools = "python_version < \"3.12\" and platform_python_implementation == \"PyPy\"", vdb = "python_version < \"3.12\" or platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" @@ -1414,7 +1360,6 @@ description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chardet-5.1.0-py3-none-any.whl", hash = "sha256:362777fb014af596ad31334fde1e8c327dfdb076e1960d1694662d46a6917ab9"}, {file = "chardet-5.1.0.tar.gz", hash = "sha256:0d62712b956bc154f85fb0a266e2a3c5913c2967e00348701b32411d6def31e5"}, @@ -1427,7 +1372,6 @@ description = "The Real First Universal Charset Detector. Open, modern and activ optional = false python-versions = ">=3.7" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, @@ -1530,7 +1474,6 @@ description = "Chromas fork of hnswlib" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f35192fbbeadc8c0633f0a69c3d3e9f1a4eab3a46b65458bbcbcabdd9e895c36"}, {file = "chroma_hnswlib-0.7.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6f007b608c96362b8f0c8b6b2ac94f67f83fcbabd857c378ae82007ec92f4d82"}, @@ -1573,7 +1516,6 @@ description = "Chroma." optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "chromadb-0.5.20-py3-none-any.whl", hash = "sha256:9550ba1b6dce911e35cac2568b301badf4b42f457b99a432bdeec2b6b9dd3680"}, {file = "chromadb-0.5.20.tar.gz", hash = "sha256:19513a23b2d20059866216bfd80195d1d4a160ffba234b8899f5e80978160ca7"}, @@ -1616,7 +1558,6 @@ description = "Python Circuit Breaker pattern implementation" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "circuitbreaker-2.0.0-py2.py3-none-any.whl", hash = "sha256:c8c6f044b616cd5066368734ce4488020392c962b4bd2869d406d883c36d9859"}, {file = "circuitbreaker-2.0.0.tar.gz", hash = "sha256:28110761ca81a2accbd6b33186bc8c433e69b0933d85e89f280028dbb8c1dd14"}, @@ -1629,7 +1570,6 @@ description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" groups = ["main", "lint", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -1645,7 +1585,6 @@ description = "click_default_group" optional = false python-versions = ">=2.7" groups = ["lint"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"}, {file = "click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e"}, @@ -1664,7 +1603,6 @@ description = "Enables git-like *did-you-mean* feature in click" optional = false python-versions = ">=3.6.2" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click_didyoumean-0.3.1-py3-none-any.whl", hash = "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c"}, {file = "click_didyoumean-0.3.1.tar.gz", hash = "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463"}, @@ -1680,7 +1618,6 @@ description = "An extension module for click to enable registering CLI commands optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, @@ -1699,7 +1636,6 @@ description = "REPL plugin for Click" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, @@ -1719,7 +1655,6 @@ description = "ClickHouse Database Core Driver for Python, Pandas, and Superset" optional = false python-versions = "~=3.8" groups = ["tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "clickhouse-connect-0.7.19.tar.gz", hash = "sha256:ce8f21f035781c5ef6ff57dc162e8150779c009b59f14030ba61f8c9c10c06d0"}, {file = "clickhouse_connect-0.7.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6ac74eb9e8d6331bae0303d0fc6bdc2125aa4c421ef646348b588760b38c29e9"}, @@ -1811,7 +1746,6 @@ description = "Extended pickling support for Python objects" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cloudpickle-2.2.1-py3-none-any.whl", hash = "sha256:61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f"}, {file = "cloudpickle-2.2.1.tar.gz", hash = "sha256:d89684b8de9e34a2a43b3460fbca07d09d6e25ce858df4d5a44240403b6178f5"}, @@ -1824,7 +1758,6 @@ description = "A Python module to bypass Cloudflare's anti-bot page." optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cloudscraper-1.2.71-py2.py3-none-any.whl", hash = "sha256:76f50ca529ed2279e220837befdec892626f9511708e200d48d5bb76ded679b0"}, {file = "cloudscraper-1.2.71.tar.gz", hash = "sha256:429c6e8aa6916d5bad5c8a5eac50f3ea53c9ac22616f6cb21b18dcc71517d0d3"}, @@ -1842,7 +1775,6 @@ description = "" optional = false python-versions = "<4.0,>=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cohere-5.2.6-py3-none-any.whl", hash = "sha256:256b4ed00f47eb315401d7f28834655714f098382908e7d0ad5c98225aa6a57d"}, {file = "cohere-5.2.6.tar.gz", hash = "sha256:15d13682706fbafc8cf700e195f628389a643eb7ebd6d7c5e9d6e1ebd3f942fb"}, @@ -1868,7 +1800,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 = {main = "python_version == \"3.11\" or python_version >= \"3.12\"", dev = "(python_version == \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"", lint = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_system == \"Windows\"", tools = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_system == \"Windows\"", vdb = "(python_version == \"3.11\" or python_version >= \"3.12\") and (platform_system == \"Windows\" or os_name == \"nt\" or sys_platform == \"win32\")"} +markers = {dev = "sys_platform == \"win32\"", lint = "platform_system == \"Windows\"", tools = "platform_system == \"Windows\"", vdb = "platform_system == \"Windows\" or os_name == \"nt\" or sys_platform == \"win32\""} [[package]] name = "coloredlogs" @@ -1877,7 +1809,6 @@ description = "Colored terminal output for Python's logging module" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -1896,7 +1827,6 @@ description = "Python library for calculating contours of 2D quadrilateral grids optional = false python-versions = ">=3.10" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "contourpy-1.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a045f341a77b77e1c5de31e74e966537bba9f3c4099b35bf4c2e3939dd54cdab"}, {file = "contourpy-1.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:500360b77259914f7805af7462e41f9cb7ca92ad38e9f94d6c8641b089338124"}, @@ -1971,7 +1901,6 @@ description = "cos-python-sdk-v5" optional = false python-versions = "*" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cos-python-sdk-v5-1.9.30.tar.gz", hash = "sha256:a23fd090211bf90883066d90cd74317860aa67c6d3aa80fe5e44b18c7e9b2a81"}, ] @@ -1990,7 +1919,6 @@ description = "Python Client for Couchbase" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "couchbase-4.3.4-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:395e7b05495132a071dce5cdd84a3ec6e803205875f8ee22e85a89a16bb1b5f4"}, {file = "couchbase-4.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:263a18307d1f1a141b93ae370b19843b1160dd702559152aea19dd08768f59f5"}, @@ -2032,7 +1960,6 @@ description = "Code coverage measurement for Python" optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, @@ -2097,7 +2024,7 @@ files = [ ] [package.extras] -toml = ["tomli"] +toml = ["tomli ; python_full_version <= \"3.11.0a6\""] [[package]] name = "crcmod" @@ -2106,7 +2033,6 @@ description = "CRC Generator" optional = false python-versions = "*" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "crcmod-1.7.tar.gz", hash = "sha256:dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e"}, ] @@ -2118,7 +2044,6 @@ description = "cryptography is a package which provides cryptographic recipes an optional = false python-versions = "!=3.9.0,!=3.9.1,>=3.7" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123"}, {file = "cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092"}, @@ -2153,10 +2078,10 @@ files = [ cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} [package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0)"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0) ; python_version >= \"3.8\""] docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] -nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2)"] -pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] +pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] sdist = ["build (>=1.0.0)"] ssh = ["bcrypt (>=3.1.5)"] test = ["certifi (>=2024)", "cryptography-vectors (==44.0.0)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] @@ -2169,7 +2094,6 @@ description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cssselect-1.2.0-py2.py3-none-any.whl", hash = "sha256:da1885f0c10b60c03ed5eccbb6b68d6eff248d91976fcde348f395d54c9fd35e"}, {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, @@ -2182,7 +2106,6 @@ description = "Composable style cycles" optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30"}, {file = "cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c"}, @@ -2199,7 +2122,6 @@ description = "dashscope client sdk library" optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dashscope-1.17.1-py3-none-any.whl", hash = "sha256:1e07e7ff4544684797f86ede646766b5ab8f5bd6eb43d2d01f0f757a2941efe1"}, ] @@ -2219,7 +2141,6 @@ description = "Lightning-fast JSON wizardry for Python dataclasses — effortles optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dataclass-wizard-0.34.0.tar.gz", hash = "sha256:f917db2220e395806a852f7c57e9011dd783b7fe3eee763bb56ae2d48968ab03"}, {file = "dataclass_wizard-0.34.0-py2.py3-none-any.whl", hash = "sha256:9c184edd3526c3523fec2de5b6d6cdfcdc97ed7b2c5ba8bc574284b793704f01"}, @@ -2229,10 +2150,10 @@ files = [ typing-extensions = {version = ">=4.9.0", markers = "python_version <= \"3.12\""} [package.extras] -dev = ["Sphinx (==7.4.7)", "Sphinx (==8.1.3)", "bump2version (==1.0.1)", "coverage (>=6.2)", "dacite (==1.8.1)", "dataclass-factory (==2.16)", "dataclass-wizard[toml]", "dataclasses-json (==0.6.7)", "flake8 (>=3)", "jsons (==1.6.3)", "mashumaro (==3.15)", "matplotlib", "pip (>=21.3.1)", "pydantic (==2.10.3)", "pytest (==8.3.4)", "pytest-benchmark[histogram]", "pytest-cov (==6.0.0)", "pytest-mock (>=3.6.1)", "python-dotenv (>=1,<2)", "pytimeparse (==1.1.8)", "sphinx-autodoc-typehints (==2.5.0)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "tomli (>=2,<3)", "tomli (>=2,<3)", "tomli-w (>=1,<2)", "tox (==4.23.2)", "twine (==6.0.1)", "typing-extensions (>=4.9.0)", "watchdog[watchmedo] (==6.0.0)", "wheel (==0.45.1)"] +dev = ["Sphinx (==7.4.7) ; python_version == \"3.9\"", "Sphinx (==8.1.3) ; python_version >= \"3.10\"", "bump2version (==1.0.1)", "coverage (>=6.2)", "dacite (==1.8.1)", "dataclass-factory (==2.16)", "dataclass-wizard[toml]", "dataclasses-json (==0.6.7)", "flake8 (>=3)", "jsons (==1.6.3)", "mashumaro (==3.15)", "matplotlib", "pip (>=21.3.1)", "pydantic (==2.10.3)", "pytest (==8.3.4)", "pytest-benchmark[histogram]", "pytest-cov (==6.0.0)", "pytest-mock (>=3.6.1)", "python-dotenv (>=1,<2)", "pytimeparse (==1.1.8)", "sphinx-autodoc-typehints (==2.5.0)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "tomli (>=2,<3) ; python_version == \"3.10\"", "tomli (>=2,<3) ; python_version == \"3.9\"", "tomli-w (>=1,<2)", "tox (==4.23.2)", "twine (==6.0.1)", "typing-extensions (>=4.9.0)", "watchdog[watchmedo] (==6.0.0)", "wheel (==0.45.1)"] dotenv = ["python-dotenv (>=1,<2)"] timedelta = ["pytimeparse (>=1.1.7)"] -toml = ["tomli (>=2,<3)", "tomli (>=2,<3)", "tomli-w (>=1,<2)"] +toml = ["tomli (>=2,<3) ; python_version == \"3.10\"", "tomli (>=2,<3) ; python_version == \"3.9\"", "tomli-w (>=1,<2)"] yaml = ["PyYAML (>=6,<7)"] [[package]] @@ -2242,7 +2163,6 @@ description = "Easily serialize dataclasses to and from JSON." optional = false python-versions = "<4.0,>=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dataclasses_json-0.6.7-py3-none-any.whl", hash = "sha256:0dbf33f26c8d5305befd61b39d2b3414e8a407bedc2834dea9b8d642666fb40a"}, {file = "dataclasses_json-0.6.7.tar.gz", hash = "sha256:b6b3e528266ea45b9535223bc53ca645f5208833c29229e847b3f26a1cc55fc0"}, @@ -2259,7 +2179,6 @@ description = "Pandas Data Types for SQL systems (BigQuery, Spanner)" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "db_dtypes-1.3.1-py2.py3-none-any.whl", hash = "sha256:fbc9d1740d94aaf2b5ae24601cfc875a69b4635bb9d049e3c3036e9f10203af8"}, {file = "db_dtypes-1.3.1.tar.gz", hash = "sha256:a058f05dab100891f3e76a7a3db9ad0f107f18dd3d1bdd13680749a2f07eae77"}, @@ -2278,7 +2197,6 @@ description = "Decorators for Humans" optional = false python-versions = ">=3.5" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, @@ -2291,7 +2209,6 @@ description = "XML bomb protection for Python stdlib modules" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, @@ -2304,7 +2221,6 @@ description = "Python @deprecated decorator to deprecate old python classes, fun optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Deprecated-1.2.15-py2.py3-none-any.whl", hash = "sha256:353bc4a8ac4bfc96800ddab349d89c25dec1079f65fd53acdcc1e0b975b21320"}, {file = "deprecated-1.2.15.tar.gz", hash = "sha256:683e561a90de76239796e6b6feac66b99030d2dd3fcf61ef996330f14bbb9b0d"}, @@ -2314,7 +2230,7 @@ files = [ wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools", "sphinx (<2)", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "jinja2 (>=3.0.3,<3.1.0)", "setuptools ; python_version >= \"3.12\"", "sphinx (<2)", "tox"] [[package]] name = "deprecation" @@ -2323,7 +2239,6 @@ description = "A library to handle automated deprecations" optional = false python-versions = "*" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, @@ -2339,7 +2254,6 @@ description = "serialize all of Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dill-0.3.9-py3-none-any.whl", hash = "sha256:468dff3b89520b474c0397703366b7b95eebe6303f108adf9b19da1f702be87a"}, {file = "dill-0.3.9.tar.gz", hash = "sha256:81aa267dddf68cbfe8029c42ca9ec6a4ab3b22371d1c450abc54422577b4512c"}, @@ -2356,7 +2270,6 @@ description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -2369,7 +2282,6 @@ description = "A Python library for the Docker Engine API." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, @@ -2393,7 +2305,6 @@ description = "Parse Python docstrings in reST, Google and Numpydoc format" optional = false python-versions = ">=3.6,<4.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "docstring_parser-0.16-py3-none-any.whl", hash = "sha256:bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637"}, {file = "docstring_parser-0.16.tar.gz", hash = "sha256:538beabd0af1e2db0146b6bd3caa526c35a34d61af9fd2887f3a8a27a739aa6e"}, @@ -2406,7 +2317,6 @@ description = "Linting dotenv files like a charm!" optional = false python-versions = ">=3.9,<4.0" groups = ["lint"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "dotenv_linter-0.5.0-py3-none-any.whl", hash = "sha256:fd01cca7f2140cb1710f49cbc1bf0e62397a75a6f0522d26a8b9b2331143c8bd"}, {file = "dotenv_linter-0.5.0.tar.gz", hash = "sha256:4862a8393e5ecdfb32982f1b32dbc006fff969a7b3c8608ba7db536108beeaea"}, @@ -2426,7 +2336,6 @@ description = "DuckDB in-process database" optional = false python-versions = ">=3.7.0" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:1c0226dc43e2ee4cc3a5a4672fddb2d76fd2cf2694443f395c02dd1bea0b7fce"}, {file = "duckdb-1.1.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:7c71169fa804c0b65e49afe423ddc2dc83e198640e3b041028da8110f7cd16f7"}, @@ -2489,7 +2398,6 @@ description = "Search for words, documents, images, news, maps and text translat optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "duckduckgo_search-6.3.7-py3-none-any.whl", hash = "sha256:6a831a27977751e8928222f04c99a5d069ff80e2a7c78b699c9b9ac6cb48c41b"}, {file = "duckduckgo_search-6.3.7.tar.gz", hash = "sha256:53d84966429a6377647e2a1ea7224b657575c7a4d506729bdb837e4ee12915ed"}, @@ -2510,7 +2418,6 @@ description = "Module for converting between datetime.timedelta and Go's Duratio optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "durationpy-0.9-py3-none-any.whl", hash = "sha256:e65359a7af5cedad07fb77a2dd3f390f8eb0b74cb845589fa6c057086834dd38"}, {file = "durationpy-0.9.tar.gz", hash = "sha256:fd3feb0a69a0057d582ef643c355c40d2fa1c942191f914d12203b1a01ac722a"}, @@ -2523,7 +2430,6 @@ description = "Transport classes and utilities shared among Python Elastic clien optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "elastic_transport-8.17.0-py3-none-any.whl", hash = "sha256:59f553300866750e67a38828fede000576562a0e66930c641adb75249e0c95af"}, {file = "elastic_transport-8.17.0.tar.gz", hash = "sha256:e755f38f99fa6ec5456e236b8e58f0eb18873ac8fe710f74b91a16dd562de2a5"}, @@ -2543,7 +2449,6 @@ description = "Python client for Elasticsearch" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "elasticsearch-8.14.0-py3-none-any.whl", hash = "sha256:cef8ef70a81af027f3da74a4f7d9296b390c636903088439087b8262a468c130"}, {file = "elasticsearch-8.14.0.tar.gz", hash = "sha256:aa2490029dd96f4015b333c1827aa21fd6c0a4d223b00dfb0fe933b8d09a511b"}, @@ -2565,7 +2470,6 @@ description = "Emoji for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "emoji-2.14.0-py3-none-any.whl", hash = "sha256:fcc936bf374b1aec67dda5303ae99710ba88cc9cdce2d1a71c5f2204e6d78799"}, {file = "emoji-2.14.0.tar.gz", hash = "sha256:f68ac28915a2221667cddb3e6c589303c3c6954c6c5af6fefaec7f9bdf72fdca"}, @@ -2581,7 +2485,6 @@ description = "OBS Python SDK" optional = false python-versions = "*" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "esdk-obs-python-3.24.6.1.tar.gz", hash = "sha256:c45fed143e99d9256c8560c1d78f651eae0d2e809d16e962f8b286b773c33bf0"}, ] @@ -2596,7 +2499,6 @@ description = "An implementation of lxml.xmlfile for the standard library" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, @@ -2609,7 +2511,6 @@ description = "Like `typing._eval_type`, but lets older Python versions use newe optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"}, {file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"}, @@ -2625,7 +2526,6 @@ description = "Faker is a Python package that generates fake data for you." optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Faker-32.1.0-py3-none-any.whl", hash = "sha256:c77522577863c264bdc9dad3a2a750ad3f7ee43ff8185072e482992288898814"}, {file = "faker-32.1.0.tar.gz", hash = "sha256:aac536ba04e6b7beb2332c67df78485fc29c1880ff723beac6d1efd45e2f10f5"}, @@ -2642,7 +2542,6 @@ description = "Python client for fal.ai" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fal_client-0.5.6-py3-none-any.whl", hash = "sha256:631fd857a3c44753ee46a2eea1e7276471453aca58faac9c3702f744c7c84050"}, {file = "fal_client-0.5.6.tar.gz", hash = "sha256:d3afc4b6250023d0ee8437ec504558231d3b106d7aabc12cda8c39883faddecb"}, @@ -2664,7 +2563,6 @@ description = "FastAPI framework, high performance, easy to learn, fast to code, optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastapi-0.115.6-py3-none-any.whl", hash = "sha256:e9240b29e36fa8f4bb7290316988e90c381e5092e0cbe84e7818cc3713bcf305"}, {file = "fastapi-0.115.6.tar.gz", hash = "sha256:9ec46f7addc14ea472958a96aae5b5de65f39721a46aaf5705c480d9a8b76654"}, @@ -2686,7 +2584,6 @@ description = "Fast read/write of AVRO files" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fastavro-1.10.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1a9fe0672d2caf0fe54e3be659b13de3cad25a267f2073d6f4b9f8862acc31eb"}, {file = "fastavro-1.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86dd0410770e0c99363788f0584523709d85e57bb457372ec5c285a482c17fe6"}, @@ -2734,7 +2631,6 @@ description = "Find the feed URLs for a website." optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "feedfinder2-0.0.4.tar.gz", hash = "sha256:3701ee01a6c85f8b865a049c30ba0b4608858c803fe8e30d1d289fdbe89d0efe"}, ] @@ -2751,7 +2647,6 @@ description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, A optional = false python-versions = ">=3.6" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "feedparser-6.0.10-py3-none-any.whl", hash = "sha256:79c257d526d13b944e965f6095700587f27388e50ea16fd245babe4dfae7024f"}, {file = "feedparser-6.0.10.tar.gz", hash = "sha256:27da485f4637ce7163cdeab13a80312b93b7d0c1b775bef4a47629a3110bca51"}, @@ -2767,7 +2662,6 @@ description = "A platform independent file lock." optional = false python-versions = ">=3.8" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -2776,7 +2670,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "filetype" @@ -2785,7 +2679,6 @@ description = "Infer file type and MIME type of any file/buffer. No external dep optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, @@ -2798,7 +2691,6 @@ description = "A library for automatically generating command line interfaces." optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fire-0.7.0.tar.gz", hash = "sha256:961550f07936eaf65ad1dc8360f2b2bf8408fad46abbfa4d2a3794f8d2a95cdf"}, ] @@ -2813,7 +2705,6 @@ description = "Extract swagger specs from your flask project" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flasgger-0.9.7.1.tar.gz", hash = "sha256:ca098e10bfbb12f047acc6299cc70a33851943a746e550d86e65e60d4df245fb"}, ] @@ -2833,7 +2724,6 @@ description = "A simple framework for building complex web applications." optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flask-3.1.0-py3-none-any.whl", hash = "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136"}, {file = "flask-3.1.0.tar.gz", hash = "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac"}, @@ -2857,7 +2747,6 @@ description = "Compress responses in your Flask app with gzip, deflate, brotli o optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Flask_Compress-1.17-py3-none-any.whl", hash = "sha256:415131f197c41109f08e8fdfc3a6628d83d81680fb5ecd0b3a97410e02397b20"}, {file = "flask_compress-1.17.tar.gz", hash = "sha256:1ebb112b129ea7c9e7d6ee6d5cc0d64f226cbc50c4daddf1a58b9bd02253fbd8"}, @@ -2879,7 +2768,6 @@ description = "A Flask extension adding a decorator for CORS support" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Flask_Cors-4.0.2-py2.py3-none-any.whl", hash = "sha256:38364faf1a7a5d0a55bd1d2e2f83ee9e359039182f5e6a029557e1f56d92c09a"}, {file = "flask_cors-4.0.2.tar.gz", hash = "sha256:493b98e2d1e2f1a4720a7af25693ef2fe32fbafec09a2f72c59f3e475eda61d2"}, @@ -2895,7 +2783,6 @@ description = "User authentication and session management for Flask." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"}, {file = "Flask_Login-0.6.3-py3-none-any.whl", hash = "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d"}, @@ -2912,7 +2799,6 @@ description = "SQLAlchemy database migrations for Flask applications using Alemb optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Flask-Migrate-4.0.7.tar.gz", hash = "sha256:dff7dd25113c210b069af280ea713b883f3840c1e3455274745d7355778c8622"}, {file = "Flask_Migrate-4.0.7-py3-none-any.whl", hash = "sha256:5c532be17e7b43a223b7500d620edae33795df27c75811ddf32560f7d48ec617"}, @@ -2930,7 +2816,6 @@ description = "Simple framework for creating REST APIs" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Flask-RESTful-0.3.10.tar.gz", hash = "sha256:fe4af2ef0027df8f9b4f797aba20c5566801b6ade995ac63b588abf1a59cec37"}, {file = "Flask_RESTful-0.3.10-py2.py3-none-any.whl", hash = "sha256:1cf93c535172f112e080b0d4503a8d15f93a48c88bdd36dd87269bdaf405051b"}, @@ -2952,7 +2837,6 @@ description = "WebSocket support for Flask" optional = false python-versions = ">=3.6" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flask-sock-0.7.0.tar.gz", hash = "sha256:e023b578284195a443b8d8bdb4469e6a6acf694b89aeb51315b1a34fcf427b7d"}, {file = "flask_sock-0.7.0-py3-none-any.whl", hash = "sha256:caac4d679392aaf010d02fabcf73d52019f5bdaf1c9c131ec5a428cb3491204a"}, @@ -2972,7 +2856,6 @@ description = "Add SQLAlchemy support to your Flask application." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flask_sqlalchemy-3.1.1-py3-none-any.whl", hash = "sha256:4ba4be7f419dc72f4efd8802d69974803c37259dd42f3913b0dcf75c9447e0a0"}, {file = "flask_sqlalchemy-3.1.1.tar.gz", hash = "sha256:e4b68bb881802dda1a7d878b2fc84c06d1ee57fb40b874d3dc97dabfa36b8312"}, @@ -2989,7 +2872,6 @@ description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "flatbuffers-24.12.23-py2.py3-none-any.whl", hash = "sha256:c418e0d48890f4142b92fd3e343e73a48f194e1f80075ddcc5793779b3585444"}, {file = "flatbuffers-24.12.23.tar.gz", hash = "sha256:2910b0bc6ae9b6db78dd2b18d0b7a0709ba240fb5585f286a3a2b30785c22dac"}, @@ -3002,7 +2884,6 @@ description = "An Utility to get ttf/otf font metadata" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fontmeta-1.6.1.tar.gz", hash = "sha256:837e5bc4da879394b41bda1428a8a480eb7c4e993799a93cfb582bab771a9c24"}, ] @@ -3017,7 +2898,6 @@ description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, @@ -3072,18 +2952,18 @@ files = [ ] [package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] +all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] -interpolatable = ["munkres", "pycairo", "scipy"] +interpolatable = ["munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\""] lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] symfont = ["sympy"] -type1 = ["xattr"] +type1 = ["xattr ; sys_platform == \"darwin\""] ufo = ["fs (>=2.2.0,<3)"] -unicode = ["unicodedata2 (>=15.1.0)"] -woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] +unicode = ["unicodedata2 (>=15.1.0) ; python_version <= \"3.12\""] +woff = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "zopfli (>=0.1.4)"] [[package]] name = "frozendict" @@ -3092,7 +2972,6 @@ description = "A simple immutable dictionary" optional = false python-versions = ">=3.6" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "frozendict-2.4.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c3a05c0a50cab96b4bb0ea25aa752efbfceed5ccb24c007612bc63e51299336f"}, {file = "frozendict-2.4.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f5b94d5b07c00986f9e37a38dd83c13f5fe3bf3f1ccc8e88edea8fe15d6cd88c"}, @@ -3142,7 +3021,6 @@ description = "A list-like structure which implements collections.abc.MutableSeq optional = false python-versions = ">=3.8" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -3245,7 +3123,6 @@ description = "File-system specification" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "fsspec-2024.12.0-py3-none-any.whl", hash = "sha256:b520aed47ad9804237ff878b504267a3b0b441e97508bd6d2d8774e3db85cee2"}, {file = "fsspec-2024.12.0.tar.gz", hash = "sha256:670700c977ed2fb51e0d9f9253177ed20cbde4a3e5c0283cc5385b5870c8533f"}, @@ -3286,7 +3163,6 @@ description = "Clean single-source support for Python 3 and 2" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"}, {file = "future-1.0.0.tar.gz", hash = "sha256:bd2968309307861edae1458a4f8a4f3598c03be43b97521076aebf5d94c07b05"}, @@ -3299,7 +3175,6 @@ description = "Coroutine-based network library" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "gevent-24.11.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:92fe5dfee4e671c74ffaa431fd7ffd0ebb4b339363d24d0d944de532409b935e"}, {file = "gevent-24.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7bfcfe08d038e1fa6de458891bca65c1ada6d145474274285822896a858c870"}, @@ -3348,11 +3223,11 @@ greenlet = {version = ">=3.1.1", markers = "platform_python_implementation == \" "zope.interface" = "*" [package.extras] -dnspython = ["dnspython (>=1.16.0,<2.0)", "idna"] +dnspython = ["dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\""] docs = ["furo", "repoze.sphinx.autointerface", "sphinx", "sphinxcontrib-programoutput", "zope.schema"] -monitor = ["psutil (>=5.7.0)"] -recommended = ["cffi (>=1.17.1)", "dnspython (>=1.16.0,<2.0)", "idna", "psutil (>=5.7.0)"] -test = ["cffi (>=1.17.1)", "coverage (>=5.0)", "dnspython (>=1.16.0,<2.0)", "idna", "objgraph", "psutil (>=5.7.0)", "requests"] +monitor = ["psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\""] +recommended = ["cffi (>=1.17.1) ; platform_python_implementation == \"CPython\"", "dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\"", "psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\""] +test = ["cffi (>=1.17.1) ; platform_python_implementation == \"CPython\"", "coverage (>=5.0) ; sys_platform != \"win32\"", "dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\"", "objgraph", "psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\"", "requests"] [[package]] name = "gmpy2" @@ -3361,7 +3236,6 @@ description = "gmpy2 interface to GMP, MPFR, and MPC for Python 3.7+" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "gmpy2-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:431d599e1542b6e0b3618d3e296702c25215c97fb461d596e27adbe69d765dc6"}, {file = "gmpy2-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e51848975837751d1038e82d006e8bb488b179f093ba7fc8a59e1d8a2c61663"}, @@ -3425,7 +3299,6 @@ description = "Python bindings to the Google search engine." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-3.0.0-py2.py3-none-any.whl", hash = "sha256:889cf695f84e4ae2c55fbc0cfdaf4c1e729417fa52ab1db0485202ba173e4935"}, {file = "google-3.0.0.tar.gz", hash = "sha256:143530122ee5130509ad5e989f0512f7cb218b2d4eddbafbad40fd10e8d8ccbe"}, @@ -3441,7 +3314,6 @@ description = "Google Ai Generativelanguage API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_ai_generativelanguage-0.6.9-py3-none-any.whl", hash = "sha256:50360cd80015d1a8cc70952e98560f32fa06ddee2e8e9f4b4b98e431dc561e0b"}, {file = "google_ai_generativelanguage-0.6.9.tar.gz", hash = "sha256:899f1d3a06efa9739f1cd9d2788070178db33c89d4a76f2e8f4da76f649155fa"}, @@ -3460,7 +3332,6 @@ description = "Google API client core library" optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-api-core-2.18.0.tar.gz", hash = "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9"}, {file = "google_api_core-2.18.0-py3-none-any.whl", hash = "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6"}, @@ -3476,7 +3347,7 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4 requests = ">=2.18.0,<3.0.0.dev0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] @@ -3487,7 +3358,6 @@ description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-api-python-client-2.90.0.tar.gz", hash = "sha256:cbcb3ba8be37c6806676a49df16ac412077e5e5dc7fa967941eff977b31fba03"}, {file = "google_api_python_client-2.90.0-py2.py3-none-any.whl", hash = "sha256:4a41ffb7797d4f28e44635fb1e7076240b741c6493e7c3233c0e4421cec7c913"}, @@ -3507,7 +3377,6 @@ description = "Google Authentication Library" optional = false python-versions = ">=3.7" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"}, {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"}, @@ -3532,7 +3401,6 @@ description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, @@ -3549,7 +3417,6 @@ description = "Vertex AI API client library" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-cloud-aiplatform-1.49.0.tar.gz", hash = "sha256:e6e6d01079bb5def49e4be4db4d12b13c624b5c661079c869c13c855e5807429"}, {file = "google_cloud_aiplatform-1.49.0-py2.py3-none-any.whl", hash = "sha256:8072d9e0c18d8942c704233d1a93b8d6312fc7b278786a283247950e28ae98df"}, @@ -3571,9 +3438,9 @@ shapely = "<3.0.0dev" [package.extras] autologging = ["mlflow (>=1.27.0,<=2.1.1)"] cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"] -datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)"] +datasets = ["pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\""] endpoint = ["requests (>=2.28.1)"] -full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] +full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.9.3) ; python_version == \"3.11\"", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\"", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"] langchain = ["langchain (>=0.1.13,<0.2)", "langchain-core (<0.2)", "langchain-google-vertexai (<0.2)"] langchain-testing = ["absl-py", "cloudpickle (>=2.2.1,<3.0)", "langchain (>=0.1.13,<0.2)", "langchain-core (<0.2)", "langchain-google-vertexai (<0.2)", "pydantic (>=2.6.3,<3)", "pytest-xdist"] lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"] @@ -3583,11 +3450,11 @@ prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<=0.109.1)", "httpx (>=0.23 preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)"] private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"] rapid-evaluation = ["nest-asyncio (>=1.0.0,<1.6.0)", "pandas (>=1.0.0,<2.2.0)"] -ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)"] -ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] +ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.9.3) ; python_version == \"3.11\""] +ray-testing = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "immutabledict", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pytest-xdist", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.9.3) ; python_version == \"3.11\"", "ray[train] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "scikit-learn", "tensorflow", "torch (>=2.0.0,<2.1.0)", "xgboost", "xgboost-ray"] reasoningengine = ["cloudpickle (>=2.2.1,<3.0)", "pydantic (>=2.6.3,<3)"] -tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev)"] -testing = ["bigframes", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1)", "pyarrow (>=14.0.0)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3)", "ray[default] (>=2.5,<=2.9.3)", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0)", "tensorflow (==2.16.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0)", "torch (>=2.2.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] +tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\""] +testing = ["bigframes ; python_version >= \"3.10\"", "cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<=0.109.1)", "google-api-core (>=2.11,<3.0.0)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "immutabledict", "ipython", "kfp (>=2.6.0,<3.0.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "nest-asyncio (>=1.0.0,<1.6.0)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pandas (>=1.0.0,<2.2.0)", "pyarrow (>=10.0.1) ; python_version == \"3.11\"", "pyarrow (>=14.0.0) ; python_version >= \"3.12\"", "pyarrow (>=3.0.0,<8.0dev) ; python_version < \"3.11\"", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (>=5.3.1,<7)", "ray[default] (>=2.4,<2.5.dev0 || >2.9.0,!=2.9.1,!=2.9.2,<=2.9.3) ; python_version < \"3.11\"", "ray[default] (>=2.5,<=2.9.3) ; python_version == \"3.11\"", "requests (>=2.28.1)", "requests-toolbelt (<1.0.0)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (==2.13.0) ; python_version <= \"3.11\"", "tensorflow (==2.16.1) ; python_version > \"3.11\"", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.3.0,<3.0.0dev) ; python_version <= \"3.11\"", "tensorflow (>=2.4.0,<3.0.0dev)", "torch (>=2.0.0,<2.1.0) ; python_version <= \"3.11\"", "torch (>=2.2.0) ; python_version > \"3.11\"", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"] vizier = ["google-vizier (>=0.1.6)"] xai = ["tensorflow (>=2.3.0,<3.0.0dev)"] @@ -3598,7 +3465,6 @@ description = "Google BigQuery API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_bigquery-3.27.0-py2.py3-none-any.whl", hash = "sha256:b53b0431e5ba362976a4cd8acce72194b4116cdf8115030c7b339b884603fcc3"}, {file = "google_cloud_bigquery-3.27.0.tar.gz", hash = "sha256:379c524054d7b090fa56d0c22662cc6e6458a6229b6754c0e7177e3a73421d2c"}, @@ -3614,14 +3480,14 @@ python-dateutil = ">=2.7.3,<3.0dev" requests = ">=2.21.0,<3.0.0dev" [package.extras] -all = ["Shapely (>=1.8.4,<3.0.0dev)", "bigquery-magics (>=0.1.0)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "importlib-metadata (>=1.0.0)", "ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] +all = ["Shapely (>=1.8.4,<3.0.0dev)", "bigquery-magics (>=0.1.0)", "db-dtypes (>=0.3.0,<2.0.0dev)", "geopandas (>=0.9.0,<1.0dev)", "google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "importlib-metadata (>=1.0.0) ; python_version < \"3.8\"", "ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)", "opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)", "pandas (>=1.1.0)", "proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)", "pyarrow (>=3.0.0)", "tqdm (>=4.7.4,<5.0.0dev)"] bigquery-v2 = ["proto-plus (>=1.22.3,<2.0.0dev)", "protobuf (>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0dev)"] -bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "pyarrow (>=3.0.0)"] +bqstorage = ["google-cloud-bigquery-storage (>=2.6.0,<3.0.0dev)", "grpcio (>=1.47.0,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "pyarrow (>=3.0.0)"] geopandas = ["Shapely (>=1.8.4,<3.0.0dev)", "geopandas (>=0.9.0,<1.0dev)"] ipython = ["bigquery-magics (>=0.1.0)"] ipywidgets = ["ipykernel (>=6.0.0)", "ipywidgets (>=7.7.0)"] opentelemetry = ["opentelemetry-api (>=1.1.0)", "opentelemetry-instrumentation (>=0.20b0)", "opentelemetry-sdk (>=1.1.0)"] -pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0)", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] +pandas = ["db-dtypes (>=0.3.0,<2.0.0dev)", "importlib-metadata (>=1.0.0) ; python_version < \"3.8\"", "pandas (>=1.1.0)", "pyarrow (>=3.0.0)"] tqdm = ["tqdm (>=4.7.4,<5.0.0dev)"] [[package]] @@ -3631,7 +3497,6 @@ description = "Google Cloud API client core library" optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-cloud-core-2.4.1.tar.gz", hash = "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073"}, {file = "google_cloud_core-2.4.1-py2.py3-none-any.whl", hash = "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"}, @@ -3651,7 +3516,6 @@ description = "Google Cloud Resource Manager API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl", hash = "sha256:4860c3ea9ace760b317ea90d4e27f1b32e54ededdcc340a7cb70c8ef238d8f7c"}, {file = "google_cloud_resource_manager-1.14.0.tar.gz", hash = "sha256:daa70a3a4704759d31f812ed221e3b6f7b660af30c7862e4a0060ea91291db30"}, @@ -3671,7 +3535,6 @@ description = "Google Cloud Storage API client library" optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-cloud-storage-2.16.0.tar.gz", hash = "sha256:dda485fa503710a828d01246bd16ce9db0823dc51bbca742ce96a6817d58669f"}, {file = "google_cloud_storage-2.16.0-py2.py3-none-any.whl", hash = "sha256:91a06b96fb79cf9cdfb4e759f178ce11ea885c79938f89590344d079305f5852"}, @@ -3695,7 +3558,6 @@ description = "A python wrapper of the C library 'Google CRC32C'" optional = false python-versions = ">=3.9" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5bcc90b34df28a4b38653c36bb5ada35671ad105c99cfe915fb5bed7ad6924aa"}, {file = "google_crc32c-1.6.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:d9e9913f7bd69e093b81da4535ce27af842e7bf371cde42d1ae9e9bd382dc0e9"}, @@ -3736,7 +3598,6 @@ description = "Google Generative AI High level API client library and tools." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_generativeai-0.8.1-py3-none-any.whl", hash = "sha256:b031877f24d51af0945207657c085896a0a886eceec7a1cb7029327b0aa6e2f6"}, ] @@ -3761,7 +3622,6 @@ description = "pasta is an AST-based Python refactoring library" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google-pasta-0.2.0.tar.gz", hash = "sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e"}, {file = "google_pasta-0.2.0-py2-none-any.whl", hash = "sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954"}, @@ -3778,7 +3638,6 @@ description = "Utilities for Google Media Downloads and Resumable Uploads" optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "google_resumable_media-2.7.2-py2.py3-none-any.whl", hash = "sha256:3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa"}, {file = "google_resumable_media-2.7.2.tar.gz", hash = "sha256:5280aed4629f2b60b847b0d42f9857fd4935c11af266744df33d8074cae92fe0"}, @@ -3798,7 +3657,6 @@ description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, @@ -3818,7 +3676,6 @@ description = "Python Client Library for Supabase Auth" optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "gotrue-2.11.1-py3-none-any.whl", hash = "sha256:1b2d915bdc65fd0ad608532759ce9c72fa2e910145c1e6901f2188519e7bcd2d"}, {file = "gotrue-2.11.1.tar.gz", hash = "sha256:5594ceee60bd873e5f4fdd028b08dece3906f6013b6ed08e7786b71c0092fed0"}, @@ -3910,7 +3767,7 @@ files = [ {file = "greenlet-3.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:3319aa75e0e0639bc15ff54ca327e8dc7a6fe404003496e3c6925cd3142e0e22"}, {file = "greenlet-3.1.1.tar.gz", hash = "sha256:4ce3ac6cdb6adf7946475d7ef31777c26d94bccc377e070a7986bd2d5c515467"}, ] -markers = {main = "(python_version == \"3.11\" or python_version >= \"3.12\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_python_implementation == \"CPython\")", tools = "(python_version == \"3.11\" or python_version >= \"3.12\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")", vdb = "(python_version == \"3.11\" or python_version >= \"3.12\") and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +markers = {main = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_python_implementation == \"CPython\"", tools = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\"", vdb = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} [package.extras] docs = ["Sphinx", "furo"] @@ -3923,7 +3780,6 @@ description = "IAM API client library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl", hash = "sha256:fb4a084b30099ba3ab07d61d620a0d4429570b13ff53bd37bac75235f98b7da4"}, {file = "grpc_google_iam_v1-0.14.0.tar.gz", hash = "sha256:c66e07aa642e39bb37950f9e7f491f70dad150ac9801263b42b2814307c2df99"}, @@ -3941,7 +3797,6 @@ description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, @@ -4010,7 +3865,6 @@ description = "Status proto mapping for gRPC" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, @@ -4028,7 +3882,6 @@ description = "Protobuf code generator for gRPC" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "grpcio-tools-1.62.3.tar.gz", hash = "sha256:7c7136015c3d62c3eef493efabaf9e3380e3e66d24ee8e94c01cb71377f57833"}, {file = "grpcio_tools-1.62.3-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:2f968b049c2849540751ec2100ab05e8086c24bead769ca734fdab58698408c1"}, @@ -4092,7 +3945,6 @@ description = "WSGI HTTP Server for UNIX" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, @@ -4115,7 +3967,6 @@ description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.7" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, @@ -4128,7 +3979,6 @@ description = "HTTP/2 State-Machine based protocol implementation" optional = false python-versions = ">=3.6.1" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, @@ -4145,7 +3995,6 @@ description = "Python wrapper for hiredis" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hiredis-3.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:2892db9db21f0cf7cc298d09f85d3e1f6dc4c4c24463ab67f79bc7a006d51867"}, {file = "hiredis-3.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:93cfa6cc25ee2ceb0be81dc61eca9995160b9e16bdb7cca4a00607d57e998918"}, @@ -4265,7 +4114,6 @@ description = "Pure-Python HPACK header compression" optional = false python-versions = ">=3.6.1" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, @@ -4278,7 +4126,6 @@ description = "HTML parser based on the WHATWG HTML specification" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "html5lib-1.1-py2.py3-none-any.whl", hash = "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d"}, {file = "html5lib-1.1.tar.gz", hash = "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"}, @@ -4289,10 +4136,10 @@ six = ">=1.9" webencodings = "*" [package.extras] -all = ["chardet (>=2.2)", "genshi", "lxml"] +all = ["chardet (>=2.2)", "genshi", "lxml ; platform_python_implementation == \"CPython\""] chardet = ["chardet (>=2.2)"] genshi = ["genshi"] -lxml = ["lxml"] +lxml = ["lxml ; platform_python_implementation == \"CPython\""] [[package]] name = "httpcore" @@ -4301,7 +4148,6 @@ description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, @@ -4324,7 +4170,6 @@ description = "A comprehensive HTTP client library." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, @@ -4340,7 +4185,6 @@ description = "A collection of framework independent HTTP protocol utils." optional = false python-versions = ">=3.8.0" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httptools-0.6.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3c73ce323711a6ffb0d247dcd5a550b8babf0f757e86a52558fe5b86d6fefcc0"}, {file = "httptools-0.6.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:345c288418f0944a6fe67be8e6afa9262b18c7626c3ef3c28adc5eabc06a68da"}, @@ -4397,7 +4241,6 @@ description = "The next generation HTTP client." optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, @@ -4413,7 +4256,7 @@ sniffio = "*" socksio = {version = "==1.*", optional = true, markers = "extra == \"socks\""} [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -4426,7 +4269,6 @@ description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, @@ -4439,7 +4281,6 @@ description = "Client library to download and publish models, datasets and other optional = false python-versions = ">=3.7.0" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "huggingface_hub-0.16.4-py3-none-any.whl", hash = "sha256:0d3df29932f334fead024afc7cb4cc5149d955238b8b5e42dcf9740d6995a349"}, {file = "huggingface_hub-0.16.4.tar.gz", hash = "sha256:608c7d4f3d368b326d1747f91523dbd1f692871e8e2e7a4750314a2dd8b63e14"}, @@ -4473,7 +4314,6 @@ description = "Human friendly output for text interfaces using Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -4489,7 +4329,6 @@ description = "HTTP/2 framing layer for Python" optional = false python-versions = ">=3.6.1" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, @@ -4502,7 +4341,6 @@ description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -4518,7 +4356,6 @@ description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, @@ -4530,7 +4367,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] +testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff"] [[package]] name = "importlib-resources" @@ -4539,14 +4376,13 @@ description = "Read resources from Python packages" optional = false python-versions = ">=3.9" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -4560,7 +4396,6 @@ description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -4573,7 +4408,6 @@ description = "An ISO 8601 date/time/duration parser and formatter" optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, @@ -4586,7 +4420,6 @@ description = "Safely pass data to untrusted environments and back." optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, @@ -4599,7 +4432,6 @@ description = "Chinese Words Segmentation Utilities" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jieba-0.42.1.tar.gz", hash = "sha256:055ca12f62674fafed09427f176506079bc135638a14e23e25be909131928db2"}, ] @@ -4611,7 +4443,6 @@ description = "Chinese Words Segementation Utilities" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jieba3k-0.35.1.zip", hash = "sha256:980a4f2636b778d312518066be90c7697d410dd5a472385f5afced71a2db1c10"}, ] @@ -4623,7 +4454,6 @@ description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, @@ -4642,7 +4472,6 @@ description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jiter-0.8.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ca8577f6a413abe29b079bc30f907894d7eb07a865c4df69475e868d73e71c7b"}, {file = "jiter-0.8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b25bd626bde7fb51534190c7e3cb97cee89ee76b76d7585580e22f34f5e3f393"}, @@ -4729,7 +4558,6 @@ description = "JSON Matching Expressions" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, @@ -4742,7 +4570,6 @@ description = "Lightweight pipelining with Python functions" optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "joblib-1.4.2-py3-none-any.whl", hash = "sha256:06d478d5674cbc267e7496a410ee875abd68e4340feff4490bcb7afb88060ae6"}, {file = "joblib-1.4.2.tar.gz", hash = "sha256:2382c5816b2636fbd20a09e0f4e9dad4736765fdfb7dca582943b9c1366b3f0e"}, @@ -4755,7 +4582,6 @@ description = "Library with helpers for the jsonlines file format" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55"}, {file = "jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74"}, @@ -4771,7 +4597,6 @@ description = "A final implementation of JSONPath for Python that aims to be sta optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpath-ng-1.6.1.tar.gz", hash = "sha256:086c37ba4917304850bd837aeab806670224d3f038fe2833ff593a672ef0a5fa"}, {file = "jsonpath_ng-1.6.1-py3-none-any.whl", hash = "sha256:8f22cd8273d7772eea9aaa84d922e0841aa36fdb8a2c6b7f6c3791a16a9bc0be"}, @@ -4787,7 +4612,6 @@ description = "A more powerful JSONPath implementation in modern python" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666"}, {file = "jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575"}, @@ -4800,7 +4624,6 @@ description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -4823,7 +4646,6 @@ description = "The JSON Schema meta-schemas and vocabularies, exposed as a Regis optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "jsonschema_specifications-2024.10.1-py3-none-any.whl", hash = "sha256:a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf"}, {file = "jsonschema_specifications-2024.10.1.tar.gz", hash = "sha256:0f38b83639958ce1152d02a7f062902c41c8fd20d558b0c34344292d417ae272"}, @@ -4839,7 +4661,6 @@ description = "Static image export for web-based visualization libraries with ze optional = false python-versions = "*" groups = ["indirect", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kaleido-0.2.1-py2.py3-none-macosx_10_11_x86_64.whl", hash = "sha256:ca6f73e7ff00aaebf2843f73f1d3bacde1930ef5041093fe76b83a15785049a7"}, {file = "kaleido-0.2.1-py2.py3-none-macosx_11_0_arm64.whl", hash = "sha256:bb9a5d1f710357d5d432ee240ef6658a6d124c3e610935817b4b42da9c787c05"}, @@ -4856,7 +4677,6 @@ description = "A fast implementation of the Cassowary constraint solver" optional = false python-versions = ">=3.10" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:88c6f252f6816a73b1f8c904f7bbe02fd67c09a69f7cb8a0eecdbf5ce78e63db"}, {file = "kiwisolver-1.4.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72941acb7b67138f35b879bbe85be0f6c6a70cab78fe3ef6db9c024d9223e5b"}, @@ -4947,7 +4767,6 @@ description = "Messaging library for Python." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kombu-5.4.2-py3-none-any.whl", hash = "sha256:14212f5ccf022fc0a70453bb025a1dcc32782a588c49ea866884047d66e14763"}, {file = "kombu-5.4.2.tar.gz", hash = "sha256:eef572dd2fd9fc614b37580e3caeafdd5af46c1eff31e7fba89138cdb406f2cf"}, @@ -4963,7 +4782,7 @@ azureservicebus = ["azure-servicebus (>=7.10.0)"] azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] confluentkafka = ["confluent-kafka (>=2.2.0)"] consul = ["python-consul2 (==0.1.5)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] +librabbitmq = ["librabbitmq (>=2.0.0) ; python_version < \"3.11\""] mongodb = ["pymongo (>=4.1.1)"] msgpack = ["msgpack (==1.1.0)"] pyro = ["pyro4 (==4.82)"] @@ -4971,7 +4790,7 @@ qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] redis = ["redis (>=4.5.2,!=4.5.5,!=5.0.2)"] slmq = ["softlayer-messaging (>=1.0.3)"] sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] -sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] +sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5) ; sys_platform != \"win32\" and platform_python_implementation == \"CPython\"", "urllib3 (>=1.26.16)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=2.8.0)"] @@ -4982,7 +4801,6 @@ description = "Kubernetes python client" optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "kubernetes-31.0.0-py2.py3-none-any.whl", hash = "sha256:bf141e2d380c8520eada8b351f4e319ffee9636328c137aa432bc486ca1200e1"}, {file = "kubernetes-31.0.0.tar.gz", hash = "sha256:28945de906c8c259c1ebe62703b56a03b714049372196f854105afe4e6d014c0"}, @@ -5011,7 +4829,6 @@ description = "Language detection library ported from Google's language-detectio optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langdetect-1.0.9-py2-none-any.whl", hash = "sha256:7cbc0746252f19e76f77c0b1690aadf01963be835ef0cd4b56dddf2a8f1dfc2a"}, {file = "langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0"}, @@ -5027,7 +4844,6 @@ description = "A client library for accessing langfuse" optional = false python-versions = "<4.0,>=3.8.1" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langfuse-2.51.5-py3-none-any.whl", hash = "sha256:b95401ca710ef94b521afa6541933b6f93d7cfd4a97523c8fc75bca4d6d219fb"}, {file = "langfuse-2.51.5.tar.gz", hash = "sha256:55bc37b5c5d3ae133c1a95db09117cfb3117add110ba02ebbf2ce45ac4395c5b"}, @@ -5054,7 +4870,6 @@ description = "Client library to connect to the LangSmith LLM Tracing and Evalua optional = false python-versions = "<4.0,>=3.8.1" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, @@ -5080,7 +4895,6 @@ description = "Python extension for computing string edit distances and similari optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "levenshtein-0.26.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8dc4a4aecad538d944a1264c12769c99e3c0bf8e741fc5e454cc954913befb2e"}, {file = "levenshtein-0.26.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ec108f368c12b25787c8b1a4537a1452bc53861c3ee4abc810cc74098278edcd"}, @@ -5182,7 +4996,6 @@ description = "Library to easily interface with LLM API providers" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "litellm-1.51.3-py3-none-any.whl", hash = "sha256:440d3c7cc5ab8eeb12cee8f4d806bff05b7db834ebc11117d7fa070a1142ced5"}, {file = "litellm-1.51.3.tar.gz", hash = "sha256:31eff9fcbf7b058bac0fd7432c4ea0487e8555f12446a1f30e5862e33716f44d"}, @@ -5212,7 +5025,6 @@ description = "lightweight wrapper around basic LLVM functionality" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "llvmlite-0.43.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a289af9a1687c6cf463478f0fa8e8aa3b6fb813317b0d70bf1ed0759eab6f761"}, {file = "llvmlite-0.43.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4fd101f571a31acb1559ae1af30f30b1dc4b3186669f92ad780e17c81e91bc"}, @@ -5244,7 +5056,6 @@ description = "Python logging made (stupidly) simple" optional = false python-versions = "<4.0,>=3.5" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, @@ -5255,7 +5066,7 @@ colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} [package.extras] -dev = ["Sphinx (==8.1.3)", "build (==1.2.2)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.5.0)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.13.0)", "mypy (==v1.4.1)", "myst-parser (==4.0.0)", "pre-commit (==4.0.1)", "pytest (==6.1.2)", "pytest (==8.3.2)", "pytest-cov (==2.12.1)", "pytest-cov (==5.0.0)", "pytest-cov (==6.0.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.1.0)", "sphinx-rtd-theme (==3.0.2)", "tox (==3.27.1)", "tox (==4.23.2)", "twine (==6.0.1)"] +dev = ["Sphinx (==8.1.3) ; python_version >= \"3.11\"", "build (==1.2.2) ; python_version >= \"3.11\"", "colorama (==0.4.5) ; python_version < \"3.8\"", "colorama (==0.4.6) ; python_version >= \"3.8\"", "exceptiongroup (==1.1.3) ; python_version >= \"3.7\" and python_version < \"3.11\"", "freezegun (==1.1.0) ; python_version < \"3.8\"", "freezegun (==1.5.0) ; python_version >= \"3.8\"", "mypy (==v0.910) ; python_version < \"3.6\"", "mypy (==v0.971) ; python_version == \"3.6\"", "mypy (==v1.13.0) ; python_version >= \"3.8\"", "mypy (==v1.4.1) ; python_version == \"3.7\"", "myst-parser (==4.0.0) ; python_version >= \"3.11\"", "pre-commit (==4.0.1) ; python_version >= \"3.9\"", "pytest (==6.1.2) ; python_version < \"3.8\"", "pytest (==8.3.2) ; python_version >= \"3.8\"", "pytest-cov (==2.12.1) ; python_version < \"3.8\"", "pytest-cov (==5.0.0) ; python_version == \"3.8\"", "pytest-cov (==6.0.0) ; python_version >= \"3.9\"", "pytest-mypy-plugins (==1.9.3) ; python_version >= \"3.6\" and python_version < \"3.8\"", "pytest-mypy-plugins (==3.1.0) ; python_version >= \"3.8\"", "sphinx-rtd-theme (==3.0.2) ; python_version >= \"3.11\"", "tox (==3.27.1) ; python_version < \"3.8\"", "tox (==4.23.2) ; python_version >= \"3.8\"", "twine (==6.0.1) ; python_version >= \"3.11\""] [[package]] name = "lxml" @@ -5264,7 +5075,6 @@ description = "Powerful and Pythonic XML processing library combining libxml2/li optional = false python-versions = ">=3.6" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, @@ -5420,7 +5230,6 @@ description = "LZ4 Bindings for Python" optional = false python-versions = ">=3.8" groups = ["tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "lz4-4.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b891880c187e96339474af2a3b2bfb11a8e4732ff5034be919aa9029484cd201"}, {file = "lz4-4.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:222a7e35137d7539c9c33bb53fcbb26510c5748779364014235afc62b0ec797f"}, @@ -5472,7 +5281,6 @@ description = "Mailchimp Transactional API" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mailchimp_transactional-1.0.56-py3-none-any.whl", hash = "sha256:a76ea88b90a2d47d8b5134586aabbd3a96c459f6066d8886748ab59e50de36eb"}, ] @@ -5491,7 +5299,6 @@ description = "A super-fast templating language that borrows the best ideas from optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Mako-1.3.8-py3-none-any.whl", hash = "sha256:42f48953c7eb91332040ff567eb7eea69b22e7a4affbc5ba8e845e8f730f6627"}, {file = "mako-1.3.8.tar.gz", hash = "sha256:577b97e414580d3e088d47c2dbbe9594aa7a5146ed2875d4dfa9075af2dd3cc8"}, @@ -5512,7 +5319,6 @@ description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, @@ -5529,7 +5335,6 @@ description = "Python port of markdown-it. Markdown parsing, done right!" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -5555,7 +5360,6 @@ description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, @@ -5627,7 +5431,6 @@ description = "A lightweight library for converting complex datatypes to and fro optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "marshmallow-3.24.1-py3-none-any.whl", hash = "sha256:ddb5c9987017d37be351c184e4e867e7bf55f7331f4da730dedad6b7af662cdd"}, {file = "marshmallow-3.24.1.tar.gz", hash = "sha256:efdcb656ac8788f0e3d1d938f8dc0f237bf1a99aff8f6dfbffa594981641cea0"}, @@ -5648,7 +5451,6 @@ description = "Python plotting package" optional = false python-versions = ">=3.9" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, @@ -5698,7 +5500,6 @@ description = "Markdown URL utilities" optional = false python-versions = ">=3.7" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -5711,7 +5512,7 @@ description = "A lightweight version of Milvus wrapped with Python." optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and sys_platform != \"win32\"" +markers = "sys_platform != \"win32\"" files = [ {file = "milvus_lite-2.4.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9e563ae0dca1b41bfd76b90f06b2bcc474460fe4eba142c9bab18d2747ff843b"}, {file = "milvus_lite-2.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d21472bd24eb327542817829ce7cb51878318e6173c4d62353c77421aecf98d6"}, @@ -5729,7 +5530,6 @@ description = "A sane and fast Markdown parser with useful plugins and renderers optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mistune-3.1.0-py3-none-any.whl", hash = "sha256:b05198cf6d671b3deba6c87ec6cf0d4eb7b72c524636eddb6dbf13823b52cee1"}, {file = "mistune-3.1.0.tar.gz", hash = "sha256:dbcac2f78292b9dc066cd03b7a3a26b62d85f8159f2ea5fd28e55df79908d667"}, @@ -5742,7 +5542,6 @@ description = "Python extension for MurmurHash (MurmurHash3), a set of fast and optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f0a4b4bf05778ed77d820d6e7d0e9bd6beb0c01af10e1ce9233f5d2f814fcafa"}, {file = "mmh3-5.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac7a391039aeab95810c2d020b69a94eb6b4b37d4e2374831e92db3a0cdf71c6"}, @@ -5857,7 +5656,6 @@ description = "Rolling backport of unittest.mock for all Pythons" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mock-4.0.3-py3-none-any.whl", hash = "sha256:122fcb64ee37cfad5b3f48d7a7d51875d7031aaf3d8be7c42e2bee25044eee62"}, {file = "mock-4.0.3.tar.gz", hash = "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc"}, @@ -5875,7 +5673,6 @@ description = "An implementation of time.monotonic() for Python 2 & < 3.3" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, @@ -5888,7 +5685,6 @@ description = "Fonts manager for matplotlib" optional = false python-versions = ">=3.9" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mplfonts-0.0.10-py3-none-any.whl", hash = "sha256:835e35ada4a6ef85ce29ea81dd589a98b92af5b5c8e8b9f4e2d79dfea9c2ba40"}, {file = "mplfonts-0.0.10.tar.gz", hash = "sha256:5da8d1afd53b8d38a1053d61a7ebd936de08b8480fba17f9b655beb270af8089"}, @@ -5907,7 +5703,6 @@ description = "Python library for arbitrary-precision floating-point arithmetic" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c"}, {file = "mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f"}, @@ -5916,7 +5711,7 @@ files = [ [package.extras] develop = ["codecov", "pycodestyle", "pytest (>=4.6)", "pytest-cov", "wheel"] docs = ["sphinx"] -gmpy = ["gmpy2 (>=2.1.0a4)"] +gmpy = ["gmpy2 (>=2.1.0a4) ; platform_python_implementation != \"PyPy\""] tests = ["pytest (>=4.6)"] [[package]] @@ -5926,7 +5721,6 @@ description = "The Microsoft Authentication Library (MSAL) for Python library en optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "msal-1.31.1-py3-none-any.whl", hash = "sha256:29d9882de247e96db01386496d59f29035e5e841bcac892e6d7bf4390bf6bd17"}, {file = "msal-1.31.1.tar.gz", hash = "sha256:11b5e6a3f802ffd3a72107203e20c4eac6ef53401961b880af2835b723d80578"}, @@ -5938,7 +5732,7 @@ PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" [package.extras] -broker = ["pymsalruntime (>=0.14,<0.18)", "pymsalruntime (>=0.17,<0.18)"] +broker = ["pymsalruntime (>=0.14,<0.18) ; python_version >= \"3.6\" and platform_system == \"Windows\"", "pymsalruntime (>=0.17,<0.18) ; python_version >= \"3.8\" and platform_system == \"Darwin\""] [[package]] name = "msal-extensions" @@ -5947,7 +5741,6 @@ description = "Microsoft Authentication Library extensions (MSAL EX) provides a optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "msal_extensions-1.2.0-py3-none-any.whl", hash = "sha256:cf5ba83a2113fa6dc011a254a72f1c223c88d7dfad74cc30617c4679a417704d"}, {file = "msal_extensions-1.2.0.tar.gz", hash = "sha256:6f41b320bfd2933d631a215c91ca0dd3e67d84bd1a2f50ce917d5874ec646bef"}, @@ -5964,7 +5757,6 @@ description = "AutoRest swagger generator Python client runtime." optional = false python-versions = ">=3.6" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "msrest-0.7.1-py3-none-any.whl", hash = "sha256:21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32"}, {file = "msrest-0.7.1.zip", hash = "sha256:6e7661f46f3afd88b75667b7187a92829924446c7ea1d169be8c4bb7eeb788b9"}, @@ -5978,7 +5770,7 @@ requests = ">=2.16,<3.0" requests-oauthlib = ">=0.5.0" [package.extras] -async = ["aiodns", "aiohttp (>=3.0)"] +async = ["aiodns ; python_version >= \"3.5\"", "aiohttp (>=3.0) ; python_version >= \"3.5\""] [[package]] name = "multidict" @@ -5987,7 +5779,6 @@ description = "multidict implementation" optional = false python-versions = ">=3.8" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -6090,7 +5881,6 @@ description = "better multiprocessing and multithreading in Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7ddb24e5bcdb64e90ec5543a1f05a39463068b6d3b804aa3f2a4e16ec28562d6"}, {file = "multiprocess-0.70.17-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d729f55198a3579f6879766a6d9b72b42d4b320c0dcb7844afb774d75b573c62"}, @@ -6120,7 +5910,6 @@ description = "Non-blocking Python methods using decorators" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "multitasking-0.0.11-py3-none-any.whl", hash = "sha256:1e5b37a5f8fc1e6cfaafd1a82b6b1cc6d2ed20037d3b89c25a84f499bd7b3dd4"}, {file = "multitasking-0.0.11.tar.gz", hash = "sha256:4d6bc3cc65f9b2dca72fb5a787850a88dae8f620c2b36ae9b55248e51bcd6026"}, @@ -6133,7 +5922,6 @@ description = "Optional static typing for Python" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a"}, {file = "mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80"}, @@ -6187,7 +5975,6 @@ description = "Type system extensions for programs checked with the mypy type ch optional = false python-versions = ">=3.5" groups = ["main", "dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, @@ -6200,7 +5987,6 @@ description = "JsonDecoder for ndjson" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ndjson-0.3.1-py2.py3-none-any.whl", hash = "sha256:839c22275e6baa3040077b83c005ac24199b94973309a8a1809be962c753a410"}, {file = "ndjson-0.3.1.tar.gz", hash = "sha256:bf9746cb6bb1cb53d172cda7f154c07c786d665ff28341e4e689b796b229e5d6"}, @@ -6213,7 +5999,6 @@ description = "Patch asyncio to allow nested event loops" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, @@ -6226,7 +6011,6 @@ description = "Simplified python article discovery & extraction." optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "newspaper3k-0.2.8-py3-none-any.whl", hash = "sha256:44a864222633d3081113d1030615991c3dbba87239f6bbf59d91240f71a22e3e"}, {file = "newspaper3k-0.2.8.tar.gz", hash = "sha256:9f1bd3e1fb48f400c715abf875cc7b0a67b7ddcd87f50c9aeeb8fcbbbd9004fb"}, @@ -6254,7 +6038,6 @@ description = "Natural Language Toolkit" optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1"}, {file = "nltk-3.9.1.tar.gz", hash = "sha256:87d127bd3de4bd89a4f81265e5fa59cb1b199b27440175370f7417d2bc7ae868"}, @@ -6281,7 +6064,6 @@ description = "The official Nomic python client." optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "nomic-3.1.3.tar.gz", hash = "sha256:b06744b79fbe47451874ca7b272cafa1bb272cfb82acc79c64abfc943a98e035"}, ] @@ -6313,7 +6095,6 @@ description = "novita SDK for Python" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "novita_client-0.5.7-py3-none-any.whl", hash = "sha256:844a4c09c98328c8d4f72e1d3f63f76285c2963dcc37ccb2de41cbfdbe7fa51d"}, {file = "novita_client-0.5.7.tar.gz", hash = "sha256:65baf748757aafd8ab080a64f9ab069a40c0810fc1fa9be9c26596988a0aa4b4"}, @@ -6331,7 +6112,6 @@ description = "compiling Python code using LLVM" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numba-0.60.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d761de835cd38fb400d2c26bb103a2726f548dc30368853121d66201672e651"}, {file = "numba-0.60.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:159e618ef213fba758837f9837fb402bbe65326e60ba0633dbe6c7f274d42c1b"}, @@ -6367,7 +6147,6 @@ description = "Fast numerical expression evaluator for NumPy" optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numexpr-2.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c52b4ac54514f5d4d8ead66768810cd5f77aa198e6064213d9b5c7b2e1c97c35"}, {file = "numexpr-2.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:50f57bc333f285e8c46b1ce61c6e94ec9bb74e4ea0d674d1c6c6f4a286f64fe4"}, @@ -6410,7 +6189,6 @@ description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" groups = ["main", "indirect", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -6457,7 +6235,6 @@ description = "A generic, spec-compliant, thorough implementation of the OAuth r optional = false python-versions = ">=3.6" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -6475,7 +6252,6 @@ description = "Oracle Cloud Infrastructure Python SDK" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oci-2.135.2-py3-none-any.whl", hash = "sha256:5213319244e1c7f108bcb417322f33f01f043fd9636d4063574039f5fdf4e4f7"}, {file = "oci-2.135.2.tar.gz", hash = "sha256:520f78983c5246eae80dd5ecfd05e3a565c8b98d02ef0c1b11ba1f61bcccb61d"}, @@ -6496,7 +6272,6 @@ description = "Python API and tools to manipulate OpenDocument files" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "odfpy-1.4.1.tar.gz", hash = "sha256:db766a6e59c5103212f3cc92ec8dd50a0f3a02790233ed0b52148b70d3c438ec"}, ] @@ -6511,7 +6286,6 @@ description = "Python package to parse, read and write Microsoft OLE2 files (Str optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "olefile-0.47-py2.py3-none-any.whl", hash = "sha256:543c7da2a7adadf21214938bb79c83ea12b473a4b6ee4ad4bf854e7715e13d1f"}, {file = "olefile-0.47.zip", hash = "sha256:599383381a0bf3dfbd932ca0ca6515acd174ed48870cbf7fee123d698c192c1c"}, @@ -6527,7 +6301,6 @@ description = "ONNX Runtime is a runtime accelerator for Machine Learning models optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "onnxruntime-1.20.1-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:e50ba5ff7fed4f7d9253a6baf801ca2883cc08491f9d32d78a80da57256a5439"}, {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b2908b50101a19e99c4d4e97ebb9905561daf61829403061c1adc1b588bc0de"}, @@ -6567,7 +6340,6 @@ description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openai-1.52.2-py3-none-any.whl", hash = "sha256:57e9e37bc407f39bb6ec3a27d7e8fb9728b2779936daa1fcf95df17d3edfaccc"}, {file = "openai-1.52.2.tar.gz", hash = "sha256:87b7d0f69d85f5641678d414b7ee3082363647a5c66a462ed7f3ccb59582da0d"}, @@ -6593,7 +6365,6 @@ description = "A stats collection and distributed tracing framework" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opencensus-0.11.4-py2.py3-none-any.whl", hash = "sha256:a18487ce68bc19900336e0ff4655c5a116daf10c1b3685ece8d971bddad6a864"}, {file = "opencensus-0.11.4.tar.gz", hash = "sha256:cbef87d8b8773064ab60e5c2a1ced58bbaa38a6d052c41aec224958ce544eff2"}, @@ -6611,7 +6382,6 @@ description = "OpenCensus Runtime Context" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opencensus-context-0.1.3.tar.gz", hash = "sha256:a03108c3c10d8c80bb5ddf5c8a1f033161fa61972a9917f9b9b3a18517f0088c"}, {file = "opencensus_context-0.1.3-py2.py3-none-any.whl", hash = "sha256:073bb0590007af276853009fac7e4bab1d523c3f03baf4cb4511ca38967c6039"}, @@ -6624,7 +6394,6 @@ description = "OpenCensus Azure Monitor Exporter" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opencensus-ext-azure-1.1.14.tar.gz", hash = "sha256:c9c6ebad542aeb61813322e627d5889a563e7b8c4e024bf58469d06db73ab148"}, {file = "opencensus_ext_azure-1.1.14-py2.py3-none-any.whl", hash = "sha256:a1f6870d6e4e312832e6ebd95df28ed499ac637c36cbd77665fe06e24ddeb2f1"}, @@ -6644,7 +6413,6 @@ description = "OpenCensus logging Integration" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opencensus-ext-logging-0.1.1.tar.gz", hash = "sha256:c203b70f034151dada529f543af330ba17aaffec27d8a5267d03c713eb1de334"}, {file = "opencensus_ext_logging-0.1.1-py2.py3-none-any.whl", hash = "sha256:cfdaf5da5d8b195ff3d1af87a4066a6621a28046173f6be4b0b6caec4a3ca89f"}, @@ -6660,7 +6428,6 @@ description = "Apache OpenDAL™ Python Binding" optional = false python-versions = ">=3.10" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opendal-0.45.13-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:3afe389215249b1d067cace6b8d1259ab1a2a74bc963d1c7e47dac5e85c8ffc5"}, {file = "opendal-0.45.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a0062482d348617abdc89515fa9cea5c17ae8ac28694b8b5a704530eb91c90e"}, @@ -6688,7 +6455,6 @@ description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, @@ -6704,7 +6470,6 @@ description = "Python client for OpenSearch" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opensearch-py-2.4.0.tar.gz", hash = "sha256:7eba2b6ed2ddcf33225bfebfba2aee026877838cc39f760ec80f27827308cc4b"}, {file = "opensearch_py-2.4.0-py2.py3-none-any.whl", hash = "sha256:316077235437c8ceac970232261f3393c65fb92a80f33c5b106f50f1dab24fd9"}, @@ -6730,7 +6495,6 @@ description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_api-1.29.0-py3-none-any.whl", hash = "sha256:5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8"}, {file = "opentelemetry_api-1.29.0.tar.gz", hash = "sha256:d04a6cf78aad09614f52964ecb38021e248f5714dc32c2e0d8fd99517b4d69cf"}, @@ -6747,7 +6511,6 @@ description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.15.0-py3-none-any.whl", hash = "sha256:c2a5492ba7d140109968135d641d06ce3c5bd73c50665f787526065d57d7fd1d"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.15.0.tar.gz", hash = "sha256:844f2a4bb9bcda34e4eb6fe36765e5031aacb36dc60ed88c90fc246942ea26e7"}, @@ -6771,7 +6534,6 @@ description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Py optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation-0.50b0-py3-none-any.whl", hash = "sha256:b8f9fc8812de36e1c6dffa5bfc6224df258841fb387b6dfe5df15099daa10630"}, {file = "opentelemetry_instrumentation-0.50b0.tar.gz", hash = "sha256:7d98af72de8dec5323e5202e46122e5f908592b22c6d24733aad619f07d82979"}, @@ -6790,7 +6552,6 @@ description = "ASGI instrumentation for OpenTelemetry" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_asgi-0.50b0-py3-none-any.whl", hash = "sha256:2ba1297f746e55dec5a17fe825689da0613662fb25c004c3965a6c54b1d5be22"}, {file = "opentelemetry_instrumentation_asgi-0.50b0.tar.gz", hash = "sha256:3ca4cb5616ae6a3e8ce86e7d5c360a8d8cc8ed722cf3dc8a5e44300774e87d49"}, @@ -6813,7 +6574,6 @@ description = "OpenTelemetry FastAPI Instrumentation" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_instrumentation_fastapi-0.50b0-py3-none-any.whl", hash = "sha256:8f03b738495e4705fbae51a2826389c7369629dace89d0f291c06ffefdff5e52"}, {file = "opentelemetry_instrumentation_fastapi-0.50b0.tar.gz", hash = "sha256:16b9181682136da210295def2bb304a32fb9bdee9a935cdc9da43567f7c1149e"}, @@ -6836,7 +6596,6 @@ description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_proto-1.15.0-py3-none-any.whl", hash = "sha256:044b6d044b4d10530f250856f933442b8753a17f94ae37c207607f733fb9a844"}, {file = "opentelemetry_proto-1.15.0.tar.gz", hash = "sha256:9c4008e40ac8cab359daac283fbe7002c5c29c77ea2674ad5626a249e64e0101"}, @@ -6852,7 +6611,6 @@ description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_sdk-1.29.0-py3-none-any.whl", hash = "sha256:173be3b5d3f8f7d671f20ea37056710217959e774e2749d984355d1f9391a30a"}, {file = "opentelemetry_sdk-1.29.0.tar.gz", hash = "sha256:b0787ce6aade6ab84315302e72bd7a7f2f014b0fb1b7c3295b88afe014ed0643"}, @@ -6870,7 +6628,6 @@ description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl", hash = "sha256:e87efba8fdb67fb38113efea6a349531e75ed7ffc01562f65b802fcecb5e115e"}, {file = "opentelemetry_semantic_conventions-0.50b0.tar.gz", hash = "sha256:02dc6dbcb62f082de9b877ff19a3f1ffaa3c306300fa53bfac761c4567c83d38"}, @@ -6887,7 +6644,6 @@ description = "Web util for OpenTelemetry" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opentelemetry_util_http-0.50b0-py3-none-any.whl", hash = "sha256:21f8aedac861ffa3b850f8c0a6c373026189eb8630ac6e14a2bf8c55695cc090"}, {file = "opentelemetry_util_http-0.50b0.tar.gz", hash = "sha256:dc4606027e1bc02aabb9533cc330dd43f874fca492e4175c31d7154f341754af"}, @@ -6900,7 +6656,6 @@ description = "Comet tool for logging and evaluating LLM traces" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "opik-1.3.4-py3-none-any.whl", hash = "sha256:c5e10a9f1fb18188471cce2ae8b841e8b187d04ee3b1aed01c643102bae588fb"}, {file = "opik-1.3.4.tar.gz", hash = "sha256:6013d3af4aea61f38b9e7121aa5d8cf4305a5ed3807b3f43d9ab91602b2a5785"}, @@ -6927,7 +6682,6 @@ description = "Python interface to Oracle Database" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oracledb-2.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3dacef7c4dd3fca94728f05336076e063450bb57ea569e8dd67fae960aaf537e"}, {file = "oracledb-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd8fdc93a65ae2e1c934a0e3e64cb01997ba004c48a986a37583f670dd344802"}, @@ -7049,7 +6803,7 @@ files = [ {file = "orjson-3.10.13-cp39-cp39-win_amd64.whl", hash = "sha256:5385935a73adce85cc7faac9d396683fd813566d3857fa95a0b521ef84a5b588"}, {file = "orjson-3.10.13.tar.gz", hash = "sha256:eb9bfb14ab8f68d9d9492d4817ae497788a15fd7da72e14dfabc289c3bb088ec"}, ] -markers = {main = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"PyPy\"", vdb = "python_version == \"3.11\" or python_version >= \"3.12\""} +markers = {main = "platform_python_implementation != \"PyPy\""} [[package]] name = "oss2" @@ -7058,7 +6812,6 @@ description = "Aliyun OSS (Object Storage Service) SDK" optional = false python-versions = "*" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "oss2-2.18.5.tar.gz", hash = "sha256:555c857f4441ae42a2c0abab8fc9482543fba35d65a4a4be73101c959a2b4011"}, ] @@ -7078,7 +6831,6 @@ description = "A decorator to automatically detect mismatch when overriding a me optional = false python-versions = ">=3.6" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, @@ -7091,7 +6843,6 @@ description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" groups = ["main", "dev", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, @@ -7104,7 +6855,6 @@ description = "Powerful data structures for data analysis, time series, and stat optional = false python-versions = ">=3.9" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, @@ -7200,7 +6950,6 @@ description = "Type annotations for pandas" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pandas_stubs-2.2.3.241126-py3-none-any.whl", hash = "sha256:74aa79c167af374fe97068acc90776c0ebec5266a6e5c69fe11e9c2cf51f2267"}, {file = "pandas_stubs-2.2.3.241126.tar.gz", hash = "sha256:cf819383c6d9ae7d4dabf34cd47e1e45525bb2f312e6ad2939c2c204cb708acd"}, @@ -7217,7 +6966,6 @@ description = "parallel graph management and execution in heterogeneous computin optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pathos-0.3.3-py3-none-any.whl", hash = "sha256:e04616c6448608ad1f809360be22e3f2078d949a36a81e6991da6c2dd1f82513"}, {file = "pathos-0.3.3.tar.gz", hash = "sha256:dcb2a5f321aa34ca541c1c1861011ea49df357bb908379c21dd5741f666e0a58"}, @@ -7236,7 +6984,6 @@ description = "a little orm" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "peewee-3.17.8.tar.gz", hash = "sha256:ce1d05db3438830b989a1b9d0d0aa4e7f6134d5f6fd57686eeaa26a3e6485a8c"}, ] @@ -7248,7 +6995,6 @@ description = "Python binding for pgvecto.rs" optional = false python-versions = "<3.13,>=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pgvecto_rs-0.2.2-py3-none-any.whl", hash = "sha256:5f3f7f806813de408c45dc10a9eb418b986c4d7b7723e8fce9298f2f7d8fbbd5"}, {file = "pgvecto_rs-0.2.2.tar.gz", hash = "sha256:edaa913d1747152b1407cbdf6337d51ac852547b54953ef38997433be3a75a3b"}, @@ -7272,7 +7018,6 @@ description = "pgvector support for Python" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pgvector-0.2.5-py2.py3-none-any.whl", hash = "sha256:5e5e93ec4d3c45ab1fa388729d56c602f6966296e19deee8878928c6d567e41b"}, ] @@ -7287,7 +7032,6 @@ description = "Python Imaging Library (Fork)" optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pillow-11.1.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:e1abe69aca89514737465752b4bcaf8016de61b3be1397a8fc260ba33321b3a8"}, {file = "pillow-11.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c640e5a06869c75994624551f45e5506e4256562ead981cce820d5ab39ae2192"}, @@ -7367,7 +7111,7 @@ docs = ["furo", "olefile", "sphinx (>=8.1)", "sphinx-copybutton", "sphinx-inline fpx = ["olefile"] mic = ["olefile"] tests = ["check-manifest", "coverage (>=7.4.2)", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout", "trove-classifiers (>=2024.10.12)"] -typing = ["typing-extensions"] +typing = ["typing-extensions ; python_version < \"3.10\""] xmp = ["defusedxml"] [[package]] @@ -7377,7 +7121,6 @@ description = "A small Python package for determining appropriate platform-speci optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -7395,7 +7138,6 @@ description = "An open-source, interactive data visualization library for Python optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "plotly-5.24.1-py3-none-any.whl", hash = "sha256:f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089"}, {file = "plotly-5.24.1.tar.gz", hash = "sha256:dbc8ac8339d248a4bcc36e08a5659bacfe1b079390b8953533f4eb22169b4bae"}, @@ -7412,7 +7154,6 @@ description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -7429,7 +7170,6 @@ description = "Python Lex & Yacc" optional = false python-versions = "*" groups = ["lint", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, @@ -7442,7 +7182,6 @@ description = "Wraps the portalocker recipe for easy usage" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, @@ -7463,7 +7202,6 @@ description = "PostgREST client for Python. This library provides an ORM interfa optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "postgrest-0.17.2-py3-none-any.whl", hash = "sha256:f7c4f448e5a5e2d4c1dcf192edae9d1007c4261e9a6fb5116783a0046846ece2"}, {file = "postgrest-0.17.2.tar.gz", hash = "sha256:445cd4e4a191e279492549df0c4e827d32f9d01d0852599bb8a6efb0f07fcf78"}, @@ -7481,7 +7219,6 @@ description = "Integrate PostHog into any python application." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "posthog-3.7.5-py2.py3-none-any.whl", hash = "sha256:022132c17069dde03c5c5904e2ae1b9bd68d5059cbc5a8dffc5c1537a1b71cb5"}, {file = "posthog-3.7.5.tar.gz", hash = "sha256:8ba40ab623da35db72715fc87fe7dccb7fc272ced92581fe31db2d4dbe7ad761"}, @@ -7506,7 +7243,6 @@ description = "utilities for filesystem exploration and automated builds" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pox-0.3.5-py3-none-any.whl", hash = "sha256:9e82bcc9e578b43e80a99cad80f0d8f44f4d424f0ee4ee8d4db27260a6aa365a"}, {file = "pox-0.3.5.tar.gz", hash = "sha256:8120ee4c94e950e6e0483e050a4f0e56076e590ba0a9add19524c254bd23c2d1"}, @@ -7519,7 +7255,6 @@ description = "distributed and parallel Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ppft-1.7.6.9-py3-none-any.whl", hash = "sha256:dab36548db5ca3055067fbe6b1a17db5fee29f3c366c579a9a27cebb52ed96f0"}, {file = "ppft-1.7.6.9.tar.gz", hash = "sha256:73161c67474ea9d81d04bcdad166d399cff3f084d5d2dc21ebdd46c075bbc265"}, @@ -7535,7 +7270,6 @@ description = "HTTP client that can impersonate web browsers, mimicking their he optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "primp-0.10.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7a91a089bf2962b5b56c8d83d09535eb81cf55b53c09d83208b9e5a715cf2c17"}, {file = "primp-0.10.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:0128453cce81552f7aa6ac2bf9b8741b7816cdb2d10536e62c77daaf6483b9af"}, @@ -7558,7 +7292,6 @@ description = "Library for building powerful interactive command lines in Python optional = false python-versions = ">=3.7.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, @@ -7574,7 +7307,6 @@ description = "Accelerated property cache" optional = false python-versions = ">=3.9" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, @@ -7667,7 +7399,6 @@ description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.7" groups = ["main", "storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "proto_plus-1.25.0-py3-none-any.whl", hash = "sha256:c91fc4a65074ade8e458e95ef8bac34d4008daa7cce4a12d6707066fca648961"}, {file = "proto_plus-1.25.0.tar.gz", hash = "sha256:fbb17f57f7bd05a68b7707e745e26528b0b3c34e378db91eef93912c54982d91"}, @@ -7686,7 +7417,6 @@ description = "" optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "protobuf-4.25.5-cp310-abi3-win32.whl", hash = "sha256:5e61fd921603f58d2f5acb2806a929b4675f8874ff5f330b7d6f7e2e784bbcd8"}, {file = "protobuf-4.25.5-cp310-abi3-win_amd64.whl", hash = "sha256:4be0571adcbe712b282a330c6e89eae24281344429ae95c6d85e79e84780f5ea"}, @@ -7708,7 +7438,6 @@ description = "Cross-platform lib for process and system monitoring in Python." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psutil-6.1.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:9ccc4316f24409159897799b83004cb1e24f9819b0dcf9c0b68bdcb6cefee6a8"}, {file = "psutil-6.1.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ca9609c77ea3b8481ab005da74ed894035936223422dc591d6772b147421f777"}, @@ -7740,7 +7469,6 @@ description = "psycopg2 integration with coroutine libraries" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psycogreen-1.0.2.tar.gz", hash = "sha256:c429845a8a49cf2f76b71265008760bcd7c7c77d80b806db4dc81116dbcd130d"}, ] @@ -7752,7 +7480,6 @@ description = "psycopg2 - Python-PostgreSQL Database Adapter" optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, @@ -7831,7 +7558,6 @@ description = "library with cross-python path, ini-parsing, io, code, log facili optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -7844,7 +7570,6 @@ description = "Get CPU info with pure Python" optional = false python-versions = "*" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690"}, {file = "py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5"}, @@ -7857,7 +7582,6 @@ description = "Python library for Apache Arrow" optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, @@ -7913,7 +7637,6 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -7926,7 +7649,6 @@ description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, @@ -7946,7 +7668,7 @@ files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] -markers = {main = "python_version == \"3.11\" or python_version >= \"3.12\"", storage = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"PyPy\"", tools = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation == \"PyPy\"", vdb = "python_version == \"3.11\" or python_version >= \"3.12\""} +markers = {storage = "platform_python_implementation != \"PyPy\"", tools = "python_version < \"3.12\" and platform_python_implementation == \"PyPy\"", vdb = "python_version < \"3.12\" or platform_python_implementation != \"PyPy\""} [[package]] name = "pycryptodome" @@ -7955,7 +7677,6 @@ description = "Cryptographic library for Python" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pycryptodome-3.19.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:694020d2ff985cd714381b9da949a21028c24b86f562526186f6af7c7547e986"}, {file = "pycryptodome-3.19.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:4464b0e8fd5508bff9baf18e6fd4c6548b1ac2ce9862d6965ff6a84ec9cb302a"}, @@ -7998,7 +7719,6 @@ description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, @@ -8011,7 +7731,7 @@ typing-extensions = {version = ">=4.6.1", markers = "python_version < \"3.13\""} [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and sys_platform == \"win32\""] [[package]] name = "pydantic-core" @@ -8020,7 +7740,6 @@ description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, @@ -8123,7 +7842,6 @@ description = "Extra Pydantic types." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_extra_types-2.9.0-py3-none-any.whl", hash = "sha256:f0bb975508572ba7bf3390b7337807588463b7248587e69f43b1ad7c797530d0"}, {file = "pydantic_extra_types-2.9.0.tar.gz", hash = "sha256:e061c01636188743bb69f368dcd391f327b8cfbfede2fe1cbb1211b06601ba3b"}, @@ -8133,11 +7851,11 @@ files = [ pydantic = ">=2.5.2" [package.extras] -all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2)", "python-ulid (>=1,<3)", "pytz (>=2024.1)", "semver (>=3.0.2)", "tzdata (>=2024.1)"] +all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2) ; python_version < \"3.9\"", "python-ulid (>=1,<3) ; python_version >= \"3.9\"", "pytz (>=2024.1)", "semver (>=3.0.2)", "tzdata (>=2024.1)"] pendulum = ["pendulum (>=3.0.0,<4.0.0)"] phonenumbers = ["phonenumbers (>=8,<9)"] pycountry = ["pycountry (>=23)"] -python-ulid = ["python-ulid (>=1,<2)", "python-ulid (>=1,<3)"] +python-ulid = ["python-ulid (>=1,<2) ; python_version < \"3.9\"", "python-ulid (>=1,<3) ; python_version >= \"3.9\""] semver = ["semver (>=3.0.2)"] [[package]] @@ -8147,7 +7865,6 @@ description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, @@ -8169,7 +7886,6 @@ description = "The kitchen sink of Python utility libraries for doing \"stuff\" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydash-8.0.4-py3-none-any.whl", hash = "sha256:59d0c9ca0d22b4f8bcfab01bfe2e89b49f4c9e9fa75961caf156094670260999"}, {file = "pydash-8.0.4.tar.gz", hash = "sha256:a33fb17b4b06c617da5c57c711605d2dc8723311ee5388c8371f87cd44bf4112"}, @@ -8188,7 +7904,6 @@ description = "Manipulate audio with an simple and easy high level interface" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6"}, {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, @@ -8201,7 +7916,6 @@ description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -8217,7 +7931,6 @@ description = "JSON Web Token implementation in Python" optional = false python-versions = ">=3.7" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, @@ -8239,7 +7952,6 @@ description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pymilvus-2.5.3-py3-none-any.whl", hash = "sha256:64ca63594284586937274800be27a402f3be2d078130bf81d94ab8d7798ac9c8"}, {file = "pymilvus-2.5.3.tar.gz", hash = "sha256:68bc3797b7a14c494caf116cee888894ffd6eba7b96a3ac841be85d60694cc5d"}, @@ -8266,7 +7978,6 @@ description = "Python SDK for mochow" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pymochow-1.3.1-py3-none-any.whl", hash = "sha256:a7f3b34fd6ea5d1d8413650bb6678365aa148fc396ae945e4ccb4f2365a52327"}, {file = "pymochow-1.3.1.tar.gz", hash = "sha256:1693d10cd0bb7bce45327890a90adafb503155922ccc029acb257699a73a20ba"}, @@ -8284,7 +7995,6 @@ description = "Pure Python MySQL Driver" optional = false python-versions = ">=3.7" groups = ["tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyMySQL-1.1.1-py3-none-any.whl", hash = "sha256:4de15da4c61dc132f4fb9ab763063e693d521a80fd0e87943b9a453dd4c19d6c"}, {file = "pymysql-1.1.1.tar.gz", hash = "sha256:e127611aaf2b417403c60bf4dc570124aeb4a57f5f37b8e95ae399a42f904cd0"}, @@ -8301,7 +8011,6 @@ description = "A python SDK for OceanBase Vector Store, based on SQLAlchemy, com optional = false python-versions = "<4.0,>=3.9" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyobvector-0.1.18-py3-none-any.whl", hash = "sha256:9ca4098fd58f87e9c6ff1cd4a5631c666d51d0607933dd3656b7274eacc36428"}, {file = "pyobvector-0.1.18.tar.gz", hash = "sha256:0497764dc8f60ab2ce8b8d738b05dea946df5679e773049620da5a339091ed92"}, @@ -8320,7 +8029,6 @@ description = "Python wrapper module around the OpenSSL library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyOpenSSL-24.3.0-py3-none-any.whl", hash = "sha256:e474f5a473cd7f92221cc04976e48f4d11502804657a08a989fb3be5514c904a"}, {file = "pyopenssl-24.3.0.tar.gz", hash = "sha256:49f7a019577d834746bc55c5fce6ecbcec0f2b4ec5ce1cf43a9a173b8138bb36"}, @@ -8340,7 +8048,6 @@ description = "Thin wrapper for pandoc." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypandoc-1.14-py3-none-any.whl", hash = "sha256:1315c7ad7fac7236dacf69a05b521ed2c3f1d0177f70e9b92bfffce6c023df22"}, {file = "pypandoc-1.14.tar.gz", hash = "sha256:6b4c45f5f1b9fb5bb562079164806bdbbc3e837b5402bcf3f1139edc5730a197"}, @@ -8353,7 +8060,6 @@ description = "pyparsing module - Classes and methods to define and execute pars optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyparsing-3.2.1-py3-none-any.whl", hash = "sha256:506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1"}, {file = "pyparsing-3.2.1.tar.gz", hash = "sha256:61980854fd66de3a90028d679a954d5f2623e83144b5afe5ee86f43d762e5f0a"}, @@ -8369,7 +8075,6 @@ description = "A pure-python PDF library capable of splitting, merging, cropping optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypdf-5.1.0-py3-none-any.whl", hash = "sha256:3bd4f503f4ebc58bae40d81e81a9176c400cbbac2ba2d877367595fb524dfdfc"}, {file = "pypdf-5.1.0.tar.gz", hash = "sha256:425a129abb1614183fd1aca6982f650b47f8026867c0ce7c4b9f281c443d2740"}, @@ -8390,7 +8095,6 @@ description = "Python bindings to PDFium" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypdfium2-4.30.1-py3-none-macosx_10_13_x86_64.whl", hash = "sha256:e07c47633732cc18d890bb7e965ad28a9c5a932e548acb928596f86be2e5ae37"}, {file = "pypdfium2-4.30.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5ea2d44e96d361123b67b00f527017aa9c847c871b5714e013c01c3eb36a79fe"}, @@ -8414,7 +8118,6 @@ description = "A SQL query builder API for Python" optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyPika-0.48.9.tar.gz", hash = "sha256:838836a61747e7c8380cd1b7ff638694b7a7335345d0f559b04b2cd832ad5378"}, ] @@ -8426,7 +8129,6 @@ description = "Pure Python library for saving and loading PNG images" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pypng-0.20220715.0-py3-none-any.whl", hash = "sha256:4a43e969b8f5aaafb2a415536c1a8ec7e341cd6a3f957fd5b5f32a4cfeed902c"}, {file = "pypng-0.20220715.0.tar.gz", hash = "sha256:739c433ba96f078315de54c0db975aee537cbc3e1d0ae4ed9aab0ca1e427e2c1"}, @@ -8439,7 +8141,6 @@ description = "Wrappers to call pyproject.toml-based build backend hooks." optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913"}, {file = "pyproject_hooks-1.2.0.tar.gz", hash = "sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8"}, @@ -8452,7 +8153,7 @@ description = "A python implementation of GNU readline." optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"" +markers = "sys_platform == \"win32\"" files = [ {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, @@ -8468,7 +8169,6 @@ description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" groups = ["main", "dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6"}, {file = "pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"}, @@ -8490,7 +8190,6 @@ description = "A ``pytest`` fixture for benchmarking code. It will group the tes optional = false python-versions = ">=3.7" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-benchmark-4.0.0.tar.gz", hash = "sha256:fb0785b83efe599a6a956361c0691ae1dbb5318018561af10f3e915caa0048d1"}, {file = "pytest_benchmark-4.0.0-py3-none-any.whl", hash = "sha256:fdb7db64e31c8b277dff9850d2a2556d8b60bcb0ea6524e36e28ffd7c87f71d6"}, @@ -8512,7 +8211,6 @@ description = "pytest plugin that allows you to add environment variables." optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest_env-1.1.5-py3-none-any.whl", hash = "sha256:ce90cf8772878515c24b31cd97c7fa1f4481cd68d588419fd45f10ecaee6bc30"}, {file = "pytest_env-1.1.5.tar.gz", hash = "sha256:91209840aa0e43385073ac464a554ad2947cc2fd663a9debf88d03b01e0cc1cf"}, @@ -8531,7 +8229,6 @@ description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" groups = ["dev"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -8550,7 +8247,6 @@ description = "Python binding for Rust's library for reading excel and odf file optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_calamine-0.3.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2822c39ad52f289732981cee59b4985388624b54e124e41436bb37565ed32f15"}, {file = "python_calamine-0.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f2786751cfe4e81f9170b843741b39a325cf9f49db8d51fc3cd16d6139e0ac60"}, @@ -8664,7 +8360,6 @@ description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "dev", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -8680,7 +8375,6 @@ description = "Create, read, and update Microsoft Word .docx files." optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_docx-1.1.2-py3-none-any.whl", hash = "sha256:08c20d6058916fb19853fcf080f7f42b6270d89eac9fa5f8c15f691c0017fabe"}, {file = "python_docx-1.1.2.tar.gz", hash = "sha256:0cf1f22e95b9002addca7948e16f2cd7acdfd498047f1941ca5d293db7762efd"}, @@ -8697,7 +8391,6 @@ description = "Read key-value pairs from a .env file and set them as environment optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -8713,7 +8406,6 @@ description = "ISO 639 language codes, names, and other associated information" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_iso639-2024.10.22-py3-none-any.whl", hash = "sha256:02d3ce2e01c6896b30b9cbbd3e1c8ee0d7221250b5d63ea9803e0d2a81fd1047"}, {file = "python_iso639-2024.10.22.tar.gz", hash = "sha256:750f21b6a0bc6baa24253a3d8aae92b582bf93aa40988361cd96852c2c6d9a52"}, @@ -8729,7 +8421,6 @@ description = "File type identification using libmagic" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python-magic-0.4.27.tar.gz", hash = "sha256:c1ba14b08e4a5f5c31a302b7721239695b2f0f058d125bd5ce1ee36b9d9d3c3b"}, {file = "python_magic-0.4.27-py2.py3-none-any.whl", hash = "sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3"}, @@ -8742,7 +8433,6 @@ description = "Extract attachments from Outlook .msg files." optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_oxmsg-0.0.1-py3-none-any.whl", hash = "sha256:8ea7d5dda1bc161a413213da9e18ed152927c1fda2feaf5d1f02192d8ad45eea"}, {file = "python_oxmsg-0.0.1.tar.gz", hash = "sha256:b65c1f93d688b85a9410afa824192a1ddc39da359b04a0bd2cbd3874e84d4994"}, @@ -8760,7 +8450,6 @@ description = "Create, read, and update PowerPoint 2007+ (.pptx) files." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba"}, {file = "python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095"}, @@ -8779,7 +8468,6 @@ description = "World timezone definitions, modern and historical" optional = false python-versions = "*" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, @@ -8812,7 +8500,7 @@ files = [ {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] -markers = {main = "(python_version == \"3.11\" or python_version >= \"3.12\") and (platform_system == \"Windows\" or sys_platform == \"win32\")", vdb = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_system == \"Windows\""} +markers = {main = "platform_system == \"Windows\" or sys_platform == \"win32\"", vdb = "platform_system == \"Windows\""} [[package]] name = "pyxlsb" @@ -8821,7 +8509,6 @@ description = "Excel 2007-2010 Binary Workbook (xlsb) parser" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "pyxlsb-1.0.10-py2.py3-none-any.whl", hash = "sha256:87c122a9a622e35ca5e741d2e541201d28af00fb46bec492cfa9586890b120b4"}, {file = "pyxlsb-1.0.10.tar.gz", hash = "sha256:8062d1ea8626d3f1980e8b1cfe91a4483747449242ecb61013bc2df85435f685"}, @@ -8834,7 +8521,6 @@ description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -8898,7 +8584,6 @@ description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "qdrant_client-1.7.3-py3-none-any.whl", hash = "sha256:b062420ba55eb847652c7d2a26404fb1986bea13aa785763024013f96a7a915c"}, {file = "qdrant_client-1.7.3.tar.gz", hash = "sha256:7b809be892cdc5137ae80ea3335da40c06499ad0b0072b5abc6bad79da1d29fc"}, @@ -8917,7 +8602,7 @@ pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.1.1)"] +fastembed = ["fastembed (==0.1.1) ; python_version < \"3.12\""] [[package]] name = "qrcode" @@ -8926,7 +8611,6 @@ description = "QR Code image generator" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "qrcode-7.4.2-py3-none-any.whl", hash = "sha256:581dca7a029bcb2deef5d01068e39093e80ef00b4a61098a2182eac59d01643a"}, {file = "qrcode-7.4.2.tar.gz", hash = "sha256:9dd969454827e127dbd93696b20747239e6d540e082937c90f14ac95b30f5845"}, @@ -8951,7 +8635,6 @@ description = "Various BM25 algorithms for document ranking" optional = false python-versions = "*" groups = ["indirect"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rank_bm25-0.2.2-py3-none-any.whl", hash = "sha256:7bd4a95571adadfc271746fa146a4bcfd89c0cf731e49c3d1ad863290adbe8ae"}, {file = "rank_bm25-0.2.2.tar.gz", hash = "sha256:096ccef76f8188563419aaf384a02f0ea459503fdf77901378d4fd9d87e5e51d"}, @@ -8970,7 +8653,6 @@ description = "rapid fuzzy string matching" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eb8a54543d16ab1b69e2c5ed96cabbff16db044a50eddfc028000138ca9ddf33"}, {file = "rapidfuzz-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:231c8b2efbd7f8d2ecd1ae900363ba168b8870644bb8f2b5aa96e4a7573bde19"}, @@ -9072,7 +8754,6 @@ description = "Python wrapper for Mozilla's Readability.js" optional = false python-versions = ">=3.6.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "readabilipy-0.2.0-py3-none-any.whl", hash = "sha256:0050853cd6ab012ac75bb4d8f06427feb7dc32054da65060da44654d049802d0"}, {file = "readabilipy-0.2.0.tar.gz", hash = "sha256:098bf347b19f362042fb6c08864ad776588bf844ac2261fb230f7f9c250fdae5"}, @@ -9096,7 +8777,6 @@ description = "" optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "realtime-2.1.0-py3-none-any.whl", hash = "sha256:e2d4f28bb2a08c1cf80e40fbf31e6116544ad29d67dd4093093e511ad738708c"}, {file = "realtime-2.1.0.tar.gz", hash = "sha256:ca3ae6be47667a3cf3a307fec982ec1bf60313c38a8e29f016ab0380b76d7adb"}, @@ -9115,7 +8795,6 @@ description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4"}, {file = "redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870"}, @@ -9136,7 +8815,6 @@ description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -9153,7 +8831,6 @@ description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -9258,7 +8935,6 @@ description = "Python client for Replicate" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "replicate-0.22.0-py3-none-any.whl", hash = "sha256:a11e20e9589981a96bee6f3817494b5cc29735a108c71aff4515a81863ad9996"}, {file = "replicate-0.22.0.tar.gz", hash = "sha256:cab48c15ede619d5aa7d023a241626d504c70ea2b7db5792ebfb5ae9fa373cbc"}, @@ -9273,6 +8949,68 @@ typing-extensions = ">=4.5.0" [package.extras] dev = ["pylint", "pyright", "pytest", "pytest-asyncio", "pytest-recording", "respx", "ruff (>=0.1.3)"] +[[package]] +name = "reportlab" +version = "3.6.13" +description = "The Reportlab Toolkit" +optional = false +python-versions = ">=3.7,<4" +groups = ["tools"] +files = [ + {file = "reportlab-3.6.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a0330322c6c8123745ac7667fcc6ae3e0de3b73c15bdfaa28c788a9eaa0f50da"}, + {file = "reportlab-3.6.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:753485bb2b18cbd11340e227e4aaf9bde3bb64f83406dfa011e92ad0231a42c9"}, + {file = "reportlab-3.6.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58ea3471b9b4b8e7952bd357e8487789da11213470be328ffb3e5b7d7690c2c7"}, + {file = "reportlab-3.6.13-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1993a68c0edc45895d3df350d01b0456efe79aaf309cef777762742be501f2a"}, + {file = "reportlab-3.6.13-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca8eb7a6607f8a664187a330bab9f8d11c9f81ed885e063dfbb29a130944a72a"}, + {file = "reportlab-3.6.13-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57add04824bca89a130f9d428ace1b003cce4061386e0ec2a1b45b554ffe7aa3"}, + {file = "reportlab-3.6.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e98965c6e60d76ff63989d9400ae8e65efd67c665d785b377f438f166a57c053"}, + {file = "reportlab-3.6.13-cp310-cp310-win32.whl", hash = "sha256:3cb0da4975dbade6cc2ea6b0b0b17578af266dc3f669e959648f3306af993369"}, + {file = "reportlab-3.6.13-cp310-cp310-win_amd64.whl", hash = "sha256:65b441e22d8fe93154567a30662d8539e639b78142815afcaf92b388846eb3c1"}, + {file = "reportlab-3.6.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d59e62faa03003be81aa14d37ac34ea110e5ac59c8678fd4c0daa7d8b8f42096"}, + {file = "reportlab-3.6.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afb418409e0d323c6cb5e3be7ea4d14dfbf8a07eb03ab0b0062904cacf819878"}, + {file = "reportlab-3.6.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a477f652e6c417ad40387a8498d9ad827421006f156aab16f67adc9b81699a72"}, + {file = "reportlab-3.6.13-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b94e4f65a5f77a631cc010c9a7892d69e33f3251b760639dcc76420e138ce95"}, + {file = "reportlab-3.6.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7efdf68e97e8fea8683bfc17f25747fefbda729b9018bc2e3221658ac41ee0bd"}, + {file = "reportlab-3.6.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28a8d9cf462e2b4c9e71abd0630f9ec245d88b976b283b0dbb4602c9ddb3938"}, + {file = "reportlab-3.6.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d95fc8bc177a009053548c6d851a513b2147c465a5e8fea82287ea22d6825c4e"}, + {file = "reportlab-3.6.13-cp311-cp311-win32.whl", hash = "sha256:48eadd93237c7e2739525c74cf6615dd6c1a767c839f4b0d7c12167dc0b09911"}, + {file = "reportlab-3.6.13-cp311-cp311-win_amd64.whl", hash = "sha256:cca2d4c783f985b91b98e80d09ac79b6ed3f317a729cba5ba86edfe5eb9a2d9c"}, + {file = "reportlab-3.6.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:149718c3eaee937f28094325f0dd9ae1add3172c2dacbb93ff5403f37c9d3c57"}, + {file = "reportlab-3.6.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8260c002e4845a5af65908d5ee2099bcc25a16c7646c5c417fa27f1e4b844bc1"}, + {file = "reportlab-3.6.13-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e4983486d419daa45cade40874bb869976e27ba11f77fb4b9ae32417284ade7"}, + {file = "reportlab-3.6.13-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ea46fef07c588fef84d1164d4788fef322b39feb2bfb2df0a0706181dff79b8"}, + {file = "reportlab-3.6.13-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5949f3b4e207fa7901c0cc3b49470b2a3372617a47dfbc892db31c2b56af296"}, + {file = "reportlab-3.6.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0d91663d450c11404ec189ebc5a4abdf20f7c4eca5954a920427cdbf5601525"}, + {file = "reportlab-3.6.13-cp37-cp37m-win32.whl", hash = "sha256:269c59e508df08be498ab9e5278addb2cc16989677a03f800b17f8a31f8c5cc7"}, + {file = "reportlab-3.6.13-cp37-cp37m-win_amd64.whl", hash = "sha256:21d6b6bcdecee9c7ce047156d0553a30d736b8172629e4c0fcacab35ba261f3b"}, + {file = "reportlab-3.6.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:36568d3cb4101a210c4d821d9101635c2ef6e06bd649335938c01eb197f50c5d"}, + {file = "reportlab-3.6.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a043cff1781ddb2a0ba0e8e760a79fc5be2430957c4f2a1f51bd4528cc53178f"}, + {file = "reportlab-3.6.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbddadca6f08212732e83a60e30a42cfc7d2695892cedea208b3c3e7131c9993"}, + {file = "reportlab-3.6.13-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faeebde62f0f6ad86985bec5685411260393d2eb7ba907972da56af586b644e8"}, + {file = "reportlab-3.6.13-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ff09a0a1e5cef05309ac09dfc5185e8151d927bcf45470d2f540c96260f8a355"}, + {file = "reportlab-3.6.13-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bbdbba1ec3498b17eefca14d424ee90bb95b53e1423ecb22f1c17733c3406559"}, + {file = "reportlab-3.6.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba6f533b262f4ee1636b754992bb2fb349df0500d765ac9be014a375c047f4db"}, + {file = "reportlab-3.6.13-cp38-cp38-win32.whl", hash = "sha256:7ff89011b5ee30209b3106641e3b7b4959f10aa6e9d6f3030205123c178f605d"}, + {file = "reportlab-3.6.13-cp38-cp38-win_amd64.whl", hash = "sha256:8f00175f8e12e6f7d3a01309de6d7008fac94a2cdce6837ad066f0961472c9e5"}, + {file = "reportlab-3.6.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a4dbc28fede7f504b9ac65ce9cbea35585e999d63f9fa68bc73f5a75b4929302"}, + {file = "reportlab-3.6.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9f869286fcefa7f8e89e38448309891ff110ad74f58a7317ec204f3d4b8ad5f5"}, + {file = "reportlab-3.6.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e13a4e81761636591f5b60104f6e1eec70832ffd9aa781db68d7ebb576970d4b"}, + {file = "reportlab-3.6.13-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fdac930dfdc6227720545ec44fdb396e92d53ec227a6f5ae58cc8cb9a6cbe89"}, + {file = "reportlab-3.6.13-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:701290747662d2b3be49fc0de33898ecc9ce3fafe0e2887d406e24693465e5ae"}, + {file = "reportlab-3.6.13-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b690bc30f58931b0abd47635d93a43a82d67972e83a6511cc8adbcd7da25310"}, + {file = "reportlab-3.6.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6172481e8acffcf72042653e977281fbd807a41705a39456d92d2606d8b8c5e2"}, + {file = "reportlab-3.6.13-cp39-cp39-win32.whl", hash = "sha256:5a460f4c0c30bdf9d7bef46a816671a4386a9253670a53d35c694c666544261f"}, + {file = "reportlab-3.6.13-cp39-cp39-win_amd64.whl", hash = "sha256:11a71c314183532d889ad4b3941f61c3fe4bfdda769c768a7f02d93cb69dd1bb"}, + {file = "reportlab-3.6.13.tar.gz", hash = "sha256:6f75d33f7a3720cf47371ab63ced0f0ebd1aeb6db19386ae92f8977a09be9611"}, +] + +[package.dependencies] +pillow = ">=9.0.0" + +[package.extras] +fttextpath = ["freetype-py (>=2.3.0,<2.4)"] +rlpycairo = ["rlPyCairo (>=0.1.0)"] + [[package]] name = "requests" version = "2.31.0" @@ -9280,7 +9018,6 @@ description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -9303,7 +9040,6 @@ description = "File transport adapter for Requests" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests_file-2.1.0-py2.py3-none-any.whl", hash = "sha256:cf270de5a4c5874e84599fc5778303d496c10ae5e870bfa378818f35d21bda5c"}, {file = "requests_file-2.1.0.tar.gz", hash = "sha256:0f549a3f3b0699415ac04d167e9cb39bccfb730cb832b4d20be3d9867356e658"}, @@ -9319,7 +9055,6 @@ description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=3.4" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -9339,7 +9074,6 @@ description = "A utility belt for advanced users of python-requests" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, @@ -9355,7 +9089,6 @@ description = "Resend Python SDK" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "resend-0.7.2-py2.py3-none-any.whl", hash = "sha256:4f16711e11b007da7f8826283af6cdc34c99bd77c1dfad92afe9466a90d06c61"}, {file = "resend-0.7.2.tar.gz", hash = "sha256:bb10522a5ef1235b6cc2d74902df39c4863ac12b89dc48b46dd5c6f980574622"}, @@ -9371,7 +9104,6 @@ description = "Easy to use retry decorator." optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "retry-0.9.2-py2.py3-none-any.whl", hash = "sha256:ccddf89761fa2c726ab29391837d4327f819ea14d244c232a1d24c67a2f98606"}, {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, @@ -9388,7 +9120,6 @@ description = "Render rich text, tables, progress bars, syntax highlighting, mar optional = false python-versions = ">=3.8.0" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, @@ -9408,7 +9139,6 @@ description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, @@ -9522,7 +9252,6 @@ description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -9538,7 +9267,6 @@ description = "An extremely fast Python linter and code formatter, written in Ru optional = false python-versions = ">=3.7" groups = ["lint"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ruff-0.9.2-py3-none-linux_armv6l.whl", hash = "sha256:80605a039ba1454d002b32139e4970becf84b5fee3a3c3bf1c2af6f61a784347"}, {file = "ruff-0.9.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b9aab82bb20afd5f596527045c01e6ae25a718ff1784cb92947bff1f83068b00"}, @@ -9567,7 +9295,6 @@ description = "An Amazon S3 Transfer Manager" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "s3transfer-0.11.2-py3-none-any.whl", hash = "sha256:be6ecb39fadd986ef1701097771f87e4d2f821f27f6071c872143884d2950fbc"}, {file = "s3transfer-0.11.2.tar.gz", hash = "sha256:3b39185cb72f5acc77db1a58b6e25b977f28d20496b6e58d6813d75f464d632f"}, @@ -9586,7 +9313,6 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main", "indirect"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "safetensors-0.4.5-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a63eaccd22243c67e4f2b1c3e258b257effc4acd78f3b9d397edc8cf8f1298a7"}, {file = "safetensors-0.4.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:23fc9b4ec7b602915cbb4ec1a7c1ad96d2743c322f20ab709e2c35d1b66dad27"}, @@ -9720,7 +9446,6 @@ description = "Open source library for training and deploying models on Amazon S optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sagemaker-2.231.0-py3-none-any.whl", hash = "sha256:5b6d84484a58c6ac8b22af42c6c5e0ea3c5f42d719345fe6aafba42f93635000"}, {file = "sagemaker-2.231.0.tar.gz", hash = "sha256:d49ee9c35725832dd9810708938af723201b831e82924a3a6ac1c4260a3d8239"}, @@ -9765,7 +9490,6 @@ description = "An python package for sagemaker core functionalities" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sagemaker_core-1.0.16-py3-none-any.whl", hash = "sha256:603f70552c63d7a798b76749cad00a06af4b7362604a0f965d04b1c97f7a7128"}, {file = "sagemaker_core-1.0.16.tar.gz", hash = "sha256:a5e7325bb2d5ad84e9a34fa81ea9a6d36a3b6aa0f02bf9c356a7973476951def"}, @@ -9791,7 +9515,6 @@ description = "Simple data validation library" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "schema-0.7.7-py2.py3-none-any.whl", hash = "sha256:5d976a5b50f36e74e2157b47097b60002bd4d42e65425fcc9c9befadb4255dde"}, {file = "schema-0.7.7.tar.gz", hash = "sha256:7da553abd2958a19dc2547c388cde53398b39196175a9be59ea1caf5ab0a1807"}, @@ -9804,7 +9527,6 @@ description = "A set of python modules for machine learning and data mining" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scikit_learn-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:299406827fb9a4f862626d0fe6c122f5f87f8910b86fe5daa4c32dcd742139b6"}, {file = "scikit_learn-1.5.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:2d4cad1119c77930b235579ad0dc25e65c917e756fe80cab96aa3b9428bd3fb0"}, @@ -9856,7 +9578,6 @@ description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.10" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "scipy-1.15.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:aeac60d3562a7bf2f35549bdfdb6b1751c50590f55ce7322b4b2fc821dc27fca"}, {file = "scipy-1.15.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:5abbdc6ede5c5fed7910cf406a948e2c0869231c0db091593a6b2fa78be77e5d"}, @@ -9906,7 +9627,7 @@ numpy = ">=1.23.5,<2.5" [package.extras] dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.16.5)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "sentry-sdk" @@ -9915,7 +9636,6 @@ description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sentry-sdk-1.44.1.tar.gz", hash = "sha256:24e6a53eeabffd2f95d952aa35ca52f0f4201d17f820ac9d3ff7244c665aaf68"}, {file = "sentry_sdk-1.44.1-py2.py3-none-any.whl", hash = "sha256:5f75eb91d8ab6037c754a87b8501cc581b2827e923682f593bed3539ce5b3999"}, @@ -9967,20 +9687,19 @@ description = "Easily download, build, install, upgrade, and uninstall Python pa optional = false python-versions = ">=3.9" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "setuptools-75.7.0-py3-none-any.whl", hash = "sha256:84fb203f278ebcf5cd08f97d3fb96d3fbed4b629d500b29ad60d11e00769b183"}, {file = "setuptools-75.7.0.tar.gz", hash = "sha256:886ff7b16cd342f1d1defc16fc98c9ce3fde69e087a4e1983d7ab634e5f41f4f"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "sgmllib3k" @@ -9989,7 +9708,6 @@ description = "Py3k port of sgmllib." optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sgmllib3k-1.0.0.tar.gz", hash = "sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9"}, ] @@ -10001,7 +9719,6 @@ description = "Manipulation and analysis of geometric objects" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shapely-2.0.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29a34e068da2d321e926b5073539fd2a1d4429a2c656bd63f0bd4c8f5b236d0b"}, {file = "shapely-2.0.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c84c3f53144febf6af909d6b581bc05e8785d57e27f35ebaa5c1ab9baba13b"}, @@ -10061,7 +9778,6 @@ description = "Tool to Detect Surrounding Shell" optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, @@ -10074,7 +9790,6 @@ description = "Simple WebSocket server and client for Python" optional = false python-versions = ">=3.6" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "simple_websocket-1.1.0-py3-none-any.whl", hash = "sha256:4af6069630a38ed6c561010f0e11a5bc0d4ca569b36306eb257cd9a192497c8c"}, {file = "simple_websocket-1.1.0.tar.gz", hash = "sha256:7939234e7aa067c534abdab3a9ed933ec9ce4691b0713c78acb195560aa52ae4"}, @@ -10094,7 +9809,6 @@ description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" groups = ["main", "dev", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -10107,7 +9821,6 @@ description = "SMDebug RulesConfig" optional = false python-versions = ">=2.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "smdebug_rulesconfig-1.0.1-py2.py3-none-any.whl", hash = "sha256:104da3e6931ecf879dfc687ca4bbb3bee5ea2bc27f4478e9dbb3ee3655f1ae61"}, {file = "smdebug_rulesconfig-1.0.1.tar.gz", hash = "sha256:7a19e6eb2e6bcfefbc07e4a86ef7a88f32495001a038bf28c7d8e77ab793fcd6"}, @@ -10120,7 +9833,6 @@ description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -10133,7 +9845,6 @@ description = "Sans-I/O implementation of SOCKS4, SOCKS4A, and SOCKS5." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "socksio-1.0.0-py3-none-any.whl", hash = "sha256:95dc1f15f9b34e8d7b16f06d74b8ccf48f609af32ab33c608d08761c5dcbb1f3"}, {file = "socksio-1.0.0.tar.gz", hash = "sha256:f88beb3da5b5c38b9890469de67d0cb0f9d494b78b106ca1845f96c10b91c4ac"}, @@ -10146,7 +9857,6 @@ description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "soupsieve-2.6-py3-none-any.whl", hash = "sha256:e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9"}, {file = "soupsieve-2.6.tar.gz", hash = "sha256:e2e68417777af359ec65daac1057404a3c8a5455bb8abc36f1a9866ab1a51abb"}, @@ -10159,7 +9869,6 @@ description = "Database Abstraction Library" optional = false python-versions = ">=3.7" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:67219632be22f14750f0d1c70e62f204ba69d28f62fd6432ba05ab295853de9b"}, {file = "SQLAlchemy-2.0.35-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4668bd8faf7e5b71c0319407b608f278f279668f358857dbfd10ef1954ac9f90"}, @@ -10248,7 +9957,6 @@ description = "A non-validating SQL parser." optional = false python-versions = ">=3.8" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"}, {file = "sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272"}, @@ -10265,7 +9973,6 @@ description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "starlette-0.41.0-py3-none-any.whl", hash = "sha256:a0193a3c413ebc9c78bff1c3546a45bb8c8bcb4a84cae8747d650a65bd37210a"}, {file = "starlette-0.41.0.tar.gz", hash = "sha256:39cbd8768b107d68bfe1ff1672b38a2c38b49777de46d2a592841d58e3bf7c2a"}, @@ -10284,7 +9991,6 @@ description = "Supabase Storage client for Python." optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "storage3-0.8.2-py3-none-any.whl", hash = "sha256:f2e995b18c77a2a9265d1a33047d43e4d6abb11eb3ca5067959f68281c305de3"}, {file = "storage3-0.8.2.tar.gz", hash = "sha256:db05d3fe8fb73bd30c814c4c4749664f37a5dfc78b629e8c058ef558c2b89f5a"}, @@ -10302,7 +10008,6 @@ description = "Strict, typed YAML parser" optional = false python-versions = ">=3.7.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "strictyaml-1.7.3-py3-none-any.whl", hash = "sha256:fb5c8a4edb43bebb765959e420f9b3978d7f1af88c80606c03fb420888f5d1c7"}, {file = "strictyaml-1.7.3.tar.gz", hash = "sha256:22f854a5fcab42b5ddba8030a0e4be51ca89af0267961c8d6cfa86395586c407"}, @@ -10318,7 +10023,6 @@ description = "Supabase client for Python." optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "supabase-2.8.1-py3-none-any.whl", hash = "sha256:dfa8bef89b54129093521d5bba2136ff765baf67cd76d8ad0aa4984d61a7815c"}, {file = "supabase-2.8.1.tar.gz", hash = "sha256:711c70e6acd9e2ff48ca0dc0b1bb70c01c25378cc5189ec9f5ed9655b30bc41d"}, @@ -10340,7 +10044,6 @@ description = "Library for Supabase Functions" optional = false python-versions = "<4.0,>=3.9" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "supafunc-0.6.2-py3-none-any.whl", hash = "sha256:101b30616b0a1ce8cf938eca1df362fa4cf1deacb0271f53ebbd674190fb0da5"}, {file = "supafunc-0.6.2.tar.gz", hash = "sha256:c7dfa20db7182f7fe4ae436e94e05c06cd7ed98d697fed75d68c7b9792822adc"}, @@ -10356,7 +10059,6 @@ description = "Computer algebra system (CAS) in Python" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73"}, {file = "sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9"}, @@ -10375,7 +10077,6 @@ description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -10391,7 +10092,6 @@ description = "Traceback serialization library." optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tblib-3.0.0-py3-none-any.whl", hash = "sha256:80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129"}, {file = "tblib-3.0.0.tar.gz", hash = "sha256:93622790a0a29e04f0346458face1e144dc4d32f493714c6c3dff82a4adb77e6"}, @@ -10404,7 +10104,6 @@ description = "Tencent VectorDB Python SDK" optional = false python-versions = ">=3" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tcvectordb-1.3.2-py3-none-any.whl", hash = "sha256:c4b6922d5df4cf14fcd3e61220d9374d1d53ec7270c254216ae35f8a752908f3"}, {file = "tcvectordb-1.3.2.tar.gz", hash = "sha256:2772f5871a69744ffc7c970b321312d626078533a721de3c744059a81aab419e"}, @@ -10421,7 +10120,6 @@ description = "Retry code until it succeeds" optional = false python-versions = ">=3.8" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tenacity-9.0.0-py3-none-any.whl", hash = "sha256:93de0c98785b27fcf659856aa9f54bfbd399e29969b0621bc7f762bd441b4539"}, {file = "tenacity-9.0.0.tar.gz", hash = "sha256:807f37ca97d62aa361264d497b0e31e92b8027044942bfa756160d908320d73b"}, @@ -10438,7 +10136,6 @@ description = "Tencent Cloud Common SDK for Python" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tencentcloud-sdk-python-common-3.0.1298.tar.gz", hash = "sha256:0f0f182410c1ceda5764ff8bcbef27aa6139caf1c5f5985d94ec731a41c8a59f"}, {file = "tencentcloud_sdk_python_common-3.0.1298-py2.py3-none-any.whl", hash = "sha256:c80929a0ff57ebee4ceec749dc82d5f2d1105b888e55175a7e9c722afc3a5d7a"}, @@ -10454,7 +10151,6 @@ description = "Tencent Cloud Hunyuan SDK for Python" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tencentcloud-sdk-python-hunyuan-3.0.1298.tar.gz", hash = "sha256:c3d86a577de02046d25682a3804955453555fa641082bb8765238460bded3f03"}, {file = "tencentcloud_sdk_python_hunyuan-3.0.1298-py2.py3-none-any.whl", hash = "sha256:f01e33318b6a4152ac88c500fda77f2cda1864eeca000cdd29c41e4f92f8de65"}, @@ -10470,7 +10166,6 @@ description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.9" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "termcolor-2.5.0-py3-none-any.whl", hash = "sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8"}, {file = "termcolor-2.5.0.tar.gz", hash = "sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f"}, @@ -10486,7 +10181,6 @@ description = "threadpoolctl" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, @@ -10499,7 +10193,6 @@ description = "A Python client for TiDB Vector" optional = false python-versions = "<4.0,>=3.8.1" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tidb_vector-0.0.9-py3-none-any.whl", hash = "sha256:db060ee1c981326d3882d0810e0b8b57811f278668f9381168997b360c4296c2"}, {file = "tidb_vector-0.0.9.tar.gz", hash = "sha256:e10680872532808e1bcffa7a92dd2b05bb65d63982f833edb3c6cd590dec7709"}, @@ -10518,7 +10211,6 @@ description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tiktoken-0.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b07e33283463089c81ef1467180e3e00ab00d46c2c4bbcef0acab5f771d6695e"}, {file = "tiktoken-0.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9269348cb650726f44dd3bbb3f9110ac19a8dcc8f54949ad3ef652ca22a38e21"}, @@ -10567,7 +10259,6 @@ description = "Very compact Japanese tokenizer" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tinysegmenter-0.3.tar.gz", hash = "sha256:ed1f6d2e806a4758a73be589754384cbadadc7e1a414c81a166fc9adf2d40c6d"}, ] @@ -10579,7 +10270,6 @@ description = "Accurately separates a URL's subdomain, domain, and public suffix optional = false python-versions = ">=3.9" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tldextract-5.1.3-py3-none-any.whl", hash = "sha256:78de310cc2ca018692de5ddf320f9d6bd7c5cf857d0fd4f2175f0cdf4440ea75"}, {file = "tldextract-5.1.3.tar.gz", hash = "sha256:d43c7284c23f5dc8a42fd0fee2abede2ff74cc622674e4cb07f514ab3330c338"}, @@ -10602,7 +10292,6 @@ description = "" optional = false python-versions = ">=3.7" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tokenizers-0.15.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:52f6130c9cbf70544287575a985bf44ae1bda2da7e8c24e97716080593638012"}, {file = "tokenizers-0.15.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:054c1cc9c6d68f7ffa4e810b3d5131e0ba511b6e4be34157aa08ee54c2f8d9ee"}, @@ -10731,7 +10420,6 @@ description = "Python Library for Tom's Obvious, Minimal Language" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, @@ -10744,7 +10432,6 @@ description = "Volc TOS (Tinder Object Storage) SDK" optional = false python-versions = "*" groups = ["storage"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tos-2.7.2.tar.gz", hash = "sha256:3c31257716785bca7b2cac51474ff32543cda94075a7b7aff70d769c15c7b7ed"}, ] @@ -10763,7 +10450,6 @@ description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -10786,7 +10472,6 @@ description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow optional = false python-versions = ">=3.8.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "transformers-4.35.2-py3-none-any.whl", hash = "sha256:9dfa76f8692379544ead84d98f537be01cd1070de75c74efb13abcbc938fbe2f"}, {file = "transformers-4.35.2.tar.gz", hash = "sha256:2d125e197d77b0cdb6c9201df9fa7e2101493272e448b9fba9341c695bee2f52"}, @@ -10856,7 +10541,6 @@ description = "Twilio API client and TwiML generator" optional = false python-versions = ">=3.7.0" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "twilio-9.0.5-py2.py3-none-any.whl", hash = "sha256:5e09e910b9368f50f23cb3c3dd5ba77164d80a81e9d97db955cbac322deb2a4e"}, {file = "twilio-9.0.5.tar.gz", hash = "sha256:e9b5727943584d25d618fe502f0100fc5283215f31c863f80b5c64581b4702b0"}, @@ -10875,7 +10559,6 @@ description = "Typer, build great CLIs. Easy to code. Based on Python type hints optional = false python-versions = ">=3.7" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typer-0.15.1-py3-none-any.whl", hash = "sha256:7994fb7b8155b64d3402518560648446072864beefd44aa2dc36972a5972e847"}, {file = "typer-0.15.1.tar.gz", hash = "sha256:a0588c0a7fa68a1978a069818657778f86abe6ff5ea6abf472f940a08bfe4f0a"}, @@ -10894,7 +10577,6 @@ description = "Typing stubs for pytz" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types_pytz-2024.2.0.20241221-py3-none-any.whl", hash = "sha256:8fc03195329c43637ed4f593663df721fef919b60a969066e22606edf0b53ad5"}, {file = "types_pytz-2024.2.0.20241221.tar.gz", hash = "sha256:06d7cde9613e9f7504766a0554a270c369434b50e00975b3a4a0f6eed0f2c1a9"}, @@ -10907,7 +10589,6 @@ description = "Typing stubs for requests" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, @@ -10923,7 +10604,6 @@ description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" groups = ["main", "dev", "lint", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, @@ -10936,7 +10616,6 @@ description = "Runtime inspection utilities for typing module." optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, @@ -10953,7 +10632,6 @@ description = "Provider of IANA time zone data" optional = false python-versions = ">=2" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, @@ -10966,7 +10644,6 @@ description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, @@ -11055,7 +10732,6 @@ description = "A library that prepares raw documents for downstream ML tasks." optional = false python-versions = "<3.13,>=3.9.0" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "unstructured-0.16.12-py3-none-any.whl", hash = "sha256:bcac29ac1b38fba4228c5a1a7721d1aa7c48220f7c1dd43b563645c56e978c49"}, {file = "unstructured-0.16.12.tar.gz", hash = "sha256:c3133731c6edb9c2f474e62cb2b560cd0a8d578c4532ec14d8c0941e401770b0"}, @@ -11117,7 +10793,6 @@ description = "Python Client SDK for Unstructured API" optional = false python-versions = "<4.0,>=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "unstructured_client-0.28.1-py3-none-any.whl", hash = "sha256:0112688908f544681a67abf314e0d2023dfa120c8e5d9fa6d31390b914a06d72"}, {file = "unstructured_client-0.28.1.tar.gz", hash = "sha256:aac11fe5dd6b8dfdbc15aad3205fe791a3834dac29bb9f499fd515643554f709"}, @@ -11143,7 +10818,6 @@ description = "Serverless Vector SDK from Upstash" optional = false python-versions = "<4.0,>=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "upstash_vector-0.6.0-py3-none-any.whl", hash = "sha256:d0bdad7765b8a7f5c205b7a9c81ca4b9a4cee3ee4952afc7d5ea5fb76c3f3c3c"}, {file = "upstash_vector-0.6.0.tar.gz", hash = "sha256:a716ed4d0251362208518db8b194158a616d37d1ccbb1155f619df690599e39b"}, @@ -11159,7 +10833,6 @@ description = "Implementation of RFC 6570 URI Templates" optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, @@ -11172,14 +10845,13 @@ description = "HTTP library with thread-safe connection pooling, file post, and optional = false python-versions = ">=3.9" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -11191,7 +10863,6 @@ description = "New time-based UUID formats which are suited for use as a databas optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uuid6-2024.7.10-py3-none-any.whl", hash = "sha256:93432c00ba403751f722829ad21759ff9db051dea140bf81493271e8e4dd18b7"}, {file = "uuid6-2024.7.10.tar.gz", hash = "sha256:2d29d7f63f593caaeea0e0d0dd0ad8129c9c663b29e19bdf882e864bedf18fb0"}, @@ -11204,7 +10875,6 @@ description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.9" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "uvicorn-0.34.0-py3-none-any.whl", hash = "sha256:023dc038422502fa28a09c7a30bf2b6991512da7dcdb8fd35fe57cfc154126f4"}, {file = "uvicorn-0.34.0.tar.gz", hash = "sha256:404051050cd7e905de2c9a7e61790943440b3416f49cb409f965d9dcd0fa73e9"}, @@ -11217,12 +10887,12 @@ h11 = ">=0.8" httptools = {version = ">=0.6.3", optional = true, markers = "extra == \"standard\""} python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} +uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\" and extra == \"standard\""} watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} [package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.6.3)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "uvloop" @@ -11231,7 +10901,7 @@ description = "Fast implementation of asyncio event loop on top of libuv" optional = false python-versions = ">=3.8.0" groups = ["vdb"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and platform_python_implementation != \"PyPy\" and (sys_platform != \"win32\" and sys_platform != \"cygwin\")" +markers = "sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -11284,7 +10954,6 @@ description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8,<4.0" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "validators-0.21.0-py3-none-any.whl", hash = "sha256:3470db6f2384c49727ee319afa2e97aec3f8fad736faa6067e0fd7f9eaf2c551"}, {file = "validators-0.21.0.tar.gz", hash = "sha256:245b98ab778ed9352a7269c6a8f6c2a839bed5b2a7e3e60273ce399d247dd4b3"}, @@ -11297,7 +10966,6 @@ description = "Generate SQL queries from natural language" optional = false python-versions = ">=3.9" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "vanna-0.7.5-py3-none-any.whl", hash = "sha256:07458c7befa49de517a8760c2d80a13147278b484c515d49a906acc88edcb835"}, {file = "vanna-0.7.5.tar.gz", hash = "sha256:2fdffc58832898e4fc8e93c45b173424db59a22773b22ca348640161d391eacf"}, @@ -11360,7 +11028,6 @@ description = "Python promises." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, @@ -11373,7 +11040,6 @@ description = "Be Compatible with the Volcengine SDK for Python, The version of optional = false python-versions = "*" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "volcengine_compat-1.0.156-py3-none-any.whl", hash = "sha256:4abc149a7601ebad8fa2d28fab50c7945145cf74daecb71bca797b0bdc82c5a5"}, {file = "volcengine_compat-1.0.156.tar.gz", hash = "sha256:e357d096828e31a202dc6047bbc5bf6fff3f54a98cd35a99ab5f965ea741a267"}, @@ -11395,7 +11061,6 @@ description = "Volcengine SDK for Python" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "volcengine-python-sdk-1.0.103.tar.gz", hash = "sha256:49fa8572802724972e1cb47a7e692b184b055f41b09099358c1a0fad1d146af5"}, ] @@ -11410,7 +11075,7 @@ six = ">=1.10" urllib3 = ">=1.23" [package.extras] -ark = ["anyio (>=3.5.0,<5)", "cached-property", "httpx (>=0.23.0,<1)", "pydantic (>=1.9.0,<3)"] +ark = ["anyio (>=3.5.0,<5)", "cached-property ; python_version < \"3.8\"", "httpx (>=0.23.0,<1)", "pydantic (>=1.9.0,<3)"] [[package]] name = "watchfiles" @@ -11419,7 +11084,6 @@ description = "Simple, modern and high performance file watching and code reload optional = false python-versions = ">=3.9" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "watchfiles-1.0.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:1da46bb1eefb5a37a8fb6fd52ad5d14822d67c498d99bda8754222396164ae42"}, {file = "watchfiles-1.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2b961b86cd3973f5822826017cad7f5a75795168cb645c3a6b30c349094e02e3"}, @@ -11504,7 +11168,6 @@ description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -11517,7 +11180,6 @@ description = "A python native Weaviate client" optional = false python-versions = ">=3.8" groups = ["vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "weaviate-client-3.21.0.tar.gz", hash = "sha256:ec94ac554883c765e94da8b2947c4f0fa4a0378ed3bbe9f3653df3a5b1745a6d"}, {file = "weaviate_client-3.21.0-py3-none-any.whl", hash = "sha256:420444ded7106fb000f4f8b2321b5f5fa2387825aa7a303d702accf61026f9d2"}, @@ -11539,7 +11201,6 @@ description = "Character encoding aliases for legacy web content" optional = false python-versions = "*" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, @@ -11552,7 +11213,6 @@ description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, @@ -11570,7 +11230,6 @@ description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = false python-versions = ">=3.8" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, @@ -11667,7 +11326,6 @@ description = "The comprehensive WSGI web application library." optional = false python-versions = ">=3.9" groups = ["main", "tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, @@ -11686,7 +11344,6 @@ description = "Wikipedia API for Python" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wikipedia-1.4.0.tar.gz", hash = "sha256:db0fad1829fdd441b1852306e9856398204dc0786d2996dd2e0c8bb8e26133b2"}, ] @@ -11702,14 +11359,14 @@ description = "A small Python utility to set file creation time on Windows" optional = false python-versions = ">=3.5" groups = ["main"] -markers = "(python_version == \"3.11\" or python_version >= \"3.12\") and sys_platform == \"win32\"" +markers = "sys_platform == \"win32\"" files = [ {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, ] [package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] +dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"] [[package]] name = "wrapt" @@ -11718,7 +11375,6 @@ description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" groups = ["main", "storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, @@ -11794,7 +11450,6 @@ description = "WebSockets state-machine based protocol implementation" optional = false python-versions = ">=3.7.0" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, @@ -11810,7 +11465,6 @@ description = "Client for Xinference" optional = false python-versions = "*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xinference-client-0.15.2.tar.gz", hash = "sha256:5c2259bb133148d1cc9bd2b8ec6eb8b5bbeba7f11d6252959f4e6cd79baa53ed"}, {file = "xinference_client-0.15.2-py3-none-any.whl", hash = "sha256:b6275adab695e75e75a33e21e0ad212488fc2d5a4d0f693d544c0e78469abbe3"}, @@ -11831,7 +11485,6 @@ description = "Library for developers to extract data from Microsoft Excel (tm) optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xlrd-2.0.1-py2.py3-none-any.whl", hash = "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd"}, {file = "xlrd-2.0.1.tar.gz", hash = "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88"}, @@ -11849,7 +11502,6 @@ description = "A Python module for creating Excel XLSX files." optional = false python-versions = ">=3.6" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "XlsxWriter-3.2.0-py3-none-any.whl", hash = "sha256:ecfd5405b3e0e228219bcaf24c2ca0915e012ca9464a14048021d21a995d490e"}, {file = "XlsxWriter-3.2.0.tar.gz", hash = "sha256:9977d0c661a72866a61f9f7a809e25ebbb0fb7036baa3b9fe74afcfca6b3cb8c"}, @@ -11862,7 +11514,6 @@ description = "Makes working with XML feel like you are working with JSON" optional = false python-versions = ">=3.6" groups = ["storage", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac"}, {file = "xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553"}, @@ -11875,7 +11526,6 @@ description = "Yet another URL library" optional = false python-versions = ">=3.9" groups = ["main", "storage", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, @@ -11973,7 +11623,6 @@ description = "Download market data from Yahoo! Finance API" optional = false python-versions = "*" groups = ["tools"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "yfinance-0.2.51-py2.py3-none-any.whl", hash = "sha256:d5cc7a970bb4bb43e4deee853514cbaa3c2b070a0dee6b2861c1ab5076f21dc1"}, {file = "yfinance-0.2.51.tar.gz", hash = "sha256:7902cc9b23699a51efa50f1cc7a965220a56beccc00d189f929b4c7c5c189a60"}, @@ -12003,7 +11652,6 @@ description = "This is an python API which allows you to get the transcripts/sub optional = false python-versions = "<3.14,>=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "youtube_transcript_api-0.6.3-py3-none-any.whl", hash = "sha256:297a74c1863d9df88f6885229f33a7eda61493d73ecb13ec80e876b65423e9b4"}, {file = "youtube_transcript_api-0.6.3.tar.gz", hash = "sha256:4d1f6451ae508390a5279f98519efb45e091bf60d3cca5ea0bb122800ab6a011"}, @@ -12020,7 +11668,6 @@ description = "A SDK library for accessing big model apis from ZhipuAI" optional = false python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zhipuai-2.1.5.20250106-py3-none-any.whl", hash = "sha256:ca76095f32db501e36038fc1ac4b287b88ed90c4cdd28902d3b1a9365fff879b"}, {file = "zhipuai-2.1.5.20250106.tar.gz", hash = "sha256:45d391be336a210b360f126443f07882fa6d8184a148c46a8c7d0b7607d6d1f8"}, @@ -12040,18 +11687,17 @@ description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.9" groups = ["main", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [[package]] @@ -12061,7 +11707,6 @@ description = "Very basic event publishing system" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zope.event-5.0-py3-none-any.whl", hash = "sha256:2832e95014f4db26c47a13fdaef84cef2f4df37e66b59d8f1f4a8f319a632c26"}, {file = "zope.event-5.0.tar.gz", hash = "sha256:bac440d8d9891b4068e2b5a2c5e2c9765a9df762944bda6955f96bb9b91e67cd"}, @@ -12081,7 +11726,6 @@ description = "Interfaces for Python" optional = false python-versions = ">=3.8" groups = ["main"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zope.interface-7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce290e62229964715f1011c3dbeab7a4a1e4971fd6f31324c4519464473ef9f2"}, {file = "zope.interface-7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05b910a5afe03256b58ab2ba6288960a2892dfeef01336dc4be6f1b9ed02ab0a"}, @@ -12137,7 +11781,6 @@ description = "Zstandard bindings for Python" optional = false python-versions = ">=3.8" groups = ["main", "tools", "vdb"] -markers = "python_version == \"3.11\" or python_version >= \"3.12\"" files = [ {file = "zstandard-0.23.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bf0a05b6059c0528477fba9054d09179beb63744355cab9f38059548fedd46a9"}, {file = "zstandard-0.23.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fc9ca1c9718cb3b06634c7c8dec57d24e9438b2aa9a0f02b8bb36bf478538880"}, @@ -12239,7 +11882,7 @@ files = [ ] [package.dependencies] -cffi = {version = ">=1.11", markers = "platform_python_implementation == \"PyPy\""} +cffi = {version = ">=1.11", optional = true, markers = "platform_python_implementation == \"PyPy\" or extra == \"cffi\""} [package.extras] cffi = ["cffi (>=1.11)"] @@ -12247,4 +11890,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<3.13" -content-hash = "a8fff72e974a1bd5c28f4ae326d120410a5628ad0bc65d87adca4e943130ec8f" +content-hash = "e53f37c1c9a25c6adec5ba9da8785356eef22c95ee6b896fef3afc8656a5a2fb" diff --git a/api/pyproject.toml b/api/pyproject.toml index 8c4d5fd283..63f4b71ea3 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "dify-api" requires-python = ">=3.11,<3.13" -dynamic = [ "dependencies" ] +dynamic = ["dependencies"] [build-system] requires = ["poetry-core>=2.0.0"] @@ -89,9 +89,16 @@ tiktoken = "~0.8.0" tokenizers = "~0.15.0" transformers = "~4.35.0" types-pytz = "~2024.2.0.20241003" -unstructured = { version = "~0.16.1", extras = ["docx", "epub", "md", "msg", "ppt", "pptx"] } +unstructured = { version = "~0.16.1", extras = [ + "docx", + "epub", + "md", + "msg", + "ppt", + "pptx", +] } validators = "0.21.0" -volcengine-python-sdk = {extras = ["ark"], version = "~1.0.98"} +volcengine-python-sdk = { extras = ["ark"], version = "~1.0.98" } websocket-client = "~1.7.0" xinference-client = "0.15.2" yarl = "~1.18.3" @@ -124,8 +131,15 @@ nltk = "3.9.1" numexpr = "~2.9.0" pydub = "~0.25.1" qrcode = "~7.4.2" +reportlab = "~3.6.12" twilio = "~9.0.4" -vanna = { version = "0.7.5", extras = ["postgres", "mysql", "clickhouse", "duckdb", "oracle"] } +vanna = { version = "0.7.5", extras = [ + "postgres", + "mysql", + "clickhouse", + "duckdb", + "oracle", +] } wikipedia = "1.4.0" yfinance = "~0.2.40" From f70a370e6ccb2effcf0909147028d0761d7e3a08 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 21:29:43 +0800 Subject: [PATCH 07/26] fix build error --- api/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/Dockerfile b/api/Dockerfile index 21ee010a2c..539b7f8b33 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -24,7 +24,7 @@ FROM base AS packages # RUN sed -i 's@deb.debian.org@mirrors.aliyun.com@g' /etc/apt/sources.list.d/debian.sources RUN apt-get update \ - && apt-get install -y --no-install-recommends gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev + && apt-get install -y --no-install-recommends gcc g++ libc-dev libffi-dev libgmp-dev libmpfr-dev libmpc-dev libfreetype6-dev # Install Python dependencies COPY pyproject.toml poetry.lock ./ From ec1faa60d95d98afe82ac1ba2d2226db0f498402 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 22:19:56 +0800 Subject: [PATCH 08/26] fix chinese --- .../inner_tools/markdown_to_pdf.py | 89 ++++++++++++------- 1 file changed, 55 insertions(+), 34 deletions(-) diff --git a/api/controllers/inner_tools/markdown_to_pdf.py b/api/controllers/inner_tools/markdown_to_pdf.py index 6f8259c508..67d0abaa90 100644 --- a/api/controllers/inner_tools/markdown_to_pdf.py +++ b/api/controllers/inner_tools/markdown_to_pdf.py @@ -10,8 +10,13 @@ from core.tools.tool_file_manager import ToolFileManager from flask import Response, jsonify, request from flask_restful import Resource # type: ignore from models.account import Tenant +from reportlab.lib.enums import TA_LEFT from reportlab.lib.pagesizes import letter +from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfgen import canvas +from reportlab.platypus import Paragraph, SimpleDocTemplate class MarkdownToPDFApi(Resource): @@ -58,52 +63,68 @@ class MarkdownToPDFApi(Resource): def _generate_pdf_binary(self, markdown_text: str, title: str) -> Tuple[bytes, str]: """Generate PDF from markdown text and return the binary data and filename""" - # Convert markdown to HTML (for potential future enhancement) - html_content = markdown.markdown(markdown_text, extensions=['extra']) - # Create PDF using reportlab buffer = io.BytesIO() - pdf = canvas.Canvas(buffer, pagesize=letter) - # Add title - pdf.setFont("Helvetica-Bold", 16) - pdf.drawString(72, 760, title) + # Create a PDF document with platypus for better CJK text handling + doc = SimpleDocTemplate(buffer, pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=72) + + # Register Noto Sans CJK font which should be available in the Docker container + # (as specified in the Dockerfile: apt-get install -y fonts-noto-cjk) + try: + pdfmetrics.registerFont(TTFont('NotoSansCJK', '/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc')) + cjk_font_name = 'NotoSansCJK' + except: + # Fallback to DejaVuSans which has decent Unicode support + try: + pdfmetrics.registerFont(TTFont('DejaVuSans', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf')) + cjk_font_name = 'DejaVuSans' + except: + # If neither font is available, fall back to the default + cjk_font_name = 'Helvetica' + + # Create styles for our document + styles = getSampleStyleSheet() + + # Create a custom style for title with CJK font support + title_style = ParagraphStyle( + 'Title', parent=styles['Title'], fontName=cjk_font_name, fontSize=16, alignment=TA_LEFT + ) + + # Create a custom style for headings with CJK font support + h1_style = ParagraphStyle('Heading1', parent=styles['Heading1'], fontName=cjk_font_name, fontSize=14) + + h2_style = ParagraphStyle('Heading2', parent=styles['Heading2'], fontName=cjk_font_name, fontSize=13) - # Add markdown content - pdf.setFont("Helvetica", 12) - y_position = 730 + h3_style = ParagraphStyle('Heading3', parent=styles['Heading3'], fontName=cjk_font_name, fontSize=12) - # Simple text rendering - each line as a separate line in the PDF + # Create a custom style for normal text with CJK font support + normal_style = ParagraphStyle( + 'Normal', parent=styles['Normal'], fontName=cjk_font_name, fontSize=12, leading=14 # Line spacing + ) + + # Create a list of flowables for our document + flowables = [] + + # Add title + flowables.append(Paragraph(title, title_style)) + flowables.append(Paragraph("
", normal_style)) # Add some space + + # Process each line of markdown and add appropriate paragraphs for line in markdown_text.split('\n'): if line.startswith('# '): # H1 heading - pdf.setFont("Helvetica-Bold", 14) - pdf.drawString(72, y_position, line[2:]) - y_position -= 20 - pdf.setFont("Helvetica", 12) + flowables.append(Paragraph(line[2:], h1_style)) elif line.startswith('## '): # H2 heading - pdf.setFont("Helvetica-Bold", 13) - pdf.drawString(72, y_position, line[3:]) - y_position -= 18 - pdf.setFont("Helvetica", 12) + flowables.append(Paragraph(line[3:], h2_style)) elif line.startswith('### '): # H3 heading - pdf.setFont("Helvetica-Bold", 12) - pdf.drawString(72, y_position, line[4:]) - y_position -= 16 - pdf.setFont("Helvetica", 12) + flowables.append(Paragraph(line[4:], h3_style)) elif line.strip() == '': # Empty line - y_position -= 12 + flowables.append(Paragraph("
", normal_style)) else: # Regular text - pdf.drawString(72, y_position, line) - y_position -= 14 - - # Check if we need a new page - if y_position < 72: - pdf.showPage() - y_position = 760 - pdf.setFont("Helvetica", 12) + flowables.append(Paragraph(line, normal_style)) - # Save the PDF - pdf.save() + # Build the PDF + doc.build(flowables) buffer.seek(0) # Generate a filename based on the title From a2b523f6d1d00debe418bb780f9f5d34f046b2b1 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 22:29:47 +0800 Subject: [PATCH 09/26] Revert "fix chinese" This reverts commit ec1faa60d95d98afe82ac1ba2d2226db0f498402. --- .../inner_tools/markdown_to_pdf.py | 89 +++++++------------ 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/api/controllers/inner_tools/markdown_to_pdf.py b/api/controllers/inner_tools/markdown_to_pdf.py index 67d0abaa90..6f8259c508 100644 --- a/api/controllers/inner_tools/markdown_to_pdf.py +++ b/api/controllers/inner_tools/markdown_to_pdf.py @@ -10,13 +10,8 @@ from core.tools.tool_file_manager import ToolFileManager from flask import Response, jsonify, request from flask_restful import Resource # type: ignore from models.account import Tenant -from reportlab.lib.enums import TA_LEFT from reportlab.lib.pagesizes import letter -from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet -from reportlab.pdfbase import pdfmetrics -from reportlab.pdfbase.ttfonts import TTFont from reportlab.pdfgen import canvas -from reportlab.platypus import Paragraph, SimpleDocTemplate class MarkdownToPDFApi(Resource): @@ -63,68 +58,52 @@ class MarkdownToPDFApi(Resource): def _generate_pdf_binary(self, markdown_text: str, title: str) -> Tuple[bytes, str]: """Generate PDF from markdown text and return the binary data and filename""" + # Convert markdown to HTML (for potential future enhancement) + html_content = markdown.markdown(markdown_text, extensions=['extra']) + # Create PDF using reportlab buffer = io.BytesIO() - - # Create a PDF document with platypus for better CJK text handling - doc = SimpleDocTemplate(buffer, pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=72) - - # Register Noto Sans CJK font which should be available in the Docker container - # (as specified in the Dockerfile: apt-get install -y fonts-noto-cjk) - try: - pdfmetrics.registerFont(TTFont('NotoSansCJK', '/usr/share/fonts/truetype/noto/NotoSansCJK-Regular.ttc')) - cjk_font_name = 'NotoSansCJK' - except: - # Fallback to DejaVuSans which has decent Unicode support - try: - pdfmetrics.registerFont(TTFont('DejaVuSans', '/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf')) - cjk_font_name = 'DejaVuSans' - except: - # If neither font is available, fall back to the default - cjk_font_name = 'Helvetica' - - # Create styles for our document - styles = getSampleStyleSheet() - - # Create a custom style for title with CJK font support - title_style = ParagraphStyle( - 'Title', parent=styles['Title'], fontName=cjk_font_name, fontSize=16, alignment=TA_LEFT - ) - - # Create a custom style for headings with CJK font support - h1_style = ParagraphStyle('Heading1', parent=styles['Heading1'], fontName=cjk_font_name, fontSize=14) - - h2_style = ParagraphStyle('Heading2', parent=styles['Heading2'], fontName=cjk_font_name, fontSize=13) - - h3_style = ParagraphStyle('Heading3', parent=styles['Heading3'], fontName=cjk_font_name, fontSize=12) - - # Create a custom style for normal text with CJK font support - normal_style = ParagraphStyle( - 'Normal', parent=styles['Normal'], fontName=cjk_font_name, fontSize=12, leading=14 # Line spacing - ) - - # Create a list of flowables for our document - flowables = [] + pdf = canvas.Canvas(buffer, pagesize=letter) # Add title - flowables.append(Paragraph(title, title_style)) - flowables.append(Paragraph("
", normal_style)) # Add some space + pdf.setFont("Helvetica-Bold", 16) + pdf.drawString(72, 760, title) + + # Add markdown content + pdf.setFont("Helvetica", 12) + y_position = 730 - # Process each line of markdown and add appropriate paragraphs + # Simple text rendering - each line as a separate line in the PDF for line in markdown_text.split('\n'): if line.startswith('# '): # H1 heading - flowables.append(Paragraph(line[2:], h1_style)) + pdf.setFont("Helvetica-Bold", 14) + pdf.drawString(72, y_position, line[2:]) + y_position -= 20 + pdf.setFont("Helvetica", 12) elif line.startswith('## '): # H2 heading - flowables.append(Paragraph(line[3:], h2_style)) + pdf.setFont("Helvetica-Bold", 13) + pdf.drawString(72, y_position, line[3:]) + y_position -= 18 + pdf.setFont("Helvetica", 12) elif line.startswith('### '): # H3 heading - flowables.append(Paragraph(line[4:], h3_style)) + pdf.setFont("Helvetica-Bold", 12) + pdf.drawString(72, y_position, line[4:]) + y_position -= 16 + pdf.setFont("Helvetica", 12) elif line.strip() == '': # Empty line - flowables.append(Paragraph("
", normal_style)) + y_position -= 12 else: # Regular text - flowables.append(Paragraph(line, normal_style)) + pdf.drawString(72, y_position, line) + y_position -= 14 + + # Check if we need a new page + if y_position < 72: + pdf.showPage() + y_position = 760 + pdf.setFont("Helvetica", 12) - # Build the PDF - doc.build(flowables) + # Save the PDF + pdf.save() buffer.seek(0) # Generate a filename based on the title From 27827e8876fa389ebcd55bd6094108b9790a4429 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 5 Apr 2025 22:33:12 +0800 Subject: [PATCH 10/26] support chinese font in markdown to pdf --- .../inner_tools/markdown_to_pdf.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/api/controllers/inner_tools/markdown_to_pdf.py b/api/controllers/inner_tools/markdown_to_pdf.py index 6f8259c508..61a54af959 100644 --- a/api/controllers/inner_tools/markdown_to_pdf.py +++ b/api/controllers/inner_tools/markdown_to_pdf.py @@ -11,6 +11,8 @@ from flask import Response, jsonify, request from flask_restful import Resource # type: ignore from models.account import Tenant from reportlab.lib.pagesizes import letter +from reportlab.pdfbase import pdfmetrics +from reportlab.pdfbase.cidfonts import UnicodeCIDFont from reportlab.pdfgen import canvas @@ -65,31 +67,34 @@ class MarkdownToPDFApi(Resource): buffer = io.BytesIO() pdf = canvas.Canvas(buffer, pagesize=letter) + # Register a Chinese font + pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light')) + # Add title - pdf.setFont("Helvetica-Bold", 16) + pdf.setFont("STSong-Light", 16) pdf.drawString(72, 760, title) # Add markdown content - pdf.setFont("Helvetica", 12) + pdf.setFont("STSong-Light", 12) y_position = 730 # Simple text rendering - each line as a separate line in the PDF for line in markdown_text.split('\n'): if line.startswith('# '): # H1 heading - pdf.setFont("Helvetica-Bold", 14) + pdf.setFont("STSong-Light", 14) pdf.drawString(72, y_position, line[2:]) y_position -= 20 - pdf.setFont("Helvetica", 12) + pdf.setFont("STSong-Light", 12) elif line.startswith('## '): # H2 heading - pdf.setFont("Helvetica-Bold", 13) + pdf.setFont("STSong-Light", 13) pdf.drawString(72, y_position, line[3:]) y_position -= 18 - pdf.setFont("Helvetica", 12) + pdf.setFont("STSong-Light", 12) elif line.startswith('### '): # H3 heading - pdf.setFont("Helvetica-Bold", 12) + pdf.setFont("STSong-Light", 12) pdf.drawString(72, y_position, line[4:]) y_position -= 16 - pdf.setFont("Helvetica", 12) + pdf.setFont("STSong-Light", 12) elif line.strip() == '': # Empty line y_position -= 12 else: # Regular text @@ -100,7 +105,7 @@ class MarkdownToPDFApi(Resource): if y_position < 72: pdf.showPage() y_position = 760 - pdf.setFont("Helvetica", 12) + pdf.setFont("STSong-Light", 12) # Save the PDF pdf.save() From a6ca634e35b0360516a22da179ffc83ba98c0e3a Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 15:45:12 +0800 Subject: [PATCH 11/26] add summary analysis tools for exam --- api/controllers/inner_tools/__init__.py | 2 +- .../inner_tools/answers_summary_analysis.py | 188 ++++++++++++++++++ 2 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 api/controllers/inner_tools/answers_summary_analysis.py diff --git a/api/controllers/inner_tools/__init__.py b/api/controllers/inner_tools/__init__.py index 7d52cbe00f..5ecf763ea6 100644 --- a/api/controllers/inner_tools/__init__.py +++ b/api/controllers/inner_tools/__init__.py @@ -4,4 +4,4 @@ from libs.external_api import ExternalApi bp = Blueprint("inner_tools", __name__, url_prefix="/inner_tools") api = ExternalApi(bp) -from . import markdown_to_pdf +from . import answers_summary_analysis, markdown_to_pdf diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py new file mode 100644 index 0000000000..0bfde4b257 --- /dev/null +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -0,0 +1,188 @@ +import io +import json +from typing import Any, Dict, List, Optional, Tuple + +import chardet +from controllers.inner_tools import api +from extensions.ext_database import db +from extensions.ext_storage import storage +from flask import jsonify, request +from flask_restful import Resource # type: ignore +from models.model import UploadFile +from models.workflow import WorkflowRun + + +class AnswersSummaryAnalysisApi(Resource): + def post(self): + """Analyze answers and provide summary statistics by category. + + This endpoint takes a file_id of an answer sheet and a JSON payload of problem categories. + It reads the file, parses answers, and calculates success rates by category. + """ + # Parse request arguments + if not request.is_json: + return {"error": "Request must be JSON"}, 400 + + data = request.get_json() + categories = data.get('categories') + workflow_run_id = data.get('workflow_run_id') + + # read the arg of this workflow run + workflow_run = WorkflowRun.query.filter_by(id=workflow_run_id).first() + if not workflow_run: + return {"error": "workflow_run not found"}, 400 + + workflow_run_args = workflow_run.inputs + if not workflow_run_args: + return {"error": "workflow_run_args not found"}, 400 + + # get the file_id from the workflow_run_args + try: + args_json = json.loads(workflow_run_args) + user_answers_file_id = args_json.get('user_answers').get('related_id') + except json.JSONDecodeError: + return {"error": "workflow_run_args must be a valid JSON string"}, 400 + + if not user_answers_file_id: + return {"error": "file_id is required"}, 400 + if not categories: + return {"error": "categories is required"}, 400 + + # Read the file content with encoding detection + file_content, detected_encoding = self._read_file_with_encoding_detection(user_answers_file_id) + if not file_content: + return {"error": "Failed to read file or file not found"}, 404 + + # Parse the answers + parsed_answers = self._parse_answers(file_content) + if not parsed_answers: + return {"error": "Failed to parse answers from file"}, 400 + + # Calculate category statistics + summary_analysis = self._calculate_category_statistics(parsed_answers, categories) + + # Return the response + return jsonify({'user_answers': parsed_answers, 'summary_analysis': summary_analysis}) + + def _read_file_with_encoding_detection(self, file_id: str) -> Tuple[Optional[str], Optional[str]]: + """Read file content with automatic encoding detection.""" + try: + upload_file = db.session.query(UploadFile).filter(UploadFile.id == file_id).first() + + # Get the file content from storage + file_content = storage.load_once(upload_file.key) + + # Detect the encoding + detection = chardet.detect(file_content) + encoding = detection.get('encoding', 'utf-8') + + # Try multiple encodings if needed + encodings_to_try = [encoding, 'utf-8', 'gbk', 'gb2312', 'iso-8859-1', 'latin-1'] + decoded_content = None + detected_encoding = None + + for enc in encodings_to_try: + try: + decoded_content = file_content.decode(enc) + detected_encoding = enc + break + except UnicodeDecodeError: + continue + + return decoded_content, detected_encoding + except Exception as e: + print(f"Error reading file: {str(e)}") + return None, None + + def _parse_answers(self, file_content: str) -> List[Dict[str, Any]]: + """Parse answers from the file content. + + Expected format is CSV with the following structure: + - First column: Student ID (准考证号) + - Second column: Name (姓名) + - Third column: Score (得分) + - Remaining columns: Answers to questions (1, 2, 3, etc.) + """ + try: + import csv + from io import StringIO + + # Create a CSV reader from the string content + csv_file = StringIO(file_content) + csv_reader = csv.reader(csv_file) + + # Get the header row + header = next(csv_reader, None) + if not header: + return [] + + result = [] + for row in csv_reader: + if not row or len(row) < 4: # Skip empty rows or rows with insufficient data + continue + + # Extract student ID and name + student_id = row[0].strip() + name = row[1].strip() + + # Extract answers (skip ID, name, and score columns) + answers = [ans.strip() for ans in row[3:]] + + result.append({'user_name': name, 'code': student_id, 'answers': answers}) + + return result + except Exception as e: + # Log the exception for debugging + print(f"Error parsing answers: {str(e)}") + return [] + + def _calculate_category_statistics( + self, parsed_answers: List[Dict[str, Any]], categories: List[Dict[str, Any]] + ) -> Dict[str, float]: + """Calculate statistics by category. + + For demonstration, we're assuming: + - Correct answers are predetermined or defined in the system + - We're calculating the percentage of correct answers per category + """ + # Simplified example: assume we have correct answers defined + # In a real system, these would come from a database or predefined source + # For now, we'll just count non-empty answers + + summary = {} + + # For each category in the list + for category in categories: + category_name = category.get('name', '') + question_numbers = category.get('items', []) + + total_answers = 0 + valid_answers = 0 + + for answer_data in parsed_answers: + answers = answer_data.get('answers', []) + + # Check each question in this category + for q_num in question_numbers: + try: + # Convert to 0-based index + idx = int(q_num) - 1 + if idx < 0 or idx >= len(answers): + continue + + total_answers += 1 + # Count non-empty and non-placeholder answers as valid + if answers[idx] and answers[idx] not in ['#', '?', '-']: + valid_answers += 1 + except (ValueError, IndexError): + continue + + # Calculate percentage + rate = valid_answers / total_answers if total_answers > 0 else 0 + summary[category_name] = round(rate, 2) + + return summary + + +# Add API endpoint +api.add_resource(AnswersSummaryAnalysisApi, '/answers-summary-analysis') From 222705ead43c28c088dab61634a52e97c2c15dd6 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 15:58:13 +0800 Subject: [PATCH 12/26] fix: fix pdf layout --- .../inner_tools/markdown_to_pdf.py | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/api/controllers/inner_tools/markdown_to_pdf.py b/api/controllers/inner_tools/markdown_to_pdf.py index 61a54af959..846aaec6cd 100644 --- a/api/controllers/inner_tools/markdown_to_pdf.py +++ b/api/controllers/inner_tools/markdown_to_pdf.py @@ -11,9 +11,12 @@ from flask import Response, jsonify, request from flask_restful import Resource # type: ignore from models.account import Tenant from reportlab.lib.pagesizes import letter +from reportlab.lib.styles import ParagraphStyle +from reportlab.lib.units import inch from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.cidfonts import UnicodeCIDFont from reportlab.pdfgen import canvas +from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer class MarkdownToPDFApi(Resource): @@ -60,58 +63,55 @@ class MarkdownToPDFApi(Resource): def _generate_pdf_binary(self, markdown_text: str, title: str) -> Tuple[bytes, str]: """Generate PDF from markdown text and return the binary data and filename""" - # Convert markdown to HTML (for potential future enhancement) - html_content = markdown.markdown(markdown_text, extensions=['extra']) - - # Create PDF using reportlab buffer = io.BytesIO() - pdf = canvas.Canvas(buffer, pagesize=letter) - # Register a Chinese font + # Create PDF document with proper margins + doc = SimpleDocTemplate(buffer, pagesize=letter, rightMargin=72, leftMargin=72, topMargin=72, bottomMargin=72) + + # Register Chinese font pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light')) + # Define styles + title_style = ParagraphStyle('CustomTitle', fontName='STSong-Light', fontSize=16, spaceAfter=30, leading=20) + + h1_style = ParagraphStyle( + 'CustomH1', fontName='STSong-Light', fontSize=14, spaceAfter=12, spaceBefore=12, leading=18 + ) + + h2_style = ParagraphStyle( + 'CustomH2', fontName='STSong-Light', fontSize=13, spaceAfter=10, spaceBefore=10, leading=16 + ) + + normal_style = ParagraphStyle('CustomNormal', fontName='STSong-Light', fontSize=12, spaceAfter=8, leading=14) + + # Prepare content elements + elements = [] + # Add title - pdf.setFont("STSong-Light", 16) - pdf.drawString(72, 760, title) - - # Add markdown content - pdf.setFont("STSong-Light", 12) - y_position = 730 - - # Simple text rendering - each line as a separate line in the PDF - for line in markdown_text.split('\n'): - if line.startswith('# '): # H1 heading - pdf.setFont("STSong-Light", 14) - pdf.drawString(72, y_position, line[2:]) - y_position -= 20 - pdf.setFont("STSong-Light", 12) - elif line.startswith('## '): # H2 heading - pdf.setFont("STSong-Light", 13) - pdf.drawString(72, y_position, line[3:]) - y_position -= 18 - pdf.setFont("STSong-Light", 12) - elif line.startswith('### '): # H3 heading - pdf.setFont("STSong-Light", 12) - pdf.drawString(72, y_position, line[4:]) - y_position -= 16 - pdf.setFont("STSong-Light", 12) - elif line.strip() == '': # Empty line - y_position -= 12 - else: # Regular text - pdf.drawString(72, y_position, line) - y_position -= 14 - - # Check if we need a new page - if y_position < 72: - pdf.showPage() - y_position = 760 - pdf.setFont("STSong-Light", 12) - - # Save the PDF - pdf.save() + elements.append(Paragraph(title, title_style)) + elements.append(Spacer(1, 20)) + + # Process markdown content + lines = markdown_text.split('\n') + for line in lines: + if not line.strip(): + elements.append(Spacer(1, 10)) + continue + + if line.startswith('# '): + elements.append(Paragraph(line[2:], h1_style)) + elif line.startswith('## '): + elements.append(Paragraph(line[3:], h2_style)) + elif line.startswith('### '): + elements.append(Paragraph(line[4:], h2_style)) + else: + elements.append(Paragraph(line, normal_style)) + + # Build PDF + doc.build(elements) buffer.seek(0) - # Generate a filename based on the title + # Generate filename filename = f"{title.replace(' ', '_')}_{uuid.uuid4().hex[:8]}.pdf" return buffer.getvalue(), filename From 2c499264037a7a898220ada8e523133c5747955a Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 16:51:31 +0800 Subject: [PATCH 13/26] feat: add summary analysis --- .../inner_tools/answers_summary_analysis.py | 174 ++++++++++++++- api/poetry.lock | 211 +++++++++++++++++- api/pyproject.toml | 1 + 3 files changed, 376 insertions(+), 10 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index 0bfde4b257..b2365d5f6e 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -1,15 +1,19 @@ -import io import json +import uuid from typing import Any, Dict, List, Optional, Tuple import chardet from controllers.inner_tools import api +from core.tools.tool_file_manager import ToolFileManager from extensions.ext_database import db from extensions.ext_storage import storage -from flask import jsonify, request +from flask import jsonify, request, send_file from flask_restful import Resource # type: ignore +from jinja2 import Template +from models.account import Tenant from models.model import UploadFile from models.workflow import WorkflowRun +from weasyprint import HTML class AnswersSummaryAnalysisApi(Resource): @@ -138,18 +142,29 @@ class AnswersSummaryAnalysisApi(Resource): def _calculate_category_statistics( self, parsed_answers: List[Dict[str, Any]], categories: List[Dict[str, Any]] - ) -> Dict[str, float]: + ) -> List[Dict[str, Any]]: """Calculate statistics by category. For demonstration, we're assuming: - Correct answers are predetermined or defined in the system - We're calculating the percentage of correct answers per category + + Returns: + A list of dictionaries with category statistics: + [ + { + "category": str, + "correct_rate": float, + "error_count": int, + "total_count": int + } + ] """ # Simplified example: assume we have correct answers defined # In a real system, these would come from a database or predefined source # For now, we'll just count non-empty answers - summary = {} + summary = [] # For each category in the list for category in categories: @@ -178,11 +193,156 @@ class AnswersSummaryAnalysisApi(Resource): continue # Calculate percentage - rate = valid_answers / total_answers if total_answers > 0 else 0 - summary[category_name] = round(rate, 2) + correct_rate = valid_answers / total_answers if total_answers > 0 else 0 + error_count = total_answers - valid_answers + + summary.append( + { + "category": category_name, + "correct_rate": round(correct_rate, 2), + "error_count": error_count, + "total_count": total_answers, + } + ) return summary -# Add API endpoint +class GenerateAnalysisReportApi(Resource): + def post(self): + """Generate a PDF analysis report based on the provided data.""" + if not request.is_json: + return {"error": "Request must be JSON"}, 400 + + data = request.get_json() + summary_analysis = data.get('summary_analysis') + school_name = data.get('school_name', '山东单县一中') # Default value if not provided + + if not summary_analysis: + return {"error": "summary_analysis is required"}, 400 + + # HTML template for the report + html_template = """ + + + + + + + +

模拟考分析报告

+
Analysis of Examination
+ +

{{ school_name }}

+ +
+
+
总参考人数:
+
总平均分:
+
省内排名:
+
+
+
省内总人数:
+
省内平均分:
+
全国排名:
+
+
+ +
+

题目分析:

+ + {% for category in summary_analysis %} +
+
{{ category.category }}
+
+
+ + 错误数{{ category.error_count }} / 总数{{ category.total_count }} + 失分比{{ (1 - category.correct_rate) * 100 }}% + +
+
+ {% endfor %} +
+ + + """ + + # Create the HTML with the template + template = Template(html_template) + html_content = template.render(school_name=school_name, summary_analysis=summary_analysis) + + # Generate PDF + html = HTML(string=html_content) + pdf_file = html.write_pdf() + + if pdf_file is None: + return {"error": "Failed to generate PDF"}, 500 + + # Get the first tenant from database (similar to markdown_to_pdf.py) + tenant = Tenant.query.first() + if not tenant: + return {"error": "No tenant found"}, 400 + + tenant_id = tenant.id + + # Generate filename + filename = f"analysis_report_{school_name}_{uuid.uuid4().hex[:8]}.pdf" + + # Save the file using ToolFileManager + tool_file = ToolFileManager.create_file_by_raw( + user_id=None, + tenant_id=tenant_id, + conversation_id=None, + file_binary=pdf_file, + mimetype='application/pdf', + ) + + # Return the file info with URL + file_url = ToolFileManager.sign_file(tool_file.id, '.pdf') + return jsonify({'url': file_url, 'file_id': tool_file.id, 'file_name': filename, 'file_size': tool_file.size}) + + +# Add API endpoints api.add_resource(AnswersSummaryAnalysisApi, '/answers-summary-analysis') +api.add_resource(GenerateAnalysisReportApi, '/generate-analysis-report') diff --git a/api/poetry.lock b/api/poetry.lock index 014711a2ac..16fd8ddbd1 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1118,7 +1118,7 @@ description = "Python CFFI bindings to the Brotli library" optional = false python-versions = ">=3.7" groups = ["main"] -markers = "platform_python_implementation == \"PyPy\"" +markers = "platform_python_implementation != \"CPython\"" files = [ {file = "brotlicffi-1.1.0.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9b7ae6bd1a3f0df532b6d67ff674099a96d22bc0948955cb338488c31bfb8851"}, {file = "brotlicffi-1.1.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19ffc919fa4fc6ace69286e0a23b3789b4219058313cf9b45625016bf7ff996b"}, @@ -2099,6 +2099,26 @@ files = [ {file = "cssselect-1.2.0.tar.gz", hash = "sha256:666b19839cfaddb9ce9d36bfe4c969132c647b92fc9088c4e23f786b30f1b3dc"}, ] +[[package]] +name = "cssselect2" +version = "0.8.0" +description = "CSS selectors for Python ElementTree" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "cssselect2-0.8.0-py3-none-any.whl", hash = "sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e"}, + {file = "cssselect2-0.8.0.tar.gz", hash = "sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a"}, +] + +[package.dependencies] +tinycss2 = "*" +webencodings = "*" + +[package.extras] +doc = ["furo", "sphinx"] +test = ["pytest", "ruff"] + [[package]] name = "cycler" version = "0.12.1" @@ -2897,7 +2917,7 @@ version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" -groups = ["tools"] +groups = ["main", "tools"] files = [ {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, @@ -2951,6 +2971,11 @@ files = [ {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] +[package.dependencies] +brotli = {version = ">=1.0.1", optional = true, markers = "platform_python_implementation == \"CPython\" and extra == \"woff\""} +brotlicffi = {version = ">=0.8.0", optional = true, markers = "platform_python_implementation != \"CPython\" and extra == \"woff\""} +zopfli = {version = ">=0.1.4", optional = true, markers = "extra == \"woff\""} + [package.extras] all = ["brotli (>=1.0.1) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\"", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres ; platform_python_implementation == \"PyPy\"", "pycairo", "scipy ; platform_python_implementation != \"PyPy\"", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0) ; python_version <= \"3.12\"", "xattr ; sys_platform == \"darwin\"", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] @@ -7909,6 +7934,22 @@ files = [ {file = "pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f"}, ] +[[package]] +name = "pydyf" +version = "0.11.0" +description = "A low-level PDF generator." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydyf-0.11.0-py3-none-any.whl", hash = "sha256:0aaf9e2ebbe786ec7a78ec3fbffa4cdcecde53fd6f563221d53c6bc1328848a3"}, + {file = "pydyf-0.11.0.tar.gz", hash = "sha256:394dddf619cca9d0c55715e3c55ea121a9bf9cbc780cdc1201a2427917b86b64"}, +] + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pillow", "pytest", "ruff"] + [[package]] name = "pygments" version = "2.19.1" @@ -8111,6 +8152,22 @@ files = [ {file = "pypdfium2-4.30.1.tar.gz", hash = "sha256:5f5c7c6d03598e107d974f66b220a49436aceb191da34cda5f692be098a814ce"}, ] +[[package]] +name = "pyphen" +version = "0.17.2" +description = "Pure Python module to hyphenate text" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyphen-0.17.2-py3-none-any.whl", hash = "sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd"}, + {file = "pyphen-0.17.2.tar.gz", hash = "sha256:f60647a9c9b30ec6c59910097af82bc5dd2d36576b918e44148d8b07ef3b4aa3"}, +] + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + [[package]] name = "pypika" version = "0.48.9" @@ -10252,6 +10309,44 @@ requests = ">=2.26.0" [package.extras] blobfile = ["blobfile (>=2)"] +[[package]] +name = "tinycss2" +version = "1.4.0" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + +[[package]] +name = "tinyhtml5" +version = "2.0.0" +description = "HTML parser based on the WHATWG HTML specification" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tinyhtml5-2.0.0-py3-none-any.whl", hash = "sha256:13683277c5b176d070f82d099d977194b7a1e26815b016114f581a74bbfbf47e"}, + {file = "tinyhtml5-2.0.0.tar.gz", hash = "sha256:086f998833da24c300c414d9fe81d9b368fd04cb9d2596a008421cbc705fcfcc"}, +] + +[package.dependencies] +webencodings = ">=0.5.1" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] + [[package]] name = "tinysegmenter" version = "0.3" @@ -11173,6 +11268,32 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] +[[package]] +name = "weasyprint" +version = "65.1" +description = "The Awesome Document Factory" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "weasyprint-65.1-py3-none-any.whl", hash = "sha256:9baa54282dc86929f6b877034d06b0416e2a7cacb1af3f73d80960592fd0af89"}, + {file = "weasyprint-65.1.tar.gz", hash = "sha256:120281bdbd42ffaa7d7e5cedbe3182a2cef36ea5ad97fe9f357e43be6a1e58ea"}, +] + +[package.dependencies] +cffi = ">=0.6" +cssselect2 = ">=0.8.0" +fonttools = {version = ">=4.0.0", extras = ["woff"]} +Pillow = ">=9.1.0" +pydyf = ">=0.11.0" +Pyphen = ">=0.9.1" +tinycss2 = ">=1.4.0" +tinyhtml5 = ">=2.0.0b1" + +[package.extras] +doc = ["furo", "sphinx"] +test = ["pytest", "ruff"] + [[package]] name = "weaviate-client" version = "3.21.0" @@ -11774,6 +11895,90 @@ docs = ["Sphinx", "furo", "repoze.sphinx.autointerface"] test = ["coverage[toml]", "zope.event", "zope.testing"] testing = ["coverage[toml]", "zope.event", "zope.testing"] +[[package]] +name = "zopfli" +version = "0.2.3.post1" +description = "Zopfli module for python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "zopfli-0.2.3.post1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0137dd64a493ba6a4be37405cfd6febe650a98cc1e9dca8f6b8c63b1db11b41"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:aa588b21044f8a74e423d8c8a4c7fc9988501878aacced793467010039c50734"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9f4a7ec2770e6af05f5a02733fd3900f30a9cd58e5d6d3727e14c5bcd6e7d587"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f7d69c1a7168ad0e9cb864e8663acb232986a0c9c9cb9801f56bf6214f53a54d"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2d2bc8129707e34c51f9352c4636ca313b52350bbb7e04637c46c1818a2a70"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:39e576f93576c5c223b41d9c780bbb91fd6db4babf3223d2a4fe7bf568e2b5a8"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:cbe6df25807227519debd1a57ab236f5f6bad441500e85b13903e51f93a43214"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7cce242b5df12b2b172489daf19c32e5577dd2fac659eb4b17f6a6efb446fd5c"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-win32.whl", hash = "sha256:f815fcc2b2a457977724bad97fb4854022980f51ce7b136925e336b530545ae1"}, + {file = "zopfli-0.2.3.post1-cp310-cp310-win_amd64.whl", hash = "sha256:0cc20b02a9531559945324c38302fd4ba763311632d0ec8a1a0aa9c10ea363e6"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:518f1f4ed35dd69ce06b552f84e6d081f07c552b4c661c5312d950a0b764a58a"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:615a8ac9dda265e9cc38b2a76c3142e4a9f30fea4a79c85f670850783bc6feb4"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a82fc2dbebe6eb908b9c665e71496f8525c1bc4d2e3a7a7722ef2b128b6227c8"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37d011e92f7b9622742c905fdbed9920a1d0361df84142807ea2a528419dea7f"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e63d558847166543c2c9789e6f985400a520b7eacc4b99181668b2c3aeadd352"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:60db20f06c3d4c5934b16cfa62a2cc5c3f0686bffe0071ed7804d3c31ab1a04e"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:716cdbfc57bfd3d3e31a58e6246e8190e6849b7dbb7c4ce39ef8bbf0edb8f6d5"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3a89277ed5f8c0fb2d0b46d669aa0633123aa7381f1f6118c12f15e0fb48f8ca"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-win32.whl", hash = "sha256:75a26a2307b10745a83b660c404416e984ee6fca515ec7f0765f69af3ce08072"}, + {file = "zopfli-0.2.3.post1-cp311-cp311-win_amd64.whl", hash = "sha256:81c341d9bb87a6dbbb0d45d6e272aca80c7c97b4b210f9b6e233bf8b87242f29"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3f0197b6aa6eb3086ae9e66d6dd86c4d502b6c68b0ec490496348ae8c05ecaef"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fcfc0dc2761e4fcc15ad5d273b4d58c2e8e059d3214a7390d4d3c8e2aee644e"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cac2b37ab21c2b36a10b685b1893ebd6b0f83ae26004838ac817680881576567"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d5ab297d660b75c159190ce6d73035502310e40fd35170aed7d1a1aea7ddd65"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ba214f4f45bec195ee8559651154d3ac2932470b9d91c5715fc29c013349f8c"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1e0ed5d84ffa2d677cc9582fc01e61dab2e7ef8b8996e055f0a76167b1b94df"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:bfa1eb759e07d8b7aa7a310a2bc535e127ee70addf90dc8d4b946b593c3e51a8"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cd2c002f160502608dcc822ed2441a0f4509c52e86fcfd1a09e937278ed1ca14"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-win32.whl", hash = "sha256:7be5cc6732eb7b4df17305d8a7b293223f934a31783a874a01164703bc1be6cd"}, + {file = "zopfli-0.2.3.post1-cp312-cp312-win_amd64.whl", hash = "sha256:4e50ffac74842c1c1018b9b73875a0d0a877c066ab06bf7cccbaa84af97e754f"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecb7572df5372abce8073df078207d9d1749f20b8b136089916a4a0868d56051"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1cf720896d2ce998bc8e051d4b4ce0d8bec007aab6243102e8e1d22a0b2fb3f"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aad740b4d4fcbaaae4887823925166ffd062db3b248b3f432198fc287381d1a"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6617fb10f9e4393b331941861d73afb119cd847e88e4974bdbe8068ceef3f73f"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a53b18797cdef27e019db595d66c4b077325afe2fd62145953275f53d84ce40c"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b78008a69300d929ca2efeffec951b64a312e9a811e265ea4a907ab546d79fa6"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa5f90d6298bda02a95bc8dc8c3c19004d5a4e44bda00b67ca7431d857b4b54"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2768c877f76c8a0e7519b1c86c93757f3c01492ddde55751e9988afb7eff64e1"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-win32.whl", hash = "sha256:71390dbd3fbf6ebea9a5d85ffed8c26ee1453ee09248e9b88486e30e0397b775"}, + {file = "zopfli-0.2.3.post1-cp313-cp313-win_amd64.whl", hash = "sha256:a86eb88e06bd87e1fff31dac878965c26b0c26db59ddcf78bb0379a954b120de"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3827170de28faf144992d3d4dcf8f3998fe3c8a6a6f4a08f1d42c2ec6119d2bb"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b0ec13f352ea5ae0fc91f98a48540512eed0767d0ec4f7f3cb92d92797983d18"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f272186e03ad55e7af09ab78055535c201b1a0bcc2944edb1768298d9c483a4"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:29ea74e72ffa6e291b8c6f2504ce6c146b4fe990c724c1450eb8e4c27fd31431"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eb45a34f23da4f8bc712b6376ca5396914b0b7c09adbb001dad964eb7f3132f8"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6482db9876c68faac2d20a96b566ffbf65ddaadd97b222e4e73641f4f8722fc4"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:95a260cafd56b8fffa679918937401c80bb38e1681c448b988022e4c3610965d"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:676919fba7311125244eb0c4393679ac5fe856e5864a15d122bd815205369fa0"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-win32.whl", hash = "sha256:b9026a21b6d41eb0e2e63f5bc1242c3fcc43ecb770963cda99a4307863dac12e"}, + {file = "zopfli-0.2.3.post1-cp38-cp38-win_amd64.whl", hash = "sha256:3c163911f8bad94b3e1db0a572e7c28ba681a0c91d0002ea1e4fa9264c21ef17"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b05296e8bc88c92e2b21e0a9bae4740c1551ee613c1d93a51fd28a7a0b2b6fbb"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f12000a6accdd4bf0a3fa6eaa1b1c7a7bc80af0a2edf3f89d770d3dcce1d0e22"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a241a68581d34d67b40c425cce3d1fd211c092f99d9250947824ccba9f491949"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3657e416ffb8f31d9d3424af12122bb251befae109f2e271d87d825c92fc5b7b"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4915a41375bdee4db749ecd07d985a0486eb688a6619f713b7bf6fbfd145e960"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bbe429fc50686bb2a2608a30843e36fbaa123462a5284f136c7d9e0145220bfd"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2345e713260a350bea0b01a816a469ea356bc2d63d009a0d777691ecbbcf7493"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fc39f5c27f962ec8660d8d20c24762431131b5d8c672b44b0a54cf2b5bcde9b9"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-win32.whl", hash = "sha256:9a6aec38a989bad7ddd1ef53f1265699e49e294d08231b5313d61293f3cd6237"}, + {file = "zopfli-0.2.3.post1-cp39-cp39-win_amd64.whl", hash = "sha256:b3df42f52502438ee973042cc551877d24619fa1cd38ef7b7e9ac74200daca8b"}, + {file = "zopfli-0.2.3.post1-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4c1226a7e2c7105ac31503a9bb97454743f55d88164d6d46bc138051b77f609b"}, + {file = "zopfli-0.2.3.post1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48dba9251060289101343110ab47c0756f66f809bb4d1ddbb6d5c7e7752115c5"}, + {file = "zopfli-0.2.3.post1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89899641d4de97dbad8e0cde690040d078b6aea04066dacaab98e0b5a23573f2"}, + {file = "zopfli-0.2.3.post1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3654bfc927bc478b1c3f3ff5056ed7b20a1a37fa108ca503256d0a699c03bbb1"}, + {file = "zopfli-0.2.3.post1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c4278d1873ce6e803e5d4f8d702fd3026bd67fca744aa98881324d1157ddf748"}, + {file = "zopfli-0.2.3.post1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:1d8cc06605519e82b16df090e17cb3990d1158861b2872c3117f1168777b81e4"}, + {file = "zopfli-0.2.3.post1-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1f990634fd5c5c8ced8edddd8bd45fab565123b4194d6841e01811292650acae"}, + {file = "zopfli-0.2.3.post1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91a2327a4d7e77471fa4fbb26991c6de4a738c6fc6a33e09bb25f56a870a4b7b"}, + {file = "zopfli-0.2.3.post1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fbe5bcf10d01aab3513550f284c09fef32f342b36f56bfae2120a9c4d12c130"}, + {file = "zopfli-0.2.3.post1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:34a99592f3d9eb6f737616b5bd74b48a589fdb3cb59a01a50d636ea81d6af272"}, + {file = "zopfli-0.2.3.post1.tar.gz", hash = "sha256:96484dc0f48be1c5d7ae9f38ed1ce41e3675fd506b27c11a6607f14b49101e99"}, +] + +[package.extras] +test = ["pytest"] + [[package]] name = "zstandard" version = "0.23.0" @@ -11890,4 +12095,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.1" python-versions = ">=3.11,<3.13" -content-hash = "e53f37c1c9a25c6adec5ba9da8785356eef22c95ee6b896fef3afc8656a5a2fb" +content-hash = "9bcc29ba1d7d3a53437a230fc21dbea4b35f81c46f660baad0c38c1f50cffb7e" diff --git a/api/pyproject.toml b/api/pyproject.toml index 63f4b71ea3..88241335e8 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -111,6 +111,7 @@ zhipuai = "~2.1.5" # Related transparent dependencies with pinned version # required by main implementations ############################################################ +weasyprint = "^65.1" [tool.poetry.group.indirect.dependencies] kaleido = "0.2.1" rank-bm25 = "~0.2.2" From 442eee55c64b0e9c62b69eb59bfe937facc2a0c4 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 17:01:27 +0800 Subject: [PATCH 14/26] fix: fix data adapter --- .../inner_tools/answers_summary_analysis.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index b2365d5f6e..3fdbac8ec0 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -168,8 +168,18 @@ class AnswersSummaryAnalysisApi(Resource): # For each category in the list for category in categories: - category_name = category.get('name', '') - question_numbers = category.get('items', []) + # Based on the image, categories format is like ['理由原因类': [...], '时间类': [...]] + # Extract category name (the key) and question numbers (the values) + if isinstance(category, dict): + # Original format with 'name' and 'items' + category_name = category.get('name', '') + question_numbers = category.get('items', []) + elif isinstance(category, list) and len(category) == 2: + # New format from image: ['category_name', ['30', '36', '39', '50']] + category_name = category[0] + question_numbers = category[1] + else: + continue # Skip invalid category format total_answers = 0 valid_answers = 0 From 28a925fffe23f1bd78438c30604272222fe0c72f Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 17:08:50 +0800 Subject: [PATCH 15/26] fix: adapt more type --- api/controllers/inner_tools/answers_summary_analysis.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index 3fdbac8ec0..6e323fec41 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -174,6 +174,10 @@ class AnswersSummaryAnalysisApi(Resource): # Original format with 'name' and 'items' category_name = category.get('name', '') question_numbers = category.get('items', []) + + if not category_name or not question_numbers: + category_name = next(iter(category)) + question_numbers = category.get(category_name, []) elif isinstance(category, list) and len(category) == 2: # New format from image: ['category_name', ['30', '36', '39', '50']] category_name = category[0] From 83e8721c85a4ded064f22259097954f0f10f7bcd Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 17:48:28 +0800 Subject: [PATCH 16/26] fix: add correct answer in analysis --- .../inner_tools/answers_summary_analysis.py | 88 ++++++++++++++++--- 1 file changed, 77 insertions(+), 11 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index 6e323fec41..b779304f3d 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -29,6 +29,7 @@ class AnswersSummaryAnalysisApi(Resource): data = request.get_json() categories = data.get('categories') + correct_answer = data.get('correct_answer') # a list of correct answer workflow_run_id = data.get('workflow_run_id') # read the arg of this workflow run @@ -63,7 +64,7 @@ class AnswersSummaryAnalysisApi(Resource): return {"error": "Failed to parse answers from file"}, 400 # Calculate category statistics - summary_analysis = self._calculate_category_statistics(parsed_answers, categories) + summary_analysis = self._calculate_category_statistics(parsed_answers, correct_answer, categories) # Return the response return jsonify({'user_answers': parsed_answers, 'summary_analysis': summary_analysis}) @@ -141,13 +142,14 @@ class AnswersSummaryAnalysisApi(Resource): return [] def _calculate_category_statistics( - self, parsed_answers: List[Dict[str, Any]], categories: List[Dict[str, Any]] + self, parsed_answers: List[Dict[str, Any]], correct_answer: List[str], categories: List[Dict[str, Any]] ) -> List[Dict[str, Any]]: """Calculate statistics by category. - For demonstration, we're assuming: - - Correct answers are predetermined or defined in the system - - We're calculating the percentage of correct answers per category + Args: + parsed_answers: List of dictionaries containing parsed student answers + correct_answer: List of correct answers for all questions + categories: List of question categories Returns: A list of dictionaries with category statistics: @@ -160,16 +162,16 @@ class AnswersSummaryAnalysisApi(Resource): } ] """ - # Simplified example: assume we have correct answers defined - # In a real system, these would come from a database or predefined source - # For now, we'll just count non-empty answers + # Validate correct_answer list + if not correct_answer or not isinstance(correct_answer, list): + # Fallback to original behavior if no correct answers provided + return self._legacy_calculate_statistics(parsed_answers, categories) summary = [] # For each category in the list for category in categories: - # Based on the image, categories format is like ['理由原因类': [...], '时间类': [...]] - # Extract category name (the key) and question numbers (the values) + # Extract category name and question numbers if isinstance(category, dict): # Original format with 'name' and 'items' category_name = category.get('name', '') @@ -179,7 +181,71 @@ class AnswersSummaryAnalysisApi(Resource): category_name = next(iter(category)) question_numbers = category.get(category_name, []) elif isinstance(category, list) and len(category) == 2: - # New format from image: ['category_name', ['30', '36', '39', '50']] + # New format: ['category_name', ['30', '36', '39', '50']] + category_name = category[0] + question_numbers = category[1] + else: + continue # Skip invalid category format + + total_answers = 0 + correct_answers = 0 + + for answer_data in parsed_answers: + answers = answer_data.get('answers', []) + + # Check each question in this category + for q_num in question_numbers: + try: + # Convert to 0-based index + idx = int(q_num) - 1 + if idx < 0 or idx >= len(answers) or idx >= len(correct_answer): + continue + + student_answer = answers[idx].strip() + # Skip empty answers or placeholders + if not student_answer or student_answer in ['#', '?', '-']: + continue + + total_answers += 1 + # Compare with correct answer (case insensitive) + if student_answer.lower() == correct_answer[idx].lower(): + correct_answers += 1 + except (ValueError, IndexError): + continue + + # Calculate statistics + correct_rate = correct_answers / total_answers if total_answers > 0 else 0 + error_count = total_answers - correct_answers + + summary.append( + { + "category": category_name, + "correct_rate": round(correct_rate, 2), + "error_count": error_count, + "total_count": total_answers, + } + ) + + return summary + + def _legacy_calculate_statistics( + self, parsed_answers: List[Dict[str, Any]], categories: List[Dict[str, Any]] + ) -> List[Dict[str, Any]]: + """Legacy method for calculating statistics when no correct answers are provided. + This maintains backward compatibility with the original implementation.""" + summary = [] + + # For each category in the list + for category in categories: + # Extract category name and question numbers + if isinstance(category, dict): + category_name = category.get('name', '') + question_numbers = category.get('items', []) + + if not category_name or not question_numbers: + category_name = next(iter(category)) + question_numbers = category.get(category_name, []) + elif isinstance(category, list) and len(category) == 2: category_name = category[0] question_numbers = category[1] else: From 71b67ea839d1f7797a4dff3309fcf7ac72db1bd7 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 17:57:07 +0800 Subject: [PATCH 17/26] fix --- .../inner_tools/answers_summary_analysis.py | 174 +++++++++--------- 1 file changed, 92 insertions(+), 82 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index b779304f3d..d058dff42a 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -297,96 +297,106 @@ class GenerateAnalysisReportApi(Resource): data = request.get_json() summary_analysis = data.get('summary_analysis') school_name = data.get('school_name', '山东单县一中') # Default value if not provided + html_template = data.get('html_template') if not summary_analysis: return {"error": "summary_analysis is required"}, 400 - # HTML template for the report - html_template = """ - - - - - - - -

模拟考分析报告

-
Analysis of Examination
- -

{{ school_name }}

- -
-
-
总参考人数:
-
总平均分:
-
省内排名:
-
-
-
省内总人数:
-
省内平均分:
-
全国排名:
+ if not html_template: # default template + html_template = """ + + + + + + + +

模拟考分析报告

+
Analysis of Examination
+ +

{{ school_name }}

+ +
+
+
总参考人数:
+
总平均分:
+
省内排名:
+
+
+
省内总人数:
+
省内平均分:
+
全国排名:
+
-
-
-

题目分析:

- - {% for category in summary_analysis %} -
-
{{ category.category }}
-
-
- - 错误数{{ category.error_count }} / 总数{{ category.total_count }} - 失分比{{ (1 - category.correct_rate) * 100 }}% - +
+

题目分析:

+ + {% for category in summary_analysis %} +
+
{{ category.category }}
+
+
+
+ 做错{{ category.error_count }} +
+
+ 总考生数{{ category.total_count }} +
+
+ 失分比{{ ((1 - category.correct_rate) * 100)|round }}% +
+
+
+ {% endfor %}
- {% endfor %} -
- - - """ + + + """ # Create the HTML with the template template = Template(html_template) From d557cbb174bba69671e0ca1b7d11825d9c55b986 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 18:08:08 +0800 Subject: [PATCH 18/26] fix template --- api/controllers/inner_tools/answers_summary_analysis.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index d058dff42a..04d5d54d7c 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -380,14 +380,16 @@ class GenerateAnalysisReportApi(Resource):
{{ category.category }}
-
+
+ {% if category.error_count > 0 %} 做错{{ category.error_count }} + {% endif %}
总考生数{{ category.total_count }}
-
- 失分比{{ ((1 - category.correct_rate) * 100)|round }}% +
+ 失分比{% if category.error_count == 0 %}0{% else %}{{ ((1 - category.correct_rate) * 100)|round }}{% endif %}%
From 9e53d17fffd36af896c83e8ccaa5ecc982f6d2d3 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 18:33:44 +0800 Subject: [PATCH 19/26] update docker file to fix weasyprint issue --- api/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/Dockerfile b/api/Dockerfile index 539b7f8b33..5b7a2c5ea3 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -49,7 +49,7 @@ ENV TZ=UTC WORKDIR /app/api RUN apt-get update \ - && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev \ + && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev libgobject-2.0-0 \ # if you located in China, you can use aliyun mirror to speed up # && echo "deb http://mirrors.aliyun.com/debian testing main" > /etc/apt/sources.list \ # Don't replace the sources.list file, create a separate testing.list file From ad7c192eb8e93a8c7d71326d1d870373c2f1c8c8 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 18:36:02 +0800 Subject: [PATCH 20/26] fix dockerfile --- api/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/Dockerfile b/api/Dockerfile index 5b7a2c5ea3..4342bf64b8 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -49,7 +49,7 @@ ENV TZ=UTC WORKDIR /app/api RUN apt-get update \ - && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev libgobject-2.0-0 \ + && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev libglib2.0-0 \ # if you located in China, you can use aliyun mirror to speed up # && echo "deb http://mirrors.aliyun.com/debian testing main" > /etc/apt/sources.list \ # Don't replace the sources.list file, create a separate testing.list file From 0c1020b256ba166faf266ac7cceb09fb4d2a5486 Mon Sep 17 00:00:00 2001 From: ytqh Date: Tue, 22 Apr 2025 18:58:25 +0800 Subject: [PATCH 21/26] fix --- api/Dockerfile | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/api/Dockerfile b/api/Dockerfile index 4342bf64b8..739bef314d 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -49,7 +49,27 @@ ENV TZ=UTC WORKDIR /app/api RUN apt-get update \ - && apt-get install -y --no-install-recommends curl nodejs libgmp-dev libmpfr-dev libmpc-dev libglib2.0-0 \ + && apt-get install -y --no-install-recommends \ + curl \ + nodejs \ + libgmp-dev \ + libmpfr-dev \ + libmpc-dev \ + libglib2.0-0 \ + libpango-1.0-0 \ + libpangoft2-1.0-0 \ + libpangocairo-1.0-0 \ + libharfbuzz0b \ + libharfbuzz-gobject0 \ + libharfbuzz-icu0 \ + libharfbuzz-subset0 \ + libcairo2 \ + libcairo-gobject2 \ + libcairo-script-interpreter2 \ + libcairo2-dev \ + libpango1.0-dev \ + libpangocairo-1.0-0 \ + libpangoxft-1.0-0 \ # if you located in China, you can use aliyun mirror to speed up # && echo "deb http://mirrors.aliyun.com/debian testing main" > /etc/apt/sources.list \ # Don't replace the sources.list file, create a separate testing.list file From 475a852a929f26fb4ee3e3dc50b68bdee76b5d0d Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 26 Apr 2025 17:08:08 +0800 Subject: [PATCH 22/26] update analysis --- .../inner_tools/answers_summary_analysis.py | 124 +++++++++++++++--- 1 file changed, 107 insertions(+), 17 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index 04d5d54d7c..e510957f32 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -28,8 +28,6 @@ class AnswersSummaryAnalysisApi(Resource): return {"error": "Request must be JSON"}, 400 data = request.get_json() - categories = data.get('categories') - correct_answer = data.get('correct_answer') # a list of correct answer workflow_run_id = data.get('workflow_run_id') # read the arg of this workflow run @@ -45,29 +43,42 @@ class AnswersSummaryAnalysisApi(Resource): try: args_json = json.loads(workflow_run_args) user_answers_file_id = args_json.get('user_answers').get('related_id') + exam_answers_file_id = args_json.get('exam_answers').get('related_id') except json.JSONDecodeError: return {"error": "workflow_run_args must be a valid JSON string"}, 400 if not user_answers_file_id: - return {"error": "file_id is required"}, 400 - if not categories: - return {"error": "categories is required"}, 400 - - # Read the file content with encoding detection - file_content, detected_encoding = self._read_file_with_encoding_detection(user_answers_file_id) - if not file_content: - return {"error": "Failed to read file or file not found"}, 404 - - # Parse the answers - parsed_answers = self._parse_answers(file_content) - if not parsed_answers: - return {"error": "Failed to parse answers from file"}, 400 + return {"error": "user_answers file_id is required"}, 400 + if not exam_answers_file_id: + return {"error": "exam_answers file_id is required"}, 400 + + # Read the exam answers file to get categories and correct answers + exam_answers_file_content, _ = self._read_file_with_encoding_detection(exam_answers_file_id) + if not exam_answers_file_content: + return {"error": "Failed to read exam answers file or file not found"}, 404 + + # Parse the exam answers file + exam_answers, categories, correct_answer = self._parse_exam_answers(exam_answers_file_content) + if not categories or not correct_answer: + return {"error": "Failed to parse categories and correct answers from exam file"}, 400 + + # Read the user answers file content with encoding detection + user_answers_file_content, _ = self._read_file_with_encoding_detection(user_answers_file_id) + if not user_answers_file_content: + return {"error": "Failed to read user answers file or file not found"}, 404 + + # Parse the user answers + user_answers = self._parse_answers(user_answers_file_content) + if not user_answers: + return {"error": "Failed to parse user answers from file"}, 400 # Calculate category statistics - summary_analysis = self._calculate_category_statistics(parsed_answers, correct_answer, categories) + summary_analysis = self._calculate_category_statistics(user_answers, correct_answer, categories) # Return the response - return jsonify({'user_answers': parsed_answers, 'summary_analysis': summary_analysis}) + return jsonify( + {'user_answers': user_answers, 'summary_analysis': summary_analysis, 'exam_answers': exam_answers} + ) def _read_file_with_encoding_detection(self, file_id: str) -> Tuple[Optional[str], Optional[str]]: """Read file content with automatic encoding detection.""" @@ -83,6 +94,8 @@ class AnswersSummaryAnalysisApi(Resource): # Try multiple encodings if needed encodings_to_try = [encoding, 'utf-8', 'gbk', 'gb2312', 'iso-8859-1', 'latin-1'] + # Filter out any None values + encodings_to_try = [enc for enc in encodings_to_try if enc is not None] decoded_content = None detected_encoding = None @@ -99,6 +112,83 @@ class AnswersSummaryAnalysisApi(Resource): print(f"Error reading file: {str(e)}") return None, None + def _parse_exam_answers(self, file_content: str) -> Tuple[List[Dict[str, Any]], List[Dict[str, Any]], List[str]]: + """Parse exam answers from the file content. + + Expected format is CSV with columns: + - 题号 (Question Number) + - 题目分类 (Category) + - 正确答案 (Correct Answer) + - 题目分析 (Question Analysis) + + Returns: + Tuple containing: + - exam_answers: List of dictionaries with question details + - categories: List of categories with question numbers + - correct_answer: List of correct answers + """ + try: + import csv + from collections import defaultdict + from io import StringIO + + # Create a CSV reader from the string content + csv_file = StringIO(file_content) + csv_reader = csv.reader(csv_file) + + # Get the header row + header = next(csv_reader, None) + if not header: + return [], [], [] + + exam_answers = [] + category_map = defaultdict(list) + correct_answers = [""] * 1000 # Initialize with empty strings, we'll trim later + max_question_num = 0 + + for row in csv_reader: + if not row or len(row) < 3: # Skip rows with insufficient data + continue + + try: + question_num = int(row[0].strip()) + category = row[1].strip() + correct_ans = row[2].strip() + analysis = row[3].strip() if len(row) > 3 else "" + + # Record the maximum question number + max_question_num = max(max_question_num, question_num) + + # Add to exam_answers + exam_answers.append( + { + "question_num": question_num, + "category": category, + "correct_answer": correct_ans, + "analysis": analysis, + } + ) + + # Map category to question numbers + category_map[category].append(str(question_num)) + + # Set correct answer + correct_answers[question_num - 1] = correct_ans + except (ValueError, IndexError): + continue + + # Trim correct_answers to the maximum question number + correct_answers = correct_answers[:max_question_num] + + # Convert category_map to the expected categories format + categories = [{"name": cat, "items": items} for cat, items in category_map.items()] + + return exam_answers, categories, correct_answers + except Exception as e: + # Log the exception for debugging + print(f"Error parsing exam answers: {str(e)}") + return [], [], [] + def _parse_answers(self, file_content: str) -> List[Dict[str, Any]]: """Parse answers from the file content. From 10adb0fb94e5056154a0063acdb9b13afa930c2a Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 26 Apr 2025 17:10:08 +0800 Subject: [PATCH 23/26] remove legacy statis --- .../inner_tools/answers_summary_analysis.py | 63 ------------------- 1 file changed, 63 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index e510957f32..b38f32bdb5 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -252,10 +252,6 @@ class AnswersSummaryAnalysisApi(Resource): } ] """ - # Validate correct_answer list - if not correct_answer or not isinstance(correct_answer, list): - # Fallback to original behavior if no correct answers provided - return self._legacy_calculate_statistics(parsed_answers, categories) summary = [] @@ -318,65 +314,6 @@ class AnswersSummaryAnalysisApi(Resource): return summary - def _legacy_calculate_statistics( - self, parsed_answers: List[Dict[str, Any]], categories: List[Dict[str, Any]] - ) -> List[Dict[str, Any]]: - """Legacy method for calculating statistics when no correct answers are provided. - This maintains backward compatibility with the original implementation.""" - summary = [] - - # For each category in the list - for category in categories: - # Extract category name and question numbers - if isinstance(category, dict): - category_name = category.get('name', '') - question_numbers = category.get('items', []) - - if not category_name or not question_numbers: - category_name = next(iter(category)) - question_numbers = category.get(category_name, []) - elif isinstance(category, list) and len(category) == 2: - category_name = category[0] - question_numbers = category[1] - else: - continue # Skip invalid category format - - total_answers = 0 - valid_answers = 0 - - for answer_data in parsed_answers: - answers = answer_data.get('answers', []) - - # Check each question in this category - for q_num in question_numbers: - try: - # Convert to 0-based index - idx = int(q_num) - 1 - if idx < 0 or idx >= len(answers): - continue - - total_answers += 1 - # Count non-empty and non-placeholder answers as valid - if answers[idx] and answers[idx] not in ['#', '?', '-']: - valid_answers += 1 - except (ValueError, IndexError): - continue - - # Calculate percentage - correct_rate = valid_answers / total_answers if total_answers > 0 else 0 - error_count = total_answers - valid_answers - - summary.append( - { - "category": category_name, - "correct_rate": round(correct_rate, 2), - "error_count": error_count, - "total_count": total_answers, - } - ) - - return summary - class GenerateAnalysisReportApi(Resource): def post(self): From a8cf4645f5a1fffabc677b1895c90edf1c2d77f8 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 26 Apr 2025 17:11:22 +0800 Subject: [PATCH 24/26] change label --- api/controllers/inner_tools/answers_summary_analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index b38f32bdb5..274d80bb9c 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -413,7 +413,7 @@ class GenerateAnalysisReportApi(Resource): {% endif %}
- 总考生数{{ category.total_count }} + 总解答数{{ category.total_count }}
失分比{% if category.error_count == 0 %}0{% else %}{{ ((1 - category.correct_rate) * 100)|round }}{% endif %}% From fd430f281b04ef8ba960131e0c84022d4ad9e645 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sat, 26 Apr 2025 17:35:41 +0800 Subject: [PATCH 25/26] add html to pdf endpoints --- api/controllers/inner_tools/__init__.py | 2 +- api/controllers/inner_tools/html_to_pdf.py | 50 ++++++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 api/controllers/inner_tools/html_to_pdf.py diff --git a/api/controllers/inner_tools/__init__.py b/api/controllers/inner_tools/__init__.py index 5ecf763ea6..b9d1b8b07b 100644 --- a/api/controllers/inner_tools/__init__.py +++ b/api/controllers/inner_tools/__init__.py @@ -4,4 +4,4 @@ from libs.external_api import ExternalApi bp = Blueprint("inner_tools", __name__, url_prefix="/inner_tools") api = ExternalApi(bp) -from . import answers_summary_analysis, markdown_to_pdf +from . import answers_summary_analysis, html_to_pdf, markdown_to_pdf diff --git a/api/controllers/inner_tools/html_to_pdf.py b/api/controllers/inner_tools/html_to_pdf.py new file mode 100644 index 0000000000..796ac188f2 --- /dev/null +++ b/api/controllers/inner_tools/html_to_pdf.py @@ -0,0 +1,50 @@ +import uuid + +from controllers.inner_tools import api +from core.tools.tool_file_manager import ToolFileManager +from flask import jsonify, request +from flask_restful import Resource # type: ignore +from models.account import Tenant +from weasyprint import HTML + + +class HtmlToPdfApi(Resource): + def post(self): + """Generate a PDF from the provided HTML content.""" + if not request.data: + return {"error": "No HTML content provided"}, 400 + + html_content = request.data + + # Generate PDF + html = HTML(string=html_content) + pdf_file = html.write_pdf() + + if pdf_file is None: + return {"error": "Failed to generate PDF"}, 500 + + # Get the first tenant from database (similar to markdown_to_pdf.py) + tenant = Tenant.query.first() + if not tenant: + return {"error": "No tenant found"}, 400 + + tenant_id = tenant.id + + # Generate filename + filename = f"html_to_pdf_{uuid.uuid4().hex[:8]}.pdf" + + # Save the file using ToolFileManager + tool_file = ToolFileManager.create_file_by_raw( + user_id=None, + tenant_id=tenant_id, + conversation_id=None, + file_binary=pdf_file, + mimetype='application/pdf', + ) + + # Return the file info with URL + file_url = ToolFileManager.sign_file(tool_file.id, '.pdf') + return jsonify({'url': file_url, 'file_id': tool_file.id, 'file_name': filename, 'file_size': tool_file.size}) + + +api.add_resource(HtmlToPdfApi, '/html-to-pdf') From f55fdf380fd979ce6ee815c934fbf7991388f173 Mon Sep 17 00:00:00 2001 From: ytqh Date: Sun, 27 Apr 2025 14:22:37 +0800 Subject: [PATCH 26/26] Enhance file reading functionality to support XLSX files by converting them to CSV format, while maintaining automatic encoding detection for CSV files. --- .../inner_tools/answers_summary_analysis.py | 67 ++++++++++++++----- 1 file changed, 50 insertions(+), 17 deletions(-) diff --git a/api/controllers/inner_tools/answers_summary_analysis.py b/api/controllers/inner_tools/answers_summary_analysis.py index 274d80bb9c..11e402736f 100644 --- a/api/controllers/inner_tools/answers_summary_analysis.py +++ b/api/controllers/inner_tools/answers_summary_analysis.py @@ -81,33 +81,66 @@ class AnswersSummaryAnalysisApi(Resource): ) def _read_file_with_encoding_detection(self, file_id: str) -> Tuple[Optional[str], Optional[str]]: - """Read file content with automatic encoding detection.""" + """Read file content with automatic encoding detection. + Supports both CSV and XLSX files, converting XLSX to CSV text format. + """ try: upload_file = db.session.query(UploadFile).filter(UploadFile.id == file_id).first() + if not upload_file: + return None, None # Get the file content from storage file_content = storage.load_once(upload_file.key) - # Detect the encoding - detection = chardet.detect(file_content) - encoding = detection.get('encoding', 'utf-8') + # Check if the file is Excel (.xlsx) based on filename or mime type + file_extension = upload_file.name.split('.')[-1].lower() if upload_file.name else '' + mime_type = upload_file.mime_type if upload_file.mime_type else '' + + is_excel = ( + file_extension == 'xlsx' + or mime_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ) + + if is_excel: + # Process Excel file + import io - # Try multiple encodings if needed - encodings_to_try = [encoding, 'utf-8', 'gbk', 'gb2312', 'iso-8859-1', 'latin-1'] - # Filter out any None values - encodings_to_try = [enc for enc in encodings_to_try if enc is not None] - decoded_content = None - detected_encoding = None + import pandas as pd - for enc in encodings_to_try: + # Load Excel data + excel_data = io.BytesIO(file_content) try: - decoded_content = file_content.decode(enc) - detected_encoding = enc - break - except UnicodeDecodeError: - continue + # Read all sheets, default to first sheet + df = pd.read_excel(excel_data, engine='openpyxl') + + # Convert DataFrame to CSV string + csv_content = df.to_csv(index=False) + return csv_content, 'utf-8' + except Exception as e: + print(f"Error converting Excel file: {str(e)}") + return None, None + else: + # Process CSV file with encoding detection + # Detect the encoding + detection = chardet.detect(file_content) + encoding = detection.get('encoding', 'utf-8') + + # Try multiple encodings if needed + encodings_to_try = [encoding, 'utf-8', 'gbk', 'gb2312', 'iso-8859-1', 'latin-1'] + # Filter out any None values + encodings_to_try = [enc for enc in encodings_to_try if enc is not None] + decoded_content = None + detected_encoding = None + + for enc in encodings_to_try: + try: + decoded_content = file_content.decode(enc) + detected_encoding = enc + break + except UnicodeDecodeError: + continue - return decoded_content, detected_encoding + return decoded_content, detected_encoding except Exception as e: print(f"Error reading file: {str(e)}") return None, None