Skip to content

Commit 82d5876

Browse files
ImTotemclaude
andcommitted
fix(authz): handle async gRPC UnaryUnaryCall responses
authzed Client returns UnaryUnaryCall futures, not direct responses. Call .result() to resolve the future before accessing attributes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e9e2120 commit 82d5876

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/bcsd_api/authz/client.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,14 @@ def __init__(self, endpoint: str, token: str):
4747
)
4848

4949
def check(self, res_type: str, res_id: str, permission: str, user_id: str) -> bool:
50-
resp = self._client.CheckPermission(
50+
call = self._client.CheckPermission(
5151
CheckPermissionRequest(
5252
resource=_object_ref(res_type, res_id),
5353
permission=permission,
5454
subject=_subject_ref(user_id),
5555
)
5656
)
57+
resp = call.result() if hasattr(call, "result") else call
5758
return resp.permissionship == _HAS
5859

5960
def add_relation(self, res_type: str, res_id: str, relation: str, user_id: str) -> None:
@@ -63,9 +64,13 @@ def remove_relation(self, res_type: str, res_id: str, relation: str, user_id: st
6364
self._write(_DELETE, res_type, res_id, relation, user_id)
6465

6566
def write_schema(self, schema: str) -> None:
66-
self._client.WriteSchema(WriteSchemaRequest(schema=schema))
67+
call = self._client.WriteSchema(WriteSchemaRequest(schema=schema))
68+
if hasattr(call, "result"):
69+
call.result()
6770

6871
def _write(self, operation: int, res_type: str, res_id: str, relation: str, user_id: str) -> None:
69-
self._client.WriteRelationships(
72+
call = self._client.WriteRelationships(
7073
WriteRelationshipsRequest(updates=[_update(operation, res_type, res_id, relation, user_id)])
7174
)
75+
if hasattr(call, "result"):
76+
call.result()

0 commit comments

Comments
 (0)