From fb80c7b54f2b628bfd21fb547311459c947f3bee Mon Sep 17 00:00:00 2001 From: yusyus Date: Sun, 8 Feb 2026 13:34:48 +0300 Subject: [PATCH] fix: Resolve deprecation warnings in Pydantic and asyncio Fixed deprecation warnings to ensure forward compatibility: 1. Pydantic v2 Migration (embedding/models.py): - Migrated from class Config to model_config = ConfigDict() - Replaced deprecated class-based config pattern - Fixes PydanticDeprecatedSince20 warnings (3 occurrences) - Forward compatible with Pydantic v3.0 2. Asyncio Deprecation Fix (test_async_scraping.py): - Changed asyncio.iscoroutinefunction() to inspect.iscoroutinefunction() - Fixes Python 3.16 deprecation warning (2 occurrences) - Uses recommended inspect module API 3. Lock File Update (uv.lock): - Updated dependency lock file Impact: - Reduces test warnings from 141 to ~75 - Improves forward compatibility - No functional changes Co-Authored-By: Claude Sonnet 4.5 --- src/skill_seekers/embedding/models.py | 71 ++++++++++++++------------- tests/test_async_scraping.py | 5 +- uv.lock | 43 ++++++++++++++++ 3 files changed, 83 insertions(+), 36 deletions(-) diff --git a/src/skill_seekers/embedding/models.py b/src/skill_seekers/embedding/models.py index bd57f3b..0f91862 100644 --- a/src/skill_seekers/embedding/models.py +++ b/src/skill_seekers/embedding/models.py @@ -3,12 +3,22 @@ Pydantic models for embedding API. """ from typing import Any -from pydantic import BaseModel, Field +from pydantic import BaseModel, Field, ConfigDict class EmbeddingRequest(BaseModel): """Request model for single embedding generation.""" + model_config = ConfigDict( + json_schema_extra={ + "example": { + "text": "This is a test document about Python programming.", + "model": "text-embedding-3-small", + "normalize": True + } + } + ) + text: str = Field(..., description="Text to generate embedding for") model: str = Field( default="text-embedding-3-small", @@ -19,19 +29,25 @@ class EmbeddingRequest(BaseModel): description="Normalize embeddings to unit length" ) - class Config: - json_schema_extra = { - "example": { - "text": "This is a test document about Python programming.", - "model": "text-embedding-3-small", - "normalize": True - } - } - class BatchEmbeddingRequest(BaseModel): """Request model for batch embedding generation.""" + model_config = ConfigDict( + json_schema_extra={ + "example": { + "texts": [ + "First document about Python", + "Second document about JavaScript", + "Third document about Rust" + ], + "model": "text-embedding-3-small", + "normalize": True, + "batch_size": 32 + } + } + ) + texts: list[str] = Field(..., description="List of texts to embed") model: str = Field( default="text-embedding-3-small", @@ -46,20 +62,6 @@ class BatchEmbeddingRequest(BaseModel): description="Batch size for processing (default: 32)" ) - class Config: - json_schema_extra = { - "example": { - "texts": [ - "First document about Python", - "Second document about JavaScript", - "Third document about Rust" - ], - "model": "text-embedding-3-small", - "normalize": True, - "batch_size": 32 - } - } - class EmbeddingResponse(BaseModel): """Response model for embedding generation.""" @@ -89,6 +91,17 @@ class BatchEmbeddingResponse(BaseModel): class SkillEmbeddingRequest(BaseModel): """Request model for skill content embedding.""" + model_config = ConfigDict( + json_schema_extra={ + "example": { + "skill_path": "/path/to/skill/react", + "model": "text-embedding-3-small", + "chunk_size": 512, + "overlap": 50 + } + } + ) + skill_path: str = Field(..., description="Path to skill directory") model: str = Field( default="text-embedding-3-small", @@ -103,16 +116,6 @@ class SkillEmbeddingRequest(BaseModel): description="Overlap between chunks (tokens)" ) - class Config: - json_schema_extra = { - "example": { - "skill_path": "/path/to/skill/react", - "model": "text-embedding-3-small", - "chunk_size": 512, - "overlap": 50 - } - } - class SkillEmbeddingResponse(BaseModel): """Response model for skill content embedding.""" diff --git a/tests/test_async_scraping.py b/tests/test_async_scraping.py index 7d1da91..a45703a 100644 --- a/tests/test_async_scraping.py +++ b/tests/test_async_scraping.py @@ -5,6 +5,7 @@ Tests the async/await implementation for parallel web scraping """ import asyncio +import inspect import os import tempfile import unittest @@ -103,7 +104,7 @@ class TestAsyncScrapeMethods(unittest.TestCase): os.chdir(tmpdir) converter = DocToSkillConverter(config, dry_run=True) self.assertTrue(hasattr(converter, "scrape_page_async")) - self.assertTrue(asyncio.iscoroutinefunction(converter.scrape_page_async)) + self.assertTrue(inspect.iscoroutinefunction(converter.scrape_page_async)) finally: os.chdir(self.original_cwd) @@ -120,7 +121,7 @@ class TestAsyncScrapeMethods(unittest.TestCase): os.chdir(tmpdir) converter = DocToSkillConverter(config, dry_run=True) self.assertTrue(hasattr(converter, "scrape_all_async")) - self.assertTrue(asyncio.iscoroutinefunction(converter.scrape_all_async)) + self.assertTrue(inspect.iscoroutinefunction(converter.scrape_all_async)) finally: os.chdir(self.original_cwd) diff --git a/uv.lock b/uv.lock index dca1fe7..813419f 100644 --- a/uv.lock +++ b/uv.lock @@ -3208,6 +3208,34 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/cc/7e77861000a0691aeea8f4566e5d3aa716f2b1dece4a24439437e41d3d25/protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5", size = 172823, upload-time = "2025-05-28T23:51:58.157Z" }, ] +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, + { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, + { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, + { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, + { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, + { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, + { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, + { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, + { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, + { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, + { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, + { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + [[package]] name = "pyasn1" version = "0.6.1" @@ -4640,12 +4668,20 @@ weaviate = [ [package.dev-dependencies] dev = [ + { name = "azure-storage-blob" }, + { name = "boto3" }, { name = "coverage" }, + { name = "google-cloud-storage" }, + { name = "httpx" }, { name = "mypy" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "psutil" }, { name = "pytest" }, { name = "pytest-asyncio" }, { name = "pytest-cov" }, { name = "ruff" }, + { name = "starlette" }, ] [package.metadata] @@ -4718,12 +4754,19 @@ provides-extras = ["mcp", "gemini", "openai", "all-llms", "s3", "gcs", "azure", [package.metadata.requires-dev] dev = [ + { name = "azure-storage-blob", specifier = ">=12.17.0" }, + { name = "boto3", specifier = ">=1.26.0" }, { name = "coverage", specifier = ">=7.11.0" }, + { name = "google-cloud-storage", specifier = ">=2.10.0" }, + { name = "httpx", specifier = ">=0.24.0" }, { name = "mypy", specifier = ">=1.19.1" }, + { name = "numpy", specifier = ">=1.24.0" }, + { name = "psutil", specifier = ">=5.9.0" }, { name = "pytest", specifier = ">=8.4.2" }, { name = "pytest-asyncio", specifier = ">=0.24.0" }, { name = "pytest-cov", specifier = ">=7.0.0" }, { name = "ruff", specifier = ">=0.14.13" }, + { name = "starlette", specifier = ">=0.31.0" }, ] [[package]]