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 cmd/protoc-gen-connect-python/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ func (g *Generator) generate(gen *protogen.GeneratedFile, f *protogen.File) {
p.P(`from connect import (`)
p.P(` Client,`)
p.P(` ClientOptions,`)
p.P(` ConnectOptions,`)
p.P(` HandlerOptions,`)
p.P(` Handler,`)
p.P(` HandlerContext,`)
p.P(` IdempotencyLevel,`)
Expand Down Expand Up @@ -307,7 +307,7 @@ func (g *Generator) generate(gen *protogen.GeneratedFile, f *protogen.File) {
}
p.P()
p.P()
p.P(`def create_`, upperSvcName, `_handlers`, `(`, `service: `, handler, `, options: ConnectOptions | None = None`, `) -> list[Handler]:`)
p.P(`def create_`, upperSvcName, `_handlers`, `(`, `service: `, handler, `, options: HandlerOptions | None = None`, `) -> list[Handler]:`)
p.P(` handlers = [`)
for _, meth := range sortedMap(p.services) {
svc := p.services[meth]
Expand Down Expand Up @@ -339,7 +339,7 @@ func (g *Generator) generate(gen *protogen.GeneratedFile, f *protogen.File) {
p.P(` output=`, svc.output.method, `,`)
if options := meth.Options; options != nil {
if desc, ok := options.(*descriptorpb.MethodOptions); ok && desc.GetIdempotencyLevel() != descriptorpb.MethodOptions_IDEMPOTENCY_UNKNOWN {
p.P(` options=ConnectOptions(idempotency_level=IdempotencyLevel.`, desc.GetIdempotencyLevel().String(), `).merge(options),`)
p.P(` options=HandlerOptions(idempotency_level=IdempotencyLevel.`, desc.GetIdempotencyLevel().String(), `).merge(options),`)
} else {
p.P(` options=options,`)
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/protoc-gen-connect-python/generator/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
// p.P()
// p.P(`from connect.connect import UnaryRequest, UnaryResponse`)
// p.P(`from connect.handler import UnaryHandler`)
// p.P(`from connect.options import ConnectOptions`)
// p.P(`from connect.options import HandlerOptions`)
// p.P(`from google.protobuf.descriptor import MethodDescriptor, ServiceDescriptor`)

// PythonIdent is a Python identifier, consisting of a name and import path.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,22 +1,43 @@
# Generated by the protoc-gen-connect-python. DO NOT EDIT!
# source: connectrpc/conformance/v1/conformancev1connect/service.proto
# Protobuf Python Version: (unknown)
# protoc-gen-connect-python version: v0.0.0-20250225131640-797060f503da+dirty
# protoc-gen-connect-python version: v0.0.0-20250710124620-c0c8871def6b+dirty
"""Generated connect code."""

import abc
from enum import Enum

from connect.client import Client
import connect.connect
from connect.handler import ClientStreamHandler, Handler, ServerStreamHandler, UnaryHandler, BidiStreamHandler
from connect.handler_context import HandlerContext
from connect.options import ClientOptions, ConnectOptions
from connect import (
Client,
ClientOptions,
HandlerOptions,
Handler,
HandlerContext,
IdempotencyLevel,
StreamRequest,
StreamResponse,
)
from connect import UnaryRequest as ConnectUnaryRequest
from connect import UnaryResponse as ConnectUnaryResponse
from connect.connection_pool import AsyncConnectionPool
from connect.handler import BidiStreamHandler, ClientStreamHandler, ServerStreamHandler, UnaryHandler
from google.protobuf.descriptor import MethodDescriptor, ServiceDescriptor
from connect.idempotency_level import IdempotencyLevel

from .. import service_pb2
from ..service_pb2 import UnaryRequest, UnaryResponse, ServerStreamRequest, ServerStreamResponse, ClientStreamRequest, ClientStreamResponse, BidiStreamRequest, BidiStreamResponse, UnimplementedRequest, UnimplementedResponse, IdempotentUnaryRequest, IdempotentUnaryResponse
from ..service_pb2 import (
UnaryRequest,
UnaryResponse,
ServerStreamRequest,
ServerStreamResponse,
ClientStreamRequest,
ClientStreamResponse,
BidiStreamRequest,
BidiStreamResponse,
UnimplementedRequest,
UnimplementedResponse,
IdempotentUnaryRequest,
IdempotentUnaryResponse,
)


class ConformanceServiceProcedures(Enum):
Expand Down Expand Up @@ -60,33 +81,33 @@ def __init__(self, base_url: str, pool: AsyncConnectionPool, options: ClientOpti
pool, base_url + ConformanceServiceProcedures.Unimplemented.value, UnimplementedRequest, UnimplementedResponse, options
).call_unary
self.IdempotentUnary = Client[IdempotentUnaryRequest, IdempotentUnaryResponse](
pool, base_url + ConformanceServiceProcedures.IdempotentUnary.value, IdempotentUnaryRequest, IdempotentUnaryResponse, ClientOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, enable_get=True).merge(options),
pool, base_url + ConformanceServiceProcedures.IdempotentUnary.value, IdempotentUnaryRequest, IdempotentUnaryResponse, ClientOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS, enable_get=True).merge(options)
).call_unary


class ConformanceServiceHandler:
class ConformanceServiceHandler(metaclass=abc.ABCMeta):
"""Handler for the conformanceService service."""

async def Unary(self, request: connect.connect.UnaryRequest[UnaryRequest], context: HandlerContext) -> connect.connect.UnaryResponse[UnaryResponse]:
async def Unary(self, request: ConnectUnaryRequest[UnaryRequest], context: HandlerContext) -> ConnectUnaryResponse[UnaryResponse]:
raise NotImplementedError()

async def ServerStream(self, request: connect.connect.StreamRequest[ServerStreamRequest], context: HandlerContext) -> connect.connect.StreamResponse[ServerStreamResponse]:
async def ServerStream(self, request: StreamRequest[ServerStreamRequest], context: HandlerContext) -> StreamResponse[ServerStreamResponse]:
raise NotImplementedError()

async def ClientStream(self, request: connect.connect.StreamRequest[ClientStreamRequest], context: HandlerContext) -> connect.connect.StreamResponse[ClientStreamResponse]:
async def ClientStream(self, request: StreamRequest[ClientStreamRequest], context: HandlerContext) -> StreamResponse[ClientStreamResponse]:
raise NotImplementedError()

async def BidiStream(self, request: connect.connect.StreamRequest[BidiStreamRequest], context: HandlerContext) -> connect.connect.StreamResponse[BidiStreamResponse]:
async def BidiStream(self, request: StreamRequest[BidiStreamRequest], context: HandlerContext) -> StreamResponse[BidiStreamResponse]:
raise NotImplementedError()

async def Unimplemented(self, request: connect.connect.UnaryRequest[UnimplementedRequest], context: HandlerContext) -> connect.connect.UnaryResponse[UnimplementedResponse]:
async def Unimplemented(self, request: ConnectUnaryRequest[UnimplementedRequest], context: HandlerContext) -> ConnectUnaryResponse[UnimplementedResponse]:
raise NotImplementedError()

async def IdempotentUnary(self, request: connect.connect.UnaryRequest[IdempotentUnaryRequest], context: HandlerContext) -> connect.connect.UnaryResponse[IdempotentUnaryResponse]:
async def IdempotentUnary(self, request: ConnectUnaryRequest[IdempotentUnaryRequest], context: HandlerContext) -> ConnectUnaryResponse[IdempotentUnaryResponse]:
raise NotImplementedError()


def create_ConformanceService_handlers(service: ConformanceServiceHandler, options: ConnectOptions | None = None) -> list[Handler]:
def create_ConformanceService_handlers(service: ConformanceServiceHandler, options: HandlerOptions | None = None) -> list[Handler]:
handlers = [
UnaryHandler(
procedure=ConformanceServiceProcedures.Unary.value,
Expand Down Expand Up @@ -128,7 +149,7 @@ def create_ConformanceService_handlers(service: ConformanceServiceHandler, optio
unary=service.IdempotentUnary,
input=IdempotentUnaryRequest,
output=IdempotentUnaryResponse,
options=ConnectOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
options=HandlerOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
),
]
return handlers
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Generated by the protoc-gen-connect-python. DO NOT EDIT!
# source: examples/proto/connectrpc/eliza/v1/v1connect/eliza.proto
# Protobuf Python Version: v5.29.3
# protoc-gen-connect-python version: v0.0.0-20250708090951-d93686e5039f
# protoc-gen-connect-python version: v0.0.0-20250710124620-c0c8871def6b+dirty
"""Generated connect code."""

import abc
Expand All @@ -10,7 +10,7 @@
from connect import (
Client,
ClientOptions,
ConnectOptions,
HandlerOptions,
Handler,
HandlerContext,
IdempotencyLevel,
Expand Down Expand Up @@ -87,14 +87,14 @@ async def Reflect(self, request: StreamRequest[ReflectRequest], context: Handler
raise NotImplementedError()


def create_ElizaService_handlers(service: ElizaServiceHandler, options: ConnectOptions | None = None) -> list[Handler]:
def create_ElizaService_handlers(service: ElizaServiceHandler, options: HandlerOptions | None = None) -> list[Handler]:
handlers = [
UnaryHandler(
procedure=ElizaServiceProcedures.Say.value,
unary=service.Say,
input=SayRequest,
output=SayResponse,
options=ConnectOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
options=HandlerOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
),
BidiStreamHandler(
procedure=ElizaServiceProcedures.Converse.value,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
from connect import (
Client,
ClientOptions,
ConnectOptions,
Handler,
HandlerContext,
HandlerOptions,
IdempotencyLevel,
StreamRequest,
StreamResponse,
Expand Down Expand Up @@ -93,14 +93,14 @@ async def Reflect(
raise NotImplementedError()


def create_ElizaService_handlers(service: ElizaServiceHandler, options: ConnectOptions | None = None) -> list[Handler]:
def create_ElizaService_handlers(service: ElizaServiceHandler, options: HandlerOptions | None = None) -> list[Handler]:
handlers = [
UnaryHandler(
procedure=ElizaServiceProcedures.Say.value,
unary=service.Say,
input=SayRequest,
output=SayResponse,
options=ConnectOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
options=HandlerOptions(idempotency_level=IdempotencyLevel.NO_SIDE_EFFECTS).merge(options),
),
BidiStreamHandler(
procedure=ElizaServiceProcedures.Converse.value,
Expand Down
4 changes: 2 additions & 2 deletions src/connect/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
from connect.headers import Headers
from connect.idempotency_level import IdempotencyLevel
from connect.middleware import ConnectMiddleware
from connect.options import ClientOptions, ConnectOptions
from connect.options import ClientOptions, HandlerOptions
from connect.protocol import Protocol
from connect.request import Request
from connect.response import Response as HTTPResponse
Expand All @@ -43,7 +43,7 @@
"Compression",
"ConnectError",
"ConnectMiddleware",
"ConnectOptions",
"HandlerOptions",
"GZipCompression",
"Handler",
"HandlerContext",
Expand Down
9 changes: 7 additions & 2 deletions src/connect/call_options.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
"""Options and configuration for making calls, including timeout and abort event support."""
"""Call options configuration models."""

import asyncio

from pydantic import BaseModel, ConfigDict, Field


class CallOptions(BaseModel):
"""Options for configuring a call, such as timeout and abort event."""
"""Options for configuring a call.

Attributes:
timeout (float | None): Timeout for the call in seconds. If None, no timeout is applied.
abort_event (asyncio.Event | None): Event to abort the call. If set, the call can be cancelled by setting this event.
"""

model_config = ConfigDict(arbitrary_types_allowed=True)

Expand Down
Loading
Loading