Skip to content

Commit 361e746

Browse files
Use lowest-direct resolution by default
Trying to keep our production dependencies as wide as is reasonable, but fine to pin our development dependencies tight. Dropped the gencode down to the plugin version that works with protobuf==5 (from protovalidate-python). Worked around a couple of minor issues. Fixes #13. Signed-off-by: Stefan VanBuren <svanburen@buf.build>
1 parent 330263d commit 361e746

24 files changed

+428
-495
lines changed

.github/workflows/ci.yaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
runs-on: ${{ matrix.os }}
2222
strategy:
2323
matrix:
24+
resolution: ["highest", "lowest-direct"]
2425
os:
2526
- macos-15
2627
- ubuntu-24.04
@@ -36,16 +37,23 @@ jobs:
3637
- os: ubuntu-24.04
3738
python: "3.11"
3839
coverage: "nocov"
40+
resolution: "lowest-direct"
3941
- os: ubuntu-24.04
4042
python: "3.12"
4143
coverage: "nocov"
44+
resolution: "lowest-direct"
4245
# Enable coverage on just one job
4346
- os: ubuntu-24.04
4447
python: "3.13"
4548
coverage: "cov"
49+
resolution: "lowest-direct"
4650
- os: ubuntu-24.04
4751
python: "3.14.0-rc.2"
4852
coverage: "nocov"
53+
resolution: "lowest-direct"
54+
env:
55+
# Shared env variables for all the tests
56+
UV_RESOLUTION: '${{ matrix.resolution }}'
4957

5058
steps:
5159
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
@@ -89,7 +97,8 @@ jobs:
8997

9098
- name: check running `just generate` does not create a diff
9199
# NOTE: running on macOS as our sed command only works there
92-
if: startsWith(matrix.os, 'macos-')
100+
# We expect uv.lock to change when matrix.resolution == "highest", so we don't check it there.
101+
if: ${{ startsWith(matrix.os, 'macos-') && matrix.resolution == 'lowest-direct' }}
93102
run: uv run just checkgenerate
94103

95104
- uses: codecov/codecov-action@v5

conformance/buf.gen.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ version: v2
22
inputs:
33
- module: buf.build/connectrpc/conformance:v1.0.4
44
plugins:
5-
- remote: buf.build/protocolbuffers/python:v32.0
5+
# NOTE: v26.0 is the earliest version supporting protobuf==5.
6+
- remote: buf.build/protocolbuffers/python:v26.0
67
out: test/gen
7-
- remote: buf.build/protocolbuffers/pyi:v32.0
8+
- remote: buf.build/protocolbuffers/pyi:v26.0
89
out: test/gen
910
- local:
1011
- go

conformance/pyproject.toml

Lines changed: 0 additions & 17 deletions
This file was deleted.

conformance/test/client.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010

1111
import httpx
1212
from _util import create_standard_streams
13-
from connectrpc.client import ResponseMetadata
14-
from connectrpc.code import Code
15-
from connectrpc.errors import ConnectError
16-
from connectrpc.request import Headers
1713
from gen.connectrpc.conformance.v1.client_compat_pb2 import (
1814
ClientCompatRequest,
1915
ClientCompatResponse,
@@ -33,9 +29,14 @@
3329
UnaryRequest,
3430
UnimplementedRequest,
3531
)
36-
from google.protobuf.any import Any
32+
from google.protobuf.any_pb2 import Any
3733
from google.protobuf.message import Message
3834

35+
from connectrpc.client import ResponseMetadata
36+
from connectrpc.code import Code
37+
from connectrpc.errors import ConnectError
38+
from connectrpc.request import Headers
39+
3940

4041
def _convert_code(error: Code) -> ConformanceCode:
4142
match error:

conformance/test/gen/connectrpc/conformance/v1/client_compat_pb2.py

Lines changed: 1 addition & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conformance/test/gen/connectrpc/conformance/v1/client_compat_pb2.pyi

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ from google.protobuf import struct_pb2 as _struct_pb2
66
from google.protobuf.internal import containers as _containers
77
from google.protobuf import descriptor as _descriptor
88
from google.protobuf import message as _message
9-
from collections.abc import Iterable as _Iterable, Mapping as _Mapping
10-
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
9+
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
1110

1211
DESCRIPTOR: _descriptor.FileDescriptor
1312

@@ -62,7 +61,7 @@ class ClientCompatRequest(_message.Message):
6261
request_delay_ms: int
6362
cancel: ClientCompatRequest.Cancel
6463
raw_request: _service_pb2.RawHTTPRequest
65-
def __init__(self, test_name: _Optional[str] = ..., http_version: _Optional[_Union[_config_pb2.HTTPVersion, str]] = ..., protocol: _Optional[_Union[_config_pb2.Protocol, str]] = ..., codec: _Optional[_Union[_config_pb2.Codec, str]] = ..., compression: _Optional[_Union[_config_pb2.Compression, str]] = ..., host: _Optional[str] = ..., port: _Optional[int] = ..., server_tls_cert: _Optional[bytes] = ..., client_tls_creds: _Optional[_Union[_config_pb2.TLSCreds, _Mapping]] = ..., message_receive_limit: _Optional[int] = ..., service: _Optional[str] = ..., method: _Optional[str] = ..., stream_type: _Optional[_Union[_config_pb2.StreamType, str]] = ..., use_get_http_method: _Optional[bool] = ..., request_headers: _Optional[_Iterable[_Union[_service_pb2.Header, _Mapping]]] = ..., request_messages: _Optional[_Iterable[_Union[_any_pb2.Any, _Mapping]]] = ..., timeout_ms: _Optional[int] = ..., request_delay_ms: _Optional[int] = ..., cancel: _Optional[_Union[ClientCompatRequest.Cancel, _Mapping]] = ..., raw_request: _Optional[_Union[_service_pb2.RawHTTPRequest, _Mapping]] = ...) -> None: ...
64+
def __init__(self, test_name: _Optional[str] = ..., http_version: _Optional[_Union[_config_pb2.HTTPVersion, str]] = ..., protocol: _Optional[_Union[_config_pb2.Protocol, str]] = ..., codec: _Optional[_Union[_config_pb2.Codec, str]] = ..., compression: _Optional[_Union[_config_pb2.Compression, str]] = ..., host: _Optional[str] = ..., port: _Optional[int] = ..., server_tls_cert: _Optional[bytes] = ..., client_tls_creds: _Optional[_Union[_config_pb2.TLSCreds, _Mapping]] = ..., message_receive_limit: _Optional[int] = ..., service: _Optional[str] = ..., method: _Optional[str] = ..., stream_type: _Optional[_Union[_config_pb2.StreamType, str]] = ..., use_get_http_method: bool = ..., request_headers: _Optional[_Iterable[_Union[_service_pb2.Header, _Mapping]]] = ..., request_messages: _Optional[_Iterable[_Union[_any_pb2.Any, _Mapping]]] = ..., timeout_ms: _Optional[int] = ..., request_delay_ms: _Optional[int] = ..., cancel: _Optional[_Union[ClientCompatRequest.Cancel, _Mapping]] = ..., raw_request: _Optional[_Union[_service_pb2.RawHTTPRequest, _Mapping]] = ...) -> None: ...
6665

6766
class ClientCompatResponse(_message.Message):
6867
__slots__ = ("test_name", "response", "error")

conformance/test/gen/connectrpc/conformance/v1/config_pb2.py

Lines changed: 1 addition & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conformance/test/gen/connectrpc/conformance/v1/config_pb2.pyi

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ from google.protobuf.internal import containers as _containers
22
from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
33
from google.protobuf import descriptor as _descriptor
44
from google.protobuf import message as _message
5-
from collections.abc import Iterable as _Iterable, Mapping as _Mapping
6-
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
5+
from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
76

87
DESCRIPTOR: _descriptor.FileDescriptor
98

@@ -145,7 +144,7 @@ class Features(_message.Message):
145144
supports_half_duplex_bidi_over_http1: bool
146145
supports_connect_get: bool
147146
supports_message_receive_limit: bool
148-
def __init__(self, versions: _Optional[_Iterable[_Union[HTTPVersion, str]]] = ..., protocols: _Optional[_Iterable[_Union[Protocol, str]]] = ..., codecs: _Optional[_Iterable[_Union[Codec, str]]] = ..., compressions: _Optional[_Iterable[_Union[Compression, str]]] = ..., stream_types: _Optional[_Iterable[_Union[StreamType, str]]] = ..., supports_h2c: _Optional[bool] = ..., supports_tls: _Optional[bool] = ..., supports_tls_client_certs: _Optional[bool] = ..., supports_trailers: _Optional[bool] = ..., supports_half_duplex_bidi_over_http1: _Optional[bool] = ..., supports_connect_get: _Optional[bool] = ..., supports_message_receive_limit: _Optional[bool] = ...) -> None: ...
147+
def __init__(self, versions: _Optional[_Iterable[_Union[HTTPVersion, str]]] = ..., protocols: _Optional[_Iterable[_Union[Protocol, str]]] = ..., codecs: _Optional[_Iterable[_Union[Codec, str]]] = ..., compressions: _Optional[_Iterable[_Union[Compression, str]]] = ..., stream_types: _Optional[_Iterable[_Union[StreamType, str]]] = ..., supports_h2c: bool = ..., supports_tls: bool = ..., supports_tls_client_certs: bool = ..., supports_trailers: bool = ..., supports_half_duplex_bidi_over_http1: bool = ..., supports_connect_get: bool = ..., supports_message_receive_limit: bool = ...) -> None: ...
149148

150149
class ConfigCase(_message.Message):
151150
__slots__ = ("version", "protocol", "codec", "compression", "stream_type", "use_tls", "use_tls_client_certs", "use_message_receive_limit")
@@ -165,7 +164,7 @@ class ConfigCase(_message.Message):
165164
use_tls: bool
166165
use_tls_client_certs: bool
167166
use_message_receive_limit: bool
168-
def __init__(self, version: _Optional[_Union[HTTPVersion, str]] = ..., protocol: _Optional[_Union[Protocol, str]] = ..., codec: _Optional[_Union[Codec, str]] = ..., compression: _Optional[_Union[Compression, str]] = ..., stream_type: _Optional[_Union[StreamType, str]] = ..., use_tls: _Optional[bool] = ..., use_tls_client_certs: _Optional[bool] = ..., use_message_receive_limit: _Optional[bool] = ...) -> None: ...
167+
def __init__(self, version: _Optional[_Union[HTTPVersion, str]] = ..., protocol: _Optional[_Union[Protocol, str]] = ..., codec: _Optional[_Union[Codec, str]] = ..., compression: _Optional[_Union[Compression, str]] = ..., stream_type: _Optional[_Union[StreamType, str]] = ..., use_tls: bool = ..., use_tls_client_certs: bool = ..., use_message_receive_limit: bool = ...) -> None: ...
169168

170169
class TLSCreds(_message.Message):
171170
__slots__ = ("cert", "key")

conformance/test/gen/connectrpc/conformance/v1/server_compat_pb2.py

Lines changed: 1 addition & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conformance/test/gen/connectrpc/conformance/v1/server_compat_pb2.pyi

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from gen.connectrpc.conformance.v1 import config_pb2 as _config_pb2
22
from google.protobuf import descriptor as _descriptor
33
from google.protobuf import message as _message
4-
from collections.abc import Mapping as _Mapping
5-
from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
4+
from typing import ClassVar as _ClassVar, Mapping as _Mapping, Optional as _Optional, Union as _Union
65

76
DESCRIPTOR: _descriptor.FileDescriptor
87

@@ -20,7 +19,7 @@ class ServerCompatRequest(_message.Message):
2019
client_tls_cert: bytes
2120
message_receive_limit: int
2221
server_creds: _config_pb2.TLSCreds
23-
def __init__(self, protocol: _Optional[_Union[_config_pb2.Protocol, str]] = ..., http_version: _Optional[_Union[_config_pb2.HTTPVersion, str]] = ..., use_tls: _Optional[bool] = ..., client_tls_cert: _Optional[bytes] = ..., message_receive_limit: _Optional[int] = ..., server_creds: _Optional[_Union[_config_pb2.TLSCreds, _Mapping]] = ...) -> None: ...
22+
def __init__(self, protocol: _Optional[_Union[_config_pb2.Protocol, str]] = ..., http_version: _Optional[_Union[_config_pb2.HTTPVersion, str]] = ..., use_tls: bool = ..., client_tls_cert: _Optional[bytes] = ..., message_receive_limit: _Optional[int] = ..., server_creds: _Optional[_Union[_config_pb2.TLSCreds, _Mapping]] = ...) -> None: ...
2423

2524
class ServerCompatResponse(_message.Message):
2625
__slots__ = ("host", "port", "pem_cert")

0 commit comments

Comments
 (0)