"""Lightweight metadata for canonical service-manager methods."""from__future__importannotationsfromdataclassesimportdataclass,replacefromenumimportEnumfromtypingimportAny,Callable,TypeVar,cast
[docs]classServiceAccess(str,Enum):"""Access classes for public service methods."""PUBLIC="public"CLIENT="client"DEV="dev"
[docs]classServiceContext(str,Enum):"""Context requirements for service methods."""NONE="none"USER="user"LEDGER="ledger"SESSION="session"WORLD="world"
[docs]classServiceWriteback(str,Enum):"""Writeback policy for direct service-manager methods."""NONE="none"USER="user"LEDGER="ledger"SESSION="session"EXPLICIT="explicit"
[docs]classBlockingMode(str,Enum):"""Execution blocking classification for wrappers and transports."""SYNC="sync"MAY_BLOCK="may_block"
[docs]@dataclass(frozen=True)classServiceMethodSpec:"""Metadata attached to one canonical service-manager method."""name:straccess:ServiceAccesscontext:ServiceContextwriteback:ServiceWritebackblocking:BlockingModecapability:str|None=Noneoperation_id:str|None=None
[docs]defwith_name(self,name:str)->"ServiceMethodSpec":"""Return a copy with the resolved method name."""returnreplace(self,name=name)
[docs]defservice_method(*,access:ServiceAccess,context:ServiceContext,writeback:ServiceWriteback,blocking:BlockingMode=BlockingMode.SYNC,capability:str|None=None,operation_id:str|None=None,)->Callable[[ServiceCallable],ServiceCallable]:"""Attach bounded metadata to a canonical service-manager method."""defdecorator(func:ServiceCallable)->ServiceCallable:spec=ServiceMethodSpec(name=func.__name__,access=access,context=context,writeback=writeback,blocking=blocking,capability=capability,operation_id=operation_id,)setattr(func,"_service_method_spec",spec)returnfuncreturndecorator
defget_service_method_spec(func:Callable[...,Any])->ServiceMethodSpec|None:"""Return attached service-method metadata when present."""spec=getattr(func,"_service_method_spec",None)ifisinstance(spec,ServiceMethodSpec):returncast(ServiceMethodSpec,spec)returnNone__all__=["BlockingMode","ServiceAccess","ServiceContext","ServiceMethodSpec","ServiceWriteback","get_service_method_spec","service_method",]