From 81e30d707f6653f78d1ee3b5b167e4d0d33eaf09 Mon Sep 17 00:00:00 2001 From: Alexander Emelin Date: Sat, 10 Feb 2024 19:55:16 +0200 Subject: [PATCH] regenerate proto, add workflows --- .github/workflows/release.yml | 33 +++++ .github/workflows/test.yml | 47 +++++++ .../centrifugal/centrifugo/api/__init__.py | 117 +++++++++++------- 3 files changed, 150 insertions(+), 47 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..e1bbc4d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +name: Release to PyPI + +on: + push: + tags: + - '*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + + - name: check GITHUB_REF matches package version + uses: samuelcolvin/check-python-version@v4.1 + with: + version_file_path: centrifuge/__meta__.py + + - name: Install build dependencies + run: pip install build + + - name: Build distribution + run: python -m build + + - name: Publish package to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + password: ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..d9ee148 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,47 @@ +name: Test + +on: [ push, pull_request ] + +jobs: + build: + # Prevent duplicate builds on internal PRs. + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + + strategy: + matrix: + os: + - ubuntu-latest + python-version: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + + runs-on: ${{ matrix.os }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} on ${{ matrix.os }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + + - name: Setup docker + if: matrix.os == 'macos-latest' + uses: crazy-max/ghaction-setup-docker@v3 + + - name: Start Centrifugo + run: docker run -d -p 8000:8000 -e CENTRIFUGO_API_KEY=api_key -e CENTRIFUGO_HISTORY_TTL=300s -e CENTRIFUGO_HISTORY_SIZE=100 -e CENTRIFUGO_PRESENCE=true -e CENTRIFUGO_GRPC_API=true centrifugo/centrifugo:v5 centrifugo + + - name: Install dependencies + run: | + make dev + + - name: Run tests + run: | + make test + + - name: Run linter + run: | + make lint-ci diff --git a/cent/proto/centrifugal/centrifugo/api/__init__.py b/cent/proto/centrifugal/centrifugo/api/__init__.py index 8563ec3..ad4e3ee 100644 --- a/cent/proto/centrifugal/centrifugo/api/__init__.py +++ b/cent/proto/centrifugal/centrifugo/api/__init__.py @@ -1,5 +1,5 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! -# sources: cent/protos/apiproto.proto +# sources: cent/proto/apiproto.proto # plugin: python-betterproto # This file has been @generated @@ -14,10 +14,10 @@ import betterproto import grpclib from betterproto.grpc.grpclib_server import ServiceBase -import grpclib.server if TYPE_CHECKING: + import grpclib.server from betterproto.grpc.grpclib_client import MetadataLike from grpclib.metadata import Deadline @@ -83,7 +83,9 @@ class Command(betterproto.Message): block_user: "BlockUserRequest" = betterproto.message_field(21) unblock_user: "UnblockUserRequest" = betterproto.message_field(22) revoke_token: "RevokeTokenRequest" = betterproto.message_field(23) - invalidate_user_tokens: "InvalidateUserTokensRequest" = betterproto.message_field(24) + invalidate_user_tokens: "InvalidateUserTokensRequest" = betterproto.message_field( + 24 + ) device_register: "DeviceRegisterRequest" = betterproto.message_field(25) device_update: "DeviceUpdateRequest" = betterproto.message_field(26) device_remove: "DeviceRemoveRequest" = betterproto.message_field(27) @@ -92,7 +94,9 @@ class Command(betterproto.Message): device_topic_update: "DeviceTopicUpdateRequest" = betterproto.message_field(30) user_topic_list: "UserTopicListRequest" = betterproto.message_field(31) user_topic_update: "UserTopicUpdateRequest" = betterproto.message_field(32) - send_push_notification: "SendPushNotificationRequest" = betterproto.message_field(33) + send_push_notification: "SendPushNotificationRequest" = betterproto.message_field( + 33 + ) update_push_status: "UpdatePushStatusRequest" = betterproto.message_field(34) cancel_push: "CancelPushRequest" = betterproto.message_field(35) rate_limit: "RateLimitRequest" = betterproto.message_field(50) @@ -1032,7 +1036,7 @@ async def batch( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "BatchResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Batch", @@ -1049,7 +1053,7 @@ async def publish( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "PublishResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Publish", @@ -1066,7 +1070,7 @@ async def broadcast( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "BroadcastResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Broadcast", @@ -1083,7 +1087,7 @@ async def subscribe( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "SubscribeResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Subscribe", @@ -1100,7 +1104,7 @@ async def unsubscribe( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UnsubscribeResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Unsubscribe", @@ -1117,7 +1121,7 @@ async def disconnect( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DisconnectResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Disconnect", @@ -1134,7 +1138,7 @@ async def presence( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "PresenceResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Presence", @@ -1151,7 +1155,7 @@ async def presence_stats( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "PresenceStatsResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/PresenceStats", @@ -1168,7 +1172,7 @@ async def history( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "HistoryResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/History", @@ -1185,7 +1189,7 @@ async def history_remove( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "HistoryRemoveResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/HistoryRemove", @@ -1202,7 +1206,7 @@ async def info( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "InfoResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Info", @@ -1219,7 +1223,7 @@ async def rpc( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "RpcResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/RPC", @@ -1236,7 +1240,7 @@ async def refresh( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "RefreshResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Refresh", @@ -1253,7 +1257,7 @@ async def channels( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "ChannelsResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Channels", @@ -1270,7 +1274,7 @@ async def connections( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "ConnectionsResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/Connections", @@ -1287,7 +1291,7 @@ async def update_user_status( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UpdateUserStatusResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/UpdateUserStatus", @@ -1304,7 +1308,7 @@ async def get_user_status( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "GetUserStatusResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/GetUserStatus", @@ -1321,7 +1325,7 @@ async def delete_user_status( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeleteUserStatusResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeleteUserStatus", @@ -1338,7 +1342,7 @@ async def block_user( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "BlockUserResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/BlockUser", @@ -1355,7 +1359,7 @@ async def unblock_user( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UnblockUserResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/UnblockUser", @@ -1372,7 +1376,7 @@ async def revoke_token( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "RevokeTokenResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/RevokeToken", @@ -1389,7 +1393,7 @@ async def invalidate_user_tokens( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "InvalidateUserTokensResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/InvalidateUserTokens", @@ -1406,7 +1410,7 @@ async def device_register( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceRegisterResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceRegister", @@ -1423,7 +1427,7 @@ async def device_update( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceUpdateResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceUpdate", @@ -1440,7 +1444,7 @@ async def device_remove( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceRemoveResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceRemove", @@ -1457,7 +1461,7 @@ async def device_list( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceListResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceList", @@ -1474,7 +1478,7 @@ async def device_topic_list( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceTopicListResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceTopicList", @@ -1491,7 +1495,7 @@ async def device_topic_update( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "DeviceTopicUpdateResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/DeviceTopicUpdate", @@ -1508,7 +1512,7 @@ async def user_topic_list( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UserTopicListResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/UserTopicList", @@ -1525,7 +1529,7 @@ async def user_topic_update( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UserTopicUpdateResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/UserTopicUpdate", @@ -1542,7 +1546,7 @@ async def send_push_notification( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "SendPushNotificationResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/SendPushNotification", @@ -1559,7 +1563,7 @@ async def update_push_status( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "UpdatePushStatusResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/UpdatePushStatus", @@ -1576,7 +1580,7 @@ async def cancel_push( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "CancelPushResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/CancelPush", @@ -1593,7 +1597,7 @@ async def rate_limit( *, timeout: Optional[float] = None, deadline: Optional["Deadline"] = None, - metadata: Optional["MetadataLike"] = None, + metadata: Optional["MetadataLike"] = None ) -> "RateLimitResponse": return await self._unary_unary( "/centrifugal.centrifugo.api.CentrifugoApi/RateLimit", @@ -1606,16 +1610,21 @@ async def rate_limit( class CentrifugoApiBase(ServiceBase): + async def batch(self, batch_request: "BatchRequest") -> "BatchResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def publish(self, publish_request: "PublishRequest") -> "PublishResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def broadcast(self, broadcast_request: "BroadcastRequest") -> "BroadcastResponse": + async def broadcast( + self, broadcast_request: "BroadcastRequest" + ) -> "BroadcastResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def subscribe(self, subscribe_request: "SubscribeRequest") -> "SubscribeResponse": + async def subscribe( + self, subscribe_request: "SubscribeRequest" + ) -> "SubscribeResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def unsubscribe( @@ -1623,7 +1632,9 @@ async def unsubscribe( ) -> "UnsubscribeResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def disconnect(self, disconnect_request: "DisconnectRequest") -> "DisconnectResponse": + async def disconnect( + self, disconnect_request: "DisconnectRequest" + ) -> "DisconnectResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def presence(self, presence_request: "PresenceRequest") -> "PresenceResponse": @@ -1674,7 +1685,9 @@ async def delete_user_status( ) -> "DeleteUserStatusResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def block_user(self, block_user_request: "BlockUserRequest") -> "BlockUserResponse": + async def block_user( + self, block_user_request: "BlockUserRequest" + ) -> "BlockUserResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def unblock_user( @@ -1707,7 +1720,9 @@ async def device_remove( ) -> "DeviceRemoveResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def device_list(self, device_list_request: "DeviceListRequest") -> "DeviceListResponse": + async def device_list( + self, device_list_request: "DeviceListRequest" + ) -> "DeviceListResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def device_topic_list( @@ -1740,10 +1755,14 @@ async def update_push_status( ) -> "UpdatePushStatusResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def cancel_push(self, cancel_push_request: "CancelPushRequest") -> "CancelPushResponse": + async def cancel_push( + self, cancel_push_request: "CancelPushRequest" + ) -> "CancelPushResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) - async def rate_limit(self, rate_limit_request: "RateLimitRequest") -> "RateLimitResponse": + async def rate_limit( + self, rate_limit_request: "RateLimitRequest" + ) -> "RateLimitResponse": raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED) async def __rpc_batch( @@ -1818,12 +1837,16 @@ async def __rpc_history_remove( response = await self.history_remove(request) await stream.send_message(response) - async def __rpc_info(self, stream: "grpclib.server.Stream[InfoRequest, InfoResponse]") -> None: + async def __rpc_info( + self, stream: "grpclib.server.Stream[InfoRequest, InfoResponse]" + ) -> None: request = await stream.recv_message() response = await self.info(request) await stream.send_message(response) - async def __rpc_rpc(self, stream: "grpclib.server.Stream[RpcRequest, RpcResponse]") -> None: + async def __rpc_rpc( + self, stream: "grpclib.server.Stream[RpcRequest, RpcResponse]" + ) -> None: request = await stream.recv_message() response = await self.rpc(request) await stream.send_message(response)