Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-langsmith for 
openSUSE:Factory checked in at 2026-07-07 21:04:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-langsmith (Old)
 and      /work/SRC/openSUSE:Factory/.python-langsmith.new.1982 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-langsmith"

Tue Jul  7 21:04:29 2026 rev:5 rq:1364317 version:0.9.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-langsmith/python-langsmith.changes        
2026-07-03 16:06:08.555810982 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-langsmith.new.1982/python-langsmith.changes  
    2026-07-07 21:07:27.051109632 +0200
@@ -1,0 +2,32 @@
+Tue Jul  7 12:45:27 UTC 2026 - Bernhard Wiedemann <[email protected]>
+
+- Fix variations from %check (boo#1227364)
+
+-------------------------------------------------------------------
+Tue Jul  7 07:43:30 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.9.8:
+  * Add an asynchronous aread_project() client method to read a
+    tracing project (by id or name, optionally with aggregate
+    statistics) without blocking
+  * Rename the client-facing online_evaluators accessor to
+    evaluators for clearer nomenclature
+  * Drop the asynchronous projects resource accessor
+
+-------------------------------------------------------------------
+Fri Jul  3 09:46:35 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Lower dependency floors to the versions shipped by openSUSE
+  Leap 16.0 (verified not to change functionality):
+  * websockets: require >= 14.2 instead of >= 15.0; only the
+    sync and asyncio connect() calls with additional_headers
+    and open_timeout are used, both available since websockets
+    14.0
+  * zstandard: require >= 0.22.0 instead of >= 0.23.0; only
+    ZstdCompressor().stream_writer() with closefd is used,
+    available since zstandard 0.15.0
+  Verified by a full package build whose unit test suite
+  (332 passed) succeeds against Leap's websockets 14.2 and
+  zstandard 0.22.0.
+
+-------------------------------------------------------------------

Old:
----
  langsmith-0.9.7.tar.gz

New:
----
  langsmith-0.9.8.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-langsmith.spec ++++++
--- /var/tmp/diff_new_pack.6EnKLm/_old  2026-07-07 21:07:27.619129406 +0200
+++ /var/tmp/diff_new_pack.6EnKLm/_new  2026-07-07 21:07:27.619129406 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-langsmith
-Version:        0.9.7
+Version:        0.9.8
 Release:        0
 Summary:        Client library for the LangSmith LLM tracing and evaluation 
platform
 License:        MIT
@@ -38,9 +38,9 @@
 Requires:       python-sniffio >= 1.1
 Requires:       python-typing_extensions >= 4.0.0
 Requires:       python-uuid-utils >= 0.12.0
-Requires:       python-websockets >= 15.0
+Requires:       python-websockets >= 14.2
 Requires:       python-xxhash >= 3.0.0
-Requires:       python-zstandard >= 0.23.0
+Requires:       python-zstandard >= 0.22.0
 BuildArch:      noarch
 # SECTION test requirements
 BuildRequires:  %{python_module anyio >= 3.5.0}
@@ -61,9 +61,9 @@
 BuildRequires:  %{python_module sniffio >= 1.1}
 BuildRequires:  %{python_module typing_extensions >= 4.0.0}
 BuildRequires:  %{python_module uuid-utils >= 0.12.0}
-BuildRequires:  %{python_module websockets >= 15.0}
+BuildRequires:  %{python_module websockets >= 14.2}
 BuildRequires:  %{python_module xxhash >= 3.0.0}
-BuildRequires:  %{python_module zstandard >= 0.23.0}
+BuildRequires:  %{python_module zstandard >= 0.22.0}
 # /SECTION
 %python_subpackages
 
@@ -82,6 +82,10 @@
 
 %install
 %pyproject_install
+# Recompile the installed modules as hash-based bytecode: this package ships
+# many modules, so timestamp-based .pyc desync from the reproducibility-clamped
+# .py mtimes and trip python-bytecode-inconsistent-mtime.
+%python_expand $python -m compileall -q -f --invalidation-mode=unchecked-hash 
-o 0 -o 1 -s %{buildroot} %{buildroot}%{$python_sitelib}/langsmith
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
@@ -91,13 +95,6 @@
 # langchain-core (which depends on langsmith -> build cycle);
 # test_hybrid_tracing.py carries an upstream module-level pytest.skip.
 %pytest tests/unit_tests -p no:langsmith_plugin --ignore 
tests/unit_tests/wrappers --ignore tests/unit_tests/sandbox --ignore 
tests/unit_tests/cli --ignore tests/unit_tests/evaluation --ignore 
tests/unit_tests/test_async_client.py --ignore tests/unit_tests/test_client.py 
--ignore tests/unit_tests/test_run_helpers.py --ignore 
tests/unit_tests/test_hybrid_tracing.py -k 'not test_client_gc and not 
test_git_info and not test_as_runnable'
-# Recompile the installed modules as hash-based bytecode: this package ships
-# many modules, so timestamp-based .pyc desync from the reproducibility-clamped
-# .py mtimes and trip python-bytecode-inconsistent-mtime.
-%python_expand $python -m compileall -q -f --invalidation-mode=unchecked-hash 
-o 0 -o 1 -s %{buildroot} %{buildroot}%{$python_sitelib}/langsmith
-# Re-link the freshly compiled identical .pyc/.opt-1.pyc (brp-python-hardlink
-# already ran before %%check).
-%python_expand %fdupes %{buildroot}%{$python_sitelib}/langsmith
 
 %files %{python_files}
 %doc README.md

++++++ langsmith-0.9.7.tar.gz -> langsmith-0.9.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/.bumpversion.cfg 
new/langsmith-0.9.8/.bumpversion.cfg
--- old/langsmith-0.9.7/.bumpversion.cfg        2020-02-02 01:00:00.000000000 
+0100
+++ new/langsmith-0.9.8/.bumpversion.cfg        2020-02-02 01:00:00.000000000 
+0100
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.9.7
+current_version = 0.9.8
 parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
 serialize = {major}.{minor}.{patch}
 search = {current_version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/PKG-INFO new/langsmith-0.9.8/PKG-INFO
--- old/langsmith-0.9.7/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
+++ new/langsmith-0.9.8/PKG-INFO        2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: langsmith
-Version: 0.9.7
+Version: 0.9.8
 Summary: Client library to connect to the LangSmith Observability and 
Evaluation Platform.
 Project-URL: Homepage, https://smith.langchain.com/
 Project-URL: Documentation, https://docs.smith.langchain.com/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/langsmith/__init__.py 
new/langsmith-0.9.8/langsmith/__init__.py
--- old/langsmith-0.9.7/langsmith/__init__.py   2020-02-02 01:00:00.000000000 
+0100
+++ new/langsmith-0.9.8/langsmith/__init__.py   2020-02-02 01:00:00.000000000 
+0100
@@ -29,7 +29,7 @@
 
 # Avoid calling into importlib on every call to __version__
 
-__version__ = "0.9.7"
+__version__ = "0.9.8"
 version = __version__  # for backwards compatibility
 
 # Metadata key to hide a traced run from LangSmith's Messages View.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/langsmith/async_client.py 
new/langsmith-0.9.8/langsmith/async_client.py
--- old/langsmith-0.9.7/langsmith/async_client.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/langsmith-0.9.8/langsmith/async_client.py       2020-02-02 
01:00:00.000000000 +0100
@@ -50,7 +50,7 @@
         AsyncDatasetsResource,
     )
     from langsmith._openapi_client.resources.online_evaluators import (
-        AsyncOnlineEvaluatorsResource,
+        AsyncOnlineEvaluatorsResource as AsyncEvaluatorsResource,
     )
     from langsmith._openapi_client.resources.sandboxes.sandboxes import (
         AsyncSandboxesResource,
@@ -314,8 +314,8 @@
         return self._langsmith_api.runs
 
     @property
-    def online_evaluators(self) -> AsyncOnlineEvaluatorsResource:
-        """Access the online evaluator resource."""
+    def evaluators(self) -> AsyncEvaluatorsResource:
+        """Access the evaluator resource."""
         return self._langsmith_api.online_evaluators
 
     @property
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/langsmith/client.py 
new/langsmith-0.9.8/langsmith/client.py
--- old/langsmith-0.9.7/langsmith/client.py     2020-02-02 01:00:00.000000000 
+0100
+++ new/langsmith-0.9.8/langsmith/client.py     2020-02-02 01:00:00.000000000 
+0100
@@ -17,6 +17,7 @@
 import collections
 import concurrent.futures as cf
 import contextlib
+import contextvars
 import datetime
 import functools
 import importlib
@@ -69,6 +70,7 @@
 from langsmith import env as ls_env
 from langsmith import schemas as ls_schemas
 from langsmith import utils as ls_utils
+from langsmith._internal import _aiter as aitertools
 from langsmith._internal import _orjson, _profiles
 from langsmith._internal._backend_version import _check_backend_version
 from langsmith._internal._background_thread import (
@@ -268,13 +270,12 @@
         AsyncDatasetsResource,
     )
     from langsmith._openapi_client.resources.online_evaluators import (
-        AsyncOnlineEvaluatorsResource,
+        AsyncOnlineEvaluatorsResource as AsyncEvaluatorsResource,
     )
     from langsmith._openapi_client.resources.runs import AsyncRunsResource
     from langsmith._openapi_client.resources.sandboxes.sandboxes import (
         AsyncSandboxesResource,
     )
-    from langsmith._openapi_client.resources.sessions import 
AsyncSessionsResource
 
     # OTEL imports for type hints
     try:
@@ -1467,8 +1468,8 @@
         return self._get_langsmith_api().runs
 
     @property
-    def online_evaluators(self) -> AsyncOnlineEvaluatorsResource:
-        """Access the online evaluator resource."""
+    def evaluators(self) -> AsyncEvaluatorsResource:
+        """Access the evaluator resource."""
         _check_backend_version(self.info.version)
         return self._get_langsmith_api().online_evaluators
 
@@ -1479,12 +1480,6 @@
         return self._get_langsmith_api().sandboxes
 
     @property
-    def projects(self) -> AsyncSessionsResource:
-        """Access the projects resource."""
-        _check_backend_version(self.info.version)
-        return self._get_langsmith_api().sessions
-
-    @property
     def datasets(self) -> AsyncDatasetsResource:
         """Access the v2 datasets resource (experiment_runs, etc.)."""
         _check_backend_version(self.info.version)
@@ -4982,6 +4977,34 @@
             **response.json(), _host_url=self._host_url
         )
 
+    async def aread_project(
+        self,
+        *,
+        project_id: Optional[str] = None,
+        project_name: Optional[str] = None,
+        include_stats: bool = False,
+    ) -> ls_schemas.TracerSessionResult:
+        """Asynchronously read a project from the LangSmith API.
+
+        Args:
+            project_id (Optional[str]):
+                The ID of the project to read.
+            project_name (Optional[str]): The name of the project to read.
+                Only one of project_id or project_name may be given.
+            include_stats (bool, default=False):
+                Whether to include a project's aggregate statistics in the 
response.
+
+        Returns:
+            TracerSessionResult: The project.
+        """
+        return await aitertools.aio_to_thread(
+            contextvars.copy_context(),
+            self.read_project,
+            project_id=project_id,
+            project_name=project_name,
+            include_stats=include_stats,
+        )
+
     def has_project(
         self, project_name: str, *, project_id: Optional[str] = None
     ) -> bool:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langsmith-0.9.7/tests/integration_tests/test_client.py 
new/langsmith-0.9.8/tests/integration_tests/test_client.py
--- old/langsmith-0.9.7/tests/integration_tests/test_client.py  2020-02-02 
01:00:00.000000000 +0100
+++ new/langsmith-0.9.8/tests/integration_tests/test_client.py  2020-02-02 
01:00:00.000000000 +0100
@@ -122,17 +122,17 @@
     )
 
 
-async def test_online_evaluators_generated_client_crud(
+async def test_evaluators_generated_client_crud(
     langchain_client: Client,
 ) -> None:
-    """Exercise the generated OpenAPI online evaluators resource end to end."""
+    """Exercise the generated OpenAPI evaluators resource end to end."""
     evaluator = None
-    name = "__sdk_online_evaluator_integration_" + "".join(
+    name = "__sdk_evaluator_integration_" + "".join(
         random.sample(string.ascii_lowercase, 10)
     )
 
     try:
-        created = await langchain_client.online_evaluators.create(
+        created = await langchain_client.evaluators.create(
             name=name,
             type="code",
             code_evaluator={
@@ -146,12 +146,12 @@
         assert evaluator.name == name
         assert evaluator.type == "code"
 
-        retrieved = await 
langchain_client.online_evaluators.retrieve(evaluator.id)
+        retrieved = await langchain_client.evaluators.retrieve(evaluator.id)
         assert retrieved.id == evaluator.id
         assert retrieved.name == name
 
         updated_name = f"{name}_updated"
-        updated = await langchain_client.online_evaluators.update(
+        updated = await langchain_client.evaluators.update(
             evaluator.id,
             name=updated_name,
         )
@@ -160,18 +160,43 @@
 
         evaluators = [
             item
-            async for item in langchain_client.online_evaluators.list(
+            async for item in langchain_client.evaluators.list(
                 name_contains=updated_name, limit=10
             )
         ]
         assert evaluator.id in {item.id for item in evaluators}
     finally:
         if evaluator is not None and evaluator.id is not None:
-            await langchain_client.online_evaluators.delete(
+            await langchain_client.evaluators.delete(
                 evaluator.id, delete_run_rules=True
             )
 
 
+async def test_aread_project(langchain_client: Client) -> None:
+    """Exercise the async aread_project method against the LangSmith API."""
+    project_name = "__sdk_aread_project_integration_" + "".join(
+        random.sample(string.ascii_lowercase, 10)
+    )
+    created = langchain_client.create_project(project_name)
+    try:
+        project = await 
langchain_client.aread_project(project_name=project_name)
+        assert project.id == created.id
+        assert project.name == project_name
+
+        project_by_id = await langchain_client.aread_project(
+            project_id=str(created.id), include_stats=True
+        )
+        assert project_by_id.id == created.id
+
+        nonexistent_name = "__sdk_aread_project_missing_" + "".join(
+            random.sample(string.ascii_lowercase, 10)
+        )
+        with pytest.raises(LangSmithNotFoundError):
+            await langchain_client.aread_project(project_name=nonexistent_name)
+    finally:
+        langchain_client.delete_project(project_name=project_name)
+
+
 def test_datasets(parameterized_multipart_client: Client) -> None:
     """Test datasets."""
     csv_content = "col1,col2\nval1,val2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/langsmith-0.9.7/tests/integration_tests/test_projects.py 
new/langsmith-0.9.8/tests/integration_tests/test_projects.py
--- old/langsmith-0.9.7/tests/integration_tests/test_projects.py        
2020-02-02 01:00:00.000000000 +0100
+++ new/langsmith-0.9.8/tests/integration_tests/test_projects.py        
1970-01-01 01:00:00.000000000 +0100
@@ -1,93 +0,0 @@
-"""Integration tests for Client.projects (AsyncSessionsResource)."""
-
-from __future__ import annotations
-
-import random
-import string
-
-import pytest
-
-from langsmith._openapi_client._exceptions import NotFoundError
-from langsmith.client import Client
-
-
-def _rand_name(prefix: str = "__sdk_test_project_") -> str:
-    return prefix + "".join(random.sample(string.ascii_lowercase, 10))
-
-
[email protected]
-def client() -> Client:
-    return Client()
-
-
-async def test_projects_create(client: Client) -> None:
-    """create() returns a project with the given name and description."""
-    name = _rand_name()
-    project_id = None
-    try:
-        created = await client.projects.create(name=name, description="sdk 
test")
-        project_id = created.id
-        assert project_id is not None
-        assert created.name == name
-    finally:
-        if project_id is not None:
-            await client.projects.delete(str(project_id))
-
-
-async def test_projects_retrieve(client: Client) -> None:
-    """retrieve() returns the project matching the given session_id."""
-    name = _rand_name()
-    project_id = None
-    try:
-        created = await client.projects.create(name=name)
-        project_id = created.id
-        retrieved = await client.projects.retrieve(str(project_id))
-        assert str(retrieved.id) == str(project_id)
-        assert retrieved.name == name
-    finally:
-        if project_id is not None:
-            await client.projects.delete(str(project_id))
-
-
-async def test_projects_update(client: Client) -> None:
-    """update() applies the given fields to an existing project."""
-    name = _rand_name()
-    project_id = None
-    try:
-        created = await client.projects.create(name=name)
-        project_id = created.id
-        updated_name = name + "_updated"
-        updated = await client.projects.update(
-            str(project_id),
-            name=updated_name,
-            description="updated description",
-        )
-        assert updated.id == project_id
-        assert updated.name == updated_name
-    finally:
-        if project_id is not None:
-            await client.projects.delete(str(project_id))
-
-
-async def test_projects_list(client: Client) -> None:
-    """list() returns an async iterable that includes the created project."""
-    name = _rand_name()
-    project_id = None
-    try:
-        created = await client.projects.create(name=name)
-        project_id = created.id
-        results = [p async for p in client.projects.list(name=name, limit=10)]
-        assert any(str(p.id) == str(project_id) for p in results)
-    finally:
-        if project_id is not None:
-            await client.projects.delete(str(project_id))
-
-
-async def test_projects_delete(client: Client) -> None:
-    """delete() removes the project so a subsequent retrieve raises."""
-    name = _rand_name()
-    created = await client.projects.create(name=name)
-    project_id = str(created.id)
-    await client.projects.delete(project_id)
-    with pytest.raises(NotFoundError):
-        await client.projects.retrieve(project_id)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/langsmith-0.9.7/tests/unit_tests/test_client.py 
new/langsmith-0.9.8/tests/unit_tests/test_client.py
--- old/langsmith-0.9.7/tests/unit_tests/test_client.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/langsmith-0.9.8/tests/unit_tests/test_client.py 2020-02-02 
01:00:00.000000000 +0100
@@ -877,7 +877,7 @@
     client.update_run(id_, status="completed")
 
 
-def test_online_evaluators_uses_generated_openapi_resource() -> None:
+def test_evaluators_uses_generated_openapi_resource() -> None:
     resource = object()
 
     with mock.patch("langsmith.client.LangsmithOpenAPIClient") as 
openapi_client:
@@ -891,7 +891,7 @@
             info=ls_schemas.LangSmithInfo(),
         )
 
-        assert client.online_evaluators is resource
+        assert client.evaluators is resource
 
     openapi_client.assert_called_once()
     assert openapi_client.call_args.kwargs["api_key"] == "test-api-key"
@@ -902,7 +902,7 @@
     assert timeout.read == 5.678
 
 
-def test_async_online_evaluators_uses_generated_openapi_resource() -> None:
+def test_async_evaluators_uses_generated_openapi_resource() -> None:
     resource = object()
 
     with mock.patch("langsmith._openapi_client.AsyncLangsmith") as 
openapi_client:
@@ -915,7 +915,7 @@
             timeout_ms=(1234, 5678),
         )
 
-        assert client.online_evaluators is resource
+        assert client.evaluators is resource
 
     openapi_client.assert_called_once()
     assert openapi_client.call_args.kwargs["api_key"] == "test-api-key"

Reply via email to