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
4 changes: 4 additions & 0 deletions src/webpubsub/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
Release History
===============

1.7.2
++++
* Upgrade `vendored_sdks` to ensure the compatibility with Python 3.13

1.7.1
+++++
* Upgrade `websockets` to `13.0.1` to sure the compatibility with Python 3.12
Expand Down
5 changes: 3 additions & 2 deletions src/webpubsub/azext_webpubsub/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import json
import websockets
from .vendored_sdks.azure_messaging_webpubsubservice import (
build_authentication_token
WebPubSubServiceClient
)


Expand Down Expand Up @@ -54,7 +54,8 @@ async def connect(url):
def start_client(client, resource_group_name, webpubsub_name, hub_name, user_id=None):
keys = client.list_keys(resource_group_name, webpubsub_name)
connection_string = keys.primary_connection_string
token = build_authentication_token(connection_string, hub_name, roles=['webpubsub.sendToGroup', 'webpubsub.joinLeaveGroup'], user=user_id)
service_client = WebPubSubServiceClient.from_connection_string(connection_string, hub_name)
token = service_client.get_client_access_token(roles=['webpubsub.sendToGroup', 'webpubsub.joinLeaveGroup'], user=user_id)
asyncio.get_event_loop().run_until_complete(connect(token['url']))


Expand Down
97 changes: 31 additions & 66 deletions src/webpubsub/azext_webpubsub/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,116 +7,81 @@
from .vendored_sdks.azure_messaging_webpubsubservice import (
WebPubSubServiceClient
)
from .vendored_sdks.azure_messaging_webpubsubservice.rest import (
build_send_to_all_request,
build_connection_exists_request,
build_close_client_connection_request,
build_send_to_connection_request,
build_add_connection_to_group_request,
build_remove_connection_from_group_request,
build_send_to_group_request,
build_user_exists_request,
build_send_to_user_request,
build_add_user_to_group_request,
build_remove_user_from_group_request,
build_remove_user_from_all_groups_request,
build_grant_permission_request,
build_check_permission_request,
build_revoke_permission_request
)


def broadcast(client, resource_group_name, webpubsub_name, hub_name, payload):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_send_to_all_request(hub_name, content=payload, content_type='text/plain'))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.send_to_all(message=payload, content_type='text/plain')


def check_connection_exists(client, resource_group_name, webpubsub_name, hub_name, connection_id):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_connection_exists_request(hub_name, connection_id))
return _get_existence_response(res.status_code == 200)
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
return service_client.connection_exists(connection_id)


def close_connection(client, resource_group_name, webpubsub_name, hub_name, connection_id):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_close_client_connection_request(hub_name, connection_id))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.close_connection(connection_id)


def send_connection(client, resource_group_name, webpubsub_name, hub_name, connection_id, payload):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_send_to_connection_request(hub_name, connection_id, content=payload, content_type='text/plain'))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.send_to_connection(connection_id, message=payload, content_type='text/plain')


def add_connection_to_group(client, resource_group_name, webpubsub_name, hub_name, connection_id, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_add_connection_to_group_request(hub_name, group_name, connection_id))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.add_connection_to_group(group_name, connection_id)


def remove_connection_from_group(client, resource_group_name, webpubsub_name, hub_name, connection_id, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_remove_connection_from_group_request(hub_name, group_name, connection_id))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.remove_connection_from_group(group_name, connection_id)


def send_group(client, resource_group_name, webpubsub_name, hub_name, group_name, payload):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_send_to_group_request(hub_name, group_name, content=payload, content_type='text/plain'))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.send_to_group(group_name, payload, content_type='text/plain')


def check_user_exists(client, resource_group_name, webpubsub_name, hub_name, user_id):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_user_exists_request(hub_name, user_id))
return _get_existence_response(res.status_code == 200)
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
return service_client.user_exists(user_id)


def send_user(client, resource_group_name, webpubsub_name, hub_name, user_id, payload):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_send_to_user_request(hub_name, user_id, content=payload, content_type='text/plain'))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.send_to_user(user_id, payload, content_type='text/plain')


def add_user_to_group(client, resource_group_name, webpubsub_name, hub_name, user_id, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_add_user_to_group_request(hub_name, group_name, user_id))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.add_user_to_group(group_name, user_id)


def remove_user_from_group(client, resource_group_name, webpubsub_name, hub_name, user_id, group_name=None):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
if group_name:
res = service_client.send_request(build_remove_user_from_group_request(hub_name, group_name, user_id))
service_client.remove_user_from_group(group_name, user_id)
else:
res = service_client.send_request(build_remove_user_from_all_groups_request(hub_name, user_id))
res.raise_for_status()
service_client.remove_user_from_all_groups(user_id)


def grant_permission(client, resource_group_name, webpubsub_name, hub_name, connection_id, permission, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_grant_permission_request(hub_name, permission, connection_id, target_name=group_name))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.grant_permission(permission, connection_id, target_name=group_name)


def revoke_permission(client, resource_group_name, webpubsub_name, hub_name, connection_id, permission, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_revoke_permission_request(hub_name, permission, connection_id, target_name=group_name))
res.raise_for_status()
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
service_client.revoke_permission(permission, connection_id, target_name=group_name)


def check_permission(client, resource_group_name, webpubsub_name, hub_name, connection_id, permission, group_name):
service_client = _get_service_client(client, resource_group_name, webpubsub_name)
res = service_client.send_request(build_check_permission_request(hub_name, permission, connection_id, target_name=group_name))
return _get_existence_response(res.status_code == 200)
service_client = _get_service_client(client, resource_group_name, webpubsub_name, hub_name)
return service_client.has_permission(permission, connection_id, target_name=group_name)


def _get_service_client(client, resource_group_name, webpubsub_name):
def _get_service_client(client, resource_group_name, webpubsub_name, hub) -> WebPubSubServiceClient:
keys = client.list_keys(resource_group_name, webpubsub_name)
return WebPubSubServiceClient.from_connection_string(keys.primary_connection_string)


def _get_existence_response(success):
return {"existence": success}
return WebPubSubServiceClient.from_connection_string(keys.primary_connection_string, hub)
Loading
Loading