Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
python-version: ["3.11", "3.13"]

services:
mongodb:
Expand Down Expand Up @@ -106,7 +106,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
python-version: ["3.11", "3.13"]

steps:
- uses: actions/checkout@v7
Expand Down Expand Up @@ -137,7 +137,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.13"]
python-version: ["3.11", "3.13"]
runs-on: [windows-latest, macos-latest]

steps:
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
:::{tab-item} pip
:sync: pip

You will need Python 3.10 or later. You can check your version of Python by
You will need Python 3.11 or later. You can check your version of Python by
typing into a terminal:

```sh
Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/saving.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ server dependencies.
:::{tab-item} pip
:sync: pip

You will need Python 3.10 or later. You can check your version of Python by
You will need Python 3.11 or later. You can check your version of Python by
typing into a terminal:

```sh
Expand Down
17 changes: 11 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ description = "Integrations for using Tiled with Bluesky"
readme = { file = "README.md", content-type = "text/markdown" }
license = "BSD-3-Clause"
license-files = ["LICENSE"]
requires-python = ">=3.10"
requires-python = ">=3.11"
classifiers = [
"Development Status :: 1 - Planning",
"Intended Audience :: Science/Research",
Expand All @@ -24,7 +24,6 @@ classifiers = [
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
Expand All @@ -36,13 +35,14 @@ dynamic = ["version"]
dependencies = [
"dask",
"event-model",
"httpx2", # the generation used by the tiled client since 0.2.21
"mongoquery",
"ndindex", # imported by tiled.ndslice
"numpy",
"pandas",
"pyarrow",
"pytz",
"tiled[minimal-client] >=0.2.19",
"tiled[minimal-client] >=0.2.21",
"tzlocal",
"xarray",
]
Expand Down Expand Up @@ -88,7 +88,7 @@ test = [
"redis-json-dict",
"suitcase-mongo",
"tifffile",
"tiled[server] >=0.2.19",
"tiled[server] >=0.2.21",
]
dev = [{ include-group = "test" }]
docs = [
Expand Down Expand Up @@ -133,6 +133,11 @@ filterwarnings = [
# so they remain readable; zarr warns that these dtypes have no stable Zarr V3
# specification yet. This warning is emitted by the (in-process) test server.
"ignore:The data type .* does not have a Zarr V3 specification",
# SQLAlchemy 2.1 deprecates the `noload` loader strategy, which tiled's catalog
# ORM uses for the Webhook.node relationship. Raising this warning as an error
# inside `configure_mappers()` poisons every mapper in the (in-process) test
# server; third-party issue, to be fixed in tiled.
"ignore:The ``noload`` loader strategy is deprecated:DeprecationWarning",
]
log_level = "INFO"
testpaths = ["tests"]
Expand All @@ -144,7 +149,7 @@ report.exclude_also = ['\.\.\.', 'if typing.TYPE_CHECKING:']

[tool.mypy]
files = ["src", "tests"]
python_version = "3.10"
python_version = "3.11"
warn_unused_configs = true
strict = false
enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
Expand Down Expand Up @@ -174,7 +179,7 @@ ignore = [


[tool.pylint]
py-version = "3.10"
py-version = "3.11"
ignore-paths = [".*/_version.py"]
reports.output-format = "colorized"
similarities.ignore-imports = "yes"
Expand Down
6 changes: 3 additions & 3 deletions src/bluesky_tiled_plugins/clients/bluesky_run.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import codecs
import copy
import functools
import httpx
import httpx2
import io
import json
import keyword
Expand Down Expand Up @@ -534,13 +534,13 @@ def validate(
msg = "Remote validation failed: " + "; ".join(notes)
raise ValidationException(msg, self.item["id"])

except httpx.HTTPStatusError as e:
except httpx2.HTTPStatusError as e:
# Backcompatibility: if the server does not support validation endpoint,
# it will return 404 Not Found error; in this case, attempt to validate
# the data structure locally by the client itself (requires multiple
# round-trips to the server, but better than nothing).

if response.status_code == httpx.codes.NOT_FOUND:
if response.status_code == httpx2.codes.NOT_FOUND:
warnings.warn(
"Tiled server does not support remote validation. "
"Attempting to validate the data structure by the client.",
Expand Down
10 changes: 4 additions & 6 deletions src/bluesky_tiled_plugins/writing/tiled_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from typing import Any, Optional, cast
import warnings

import httpx
import httpx2
import numpy
import pyarrow
from event_model import (
Expand Down Expand Up @@ -129,9 +129,7 @@ def concatenate_stream_datums(*docs: StreamDatum):
"All StreamDatum documents must reference the same stream_resource."
)
docs = tuple(sorted(docs, key=lambda doc: doc["indices"]["start"]))
for d1, d2 in zip(
docs[:-1], docs[1:]
): # TODO: use itertools.pairwise(docs) in python 3.10+
for d1, d2 in itertools.pairwise(docs):
if d1["indices"]["stop"] != d2["indices"]["start"]:
raise ValueError("StreamDatum documents must be consecutive.")

Expand Down Expand Up @@ -908,9 +906,9 @@ def _append_with_retry(self, df_client: DataFrameClient, table, desc_name: str):
try:
df_client.append_partition(0, table)
return
except (httpx.TransportError, httpx.HTTPStatusError) as err:
except (httpx2.TransportError, httpx2.HTTPStatusError) as err:
if (
isinstance(err, httpx.HTTPStatusError)
isinstance(err, httpx2.HTTPStatusError)
and err.response.status_code < 500
and err.response.status_code != 429
):
Expand Down
6 changes: 3 additions & 3 deletions tests/test_tiled_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from typing import cast
from urllib.parse import parse_qs, urlparse

import httpx
import httpx2

from bluesky import RunEngine
import bluesky.plan_stubs as bps
Expand Down Expand Up @@ -1013,7 +1013,7 @@ def patched_event(name, doc):
assert lines[6]["name"] == "stop"


class _LoseAppendResponseOnce(httpx.BaseTransport):
class _LoseAppendResponseOnce(httpx2.BaseTransport):
"""Forward the first PATCH /table/partition request to the wrapped transport
-- so the server fully processes the append -- but raise ReadTimeout to the
caller, simulating a lost response for an append that actually succeeded."""
Expand All @@ -1030,7 +1030,7 @@ def handle_request(self, request):
and "/table/partition/" in str(request.url)
):
self.tripped = True
raise httpx.ReadTimeout("Simulated lost response", request=request)
raise httpx2.ReadTimeout("Simulated lost response", request=request)
return response


Expand Down
Loading