Skip to content

Commit 092f393

Browse files
seba-alnclient-engineering-bot
andauthored
Fix bug in membership API (#133)
* fix bug in membership api * fix flake problems * PubNub SDK v6.5.1 release. Co-authored-by: Client Engineering Bot <[email protected]>
1 parent 1636a7b commit 092f393

File tree

15 files changed

+88
-47
lines changed

15 files changed

+88
-47
lines changed

.pubnub.yml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: python
2-
version: 6.5.0
2+
version: 6.5.1
33
schema: 1
44
scm: github.com/pubnub/python
55
sdks:
@@ -18,7 +18,7 @@ sdks:
1818
distributions:
1919
- distribution-type: library
2020
distribution-repository: package
21-
package-name: pubnub-6.5.0
21+
package-name: pubnub-6.5.1
2222
location: https://pypi.org/project/pubnub/
2323
supported-platforms:
2424
supported-operating-systems:
@@ -97,8 +97,8 @@ sdks:
9797
-
9898
distribution-type: library
9999
distribution-repository: git release
100-
package-name: pubnub-6.5.0
101-
location: https://github.com/pubnub/python/releases/download/v6.5.0/pubnub-6.5.0.tar.gz
100+
package-name: pubnub-6.5.1
101+
location: https://github.com/pubnub/python/releases/download/v6.5.1/pubnub-6.5.1.tar.gz
102102
supported-platforms:
103103
supported-operating-systems:
104104
Linux:
@@ -169,6 +169,11 @@ sdks:
169169
license-url: https://github.com/aio-libs/aiohttp/blob/master/LICENSE.txt
170170
is-required: Required
171171
changelog:
172+
- date: 2022-08-02
173+
version: v6.5.1
174+
changes:
175+
- type: bug
176+
text: "Fix bugs in Spaces Membership endpoints."
172177
- date: 2022-07-27
173178
version: v6.5.0
174179
changes:

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## v6.5.1
2+
August 02 2022
3+
4+
#### Fixed
5+
- Fix bugs in Spaces Membership endpoints.
6+
17
## v6.5.0
28
July 27 2022
39

examples/entities.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@
1515
pnconfig.non_subscribe_request_timeout = 60
1616
pnconfig.connect_timeout = 14
1717
pnconfig.reconnect_policy
18-
print(pnconfig.subscribe_key)
1918

2019
pubnub = PubNub(pnconfig)
2120

2221
space_id = 'blah'
2322
user_id = 'jason-id'
23+
user_id_2 = 'freddy-id'
2424

2525
create_space = pubnub.create_space(
2626
space_id=space_id,
@@ -67,15 +67,15 @@
6767
users = pubnub.fetch_user(user_id=user_id, sync=True)
6868
print(f"fetch_user: {users.result.__dict__}")
6969

70-
membership = pubnub.add_memberships(user_id=user_id, spaces=Space(space_id=space_id, custom={"a": "b"}), sync=True)
70+
membership = pubnub.add_memberships(user_id=user_id, spaces=[Space(space_id=space_id, custom={"a": "b"})], sync=True)
7171
print(f"add_memberships (user_id): {membership.result.__dict__}")
7272

7373
memberships = pubnub.fetch_memberships(user_id=user_id, include_custom=True, sync=True)
7474
print(f"fetch_memberships (user_id): {memberships.result.__dict__}")
7575

7676
print("-------")
7777

78-
membership = pubnub.update_memberships(user_id=user_id, spaces=Space(space_id=space_id, custom={"c": "d"}), sync=True)
78+
membership = pubnub.update_memberships(user_id=user_id, spaces=[Space(space_id=space_id, custom={"c": "d"})], sync=True)
7979
print(f"add_memberships (user_id): {membership.result.__dict__}")
8080

8181
memberships = pubnub.fetch_memberships(user_id=user_id, include_custom=True, sync=True)
@@ -93,16 +93,28 @@
9393

9494
print("-------")
9595

96-
membership = pubnub.remove_memberships(user_id=user_id, spaces=Space(space_id=space_id), sync=True)
96+
membership = pubnub.remove_memberships(user_id=user_id, spaces=[Space(space_id=space_id)], sync=True)
9797
print(f"remove_memberships (user_id): {membership.result.__dict__}")
9898

9999
memberships = pubnub.fetch_memberships(user_id=user_id, include_custom=True, sync=True)
100100
print(f"fetch_memberships (user_id): {memberships.result.__dict__}")
101101

102102
print("-------")
103103

104-
membership = pubnub.add_memberships(space_id=space_id, users=[User(user_id=user_id, custom={"1": "2"})], sync=True)
104+
membership = pubnub.add_memberships(
105+
space_id=space_id,
106+
users=[User(user_id=user_id, custom={"Kikiki": "Mamama"})],
107+
sync=True
108+
)
105109
print(f"add_memberships (space_id): {membership.result.__dict__}")
106110

111+
membership = pubnub.update_memberships(space_id=space_id, users=[
112+
User(user_id=user_id_2, custom={"1-2": "Freddy's comming"}),
113+
User(user_id='ghostface', custom={"question": "Favourite scary movie?"})
114+
], sync=True)
115+
print(f"update_memberships (space_id): {membership.result.__dict__}")
116+
117+
print("-------")
118+
107119
memberships = pubnub.fetch_memberships(space_id=space_id, include_custom=True, sync=True)
108120
print(f"fetch_memberships (space_id): {memberships.result.__dict__}")

pubnub/endpoints/entities/membership/add_memberships.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
from pubnub import utils
2-
from pubnub.endpoints.entities.endpoint import EntitiesEndpoint, SpaceEndpoint, SpacesEndpoint, UserEndpoint, \
3-
UsersEndpoint
2+
from pubnub.endpoints.entities.endpoint import EntitiesEndpoint, IncludeCustomEndpoint, SpaceEndpoint, SpacesEndpoint, \
3+
UserEndpoint, UsersEndpoint
44
from pubnub.enums import PNOperationType, HttpMethod
55
from pubnub.errors import PNERR_INVALID_SPACE, PNERR_INVALID_USER, PNERR_USER_ID_MISSING, PNERR_SPACE_MISSING
66
from pubnub.exceptions import PubNubException
7-
from pubnub.models.consumer.entities.membership import PNMembershipsResult
7+
from pubnub.models.consumer.entities.membership import PNMembershipsResult, PNSpaceMembershipsResult
88
from pubnub.models.consumer.entities.space import Space
99
from pubnub.models.consumer.entities.user import User
1010

1111

12-
class AddSpaceMembers(EntitiesEndpoint, SpaceEndpoint, UsersEndpoint):
13-
MEMBERSHIP_PATH = "/v2/objects/%s/uuids/%s/channels"
12+
class AddSpaceMembers(EntitiesEndpoint, SpaceEndpoint, UsersEndpoint, IncludeCustomEndpoint):
13+
MEMBERSHIP_PATH = "/v2/objects/%s/channels/%s/uuids"
1414

1515
def __init__(self, pubnub):
1616
EntitiesEndpoint.__init__(self, pubnub)
17+
IncludeCustomEndpoint.__init__(self)
1718
SpaceEndpoint.__init__(self)
1819
UsersEndpoint.__init__(self)
1920

@@ -27,7 +28,7 @@ def validate_specific_params(self):
2728
raise PubNubException(pn_error=PNERR_INVALID_USER)
2829

2930
def build_path(self):
30-
return AddSpaceMembers.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self.pubnub.uuid)
31+
return AddSpaceMembers.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self._space_id)
3132

3233
def build_data(self):
3334
users = [user.to_payload_dict() for user in self._users]
@@ -39,7 +40,7 @@ def build_data(self):
3940
return utils.write_value_as_string(payload)
4041

4142
def create_response(self, envelope):
42-
return PNMembershipsResult(envelope)
43+
return PNSpaceMembershipsResult(envelope)
4344

4445
def operation_type(self):
4546
return PNOperationType.PNAddSpaceUsersOperation

pubnub/endpoints/entities/membership/fetch_memberships.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from pubnub.endpoints.entities.endpoint import EntitiesEndpoint, IncludeCustomEndpoint, ListEndpoint, SpaceEndpoint, \
22
UserEndpoint
33
from pubnub.enums import PNOperationType, HttpMethod
4-
from pubnub.models.consumer.entities.membership import PNMembershipsResult
4+
from pubnub.models.consumer.entities.membership import PNSpaceMembershipsResult, PNUserMembershipsResult
55

66

77
class FetchUserMemberships(EntitiesEndpoint, IncludeCustomEndpoint, UserEndpoint, ListEndpoint):
@@ -20,7 +20,7 @@ def validate_specific_params(self):
2020
self._validate_user_id()
2121

2222
def create_response(self, envelope):
23-
return PNMembershipsResult(envelope)
23+
return PNUserMembershipsResult(envelope)
2424

2525
def operation_type(self):
2626
return PNOperationType.PNFetchUserMembershipsOperation
@@ -33,21 +33,22 @@ def http_method(self):
3333

3434

3535
class FetchSpaceMemberships(EntitiesEndpoint, IncludeCustomEndpoint, SpaceEndpoint):
36-
MEMBERSHIP_PATH = "/v2/objects/%s/uuids/%s/channels"
36+
MEMBERSHIP_PATH = "/v2/objects/%s/channels/%s/uuids"
3737

3838
def __init__(self, pubnub):
3939
EntitiesEndpoint.__init__(self, pubnub)
40+
ListEndpoint.__init__(self)
4041
IncludeCustomEndpoint.__init__(self)
4142
UserEndpoint.__init__(self)
4243

4344
def build_path(self):
44-
return FetchSpaceMemberships.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self.pubnub.uuid)
45+
return FetchSpaceMemberships.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self._space_id)
4546

4647
def validate_specific_params(self):
4748
self._validate_space_id()
4849

4950
def create_response(self, envelope):
50-
return PNMembershipsResult(envelope)
51+
return PNSpaceMembershipsResult(envelope)
5152

5253
def operation_type(self):
5354
return PNOperationType.PNFetchSpaceMembershipsOperation

pubnub/endpoints/entities/membership/update_memberships.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
from pubnub import utils
2-
from pubnub.endpoints.entities.endpoint import EntitiesEndpoint, SpaceEndpoint, SpacesEndpoint, UserEndpoint, \
3-
UsersEndpoint
2+
from pubnub.endpoints.entities.endpoint import EntitiesEndpoint, IncludeCustomEndpoint, SpaceEndpoint, SpacesEndpoint, \
3+
UserEndpoint, UsersEndpoint
44
from pubnub.enums import PNOperationType, HttpMethod
55
from pubnub.errors import PNERR_INVALID_SPACE, PNERR_INVALID_USER, PNERR_USER_ID_MISSING, PNERR_SPACE_MISSING
66
from pubnub.exceptions import PubNubException
7-
from pubnub.models.consumer.entities.membership import PNMembershipsResult
7+
from pubnub.models.consumer.entities.membership import PNMembershipsResult, PNSpaceMembershipsResult
88
from pubnub.models.consumer.entities.space import Space
99
from pubnub.models.consumer.entities.user import User
1010

1111

12-
class UpdateSpaceMembers(EntitiesEndpoint, SpaceEndpoint, UsersEndpoint):
13-
MEMBERSHIP_PATH = "/v2/objects/%s/uuids/%s/channels"
12+
class UpdateSpaceMembers(EntitiesEndpoint, SpaceEndpoint, UsersEndpoint, IncludeCustomEndpoint):
13+
MEMBERSHIP_PATH = "/v2/objects/%s/channels/%s/uuids"
1414

1515
def __init__(self, pubnub):
1616
EntitiesEndpoint.__init__(self, pubnub)
17+
IncludeCustomEndpoint.__init__(self)
1718
SpaceEndpoint.__init__(self)
1819
UsersEndpoint.__init__(self)
1920

@@ -27,7 +28,7 @@ def validate_specific_params(self):
2728
raise PubNubException(pn_error=PNERR_INVALID_USER)
2829

2930
def build_path(self):
30-
return UpdateSpaceMembers.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self.pubnub.uuid)
31+
return UpdateSpaceMembers.MEMBERSHIP_PATH % (self.pubnub.config.subscribe_key, self._space_id)
3132

3233
def build_data(self):
3334
users = [user.to_payload_dict() for user in self._users]
@@ -39,7 +40,7 @@ def build_data(self):
3940
return utils.write_value_as_string(payload)
4041

4142
def create_response(self, envelope):
42-
return PNMembershipsResult(envelope)
43+
return PNSpaceMembershipsResult(envelope)
4344

4445
def operation_type(self):
4546
return PNOperationType.PNUpdateSpaceUsersOperation

pubnub/models/consumer/entities/membership.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,25 @@ class PNMembershipsResult(PNEntityPageableResult):
55
_description = "Set Memberships: %s"
66

77
def __init__(self, result):
8-
self.data = [PNMembershipsResult.rename_channel(space) for space in result['data']]
9-
8+
super().__init__(result)
109
self.status = result["status"]
1110

1211
def rename_channel(result):
1312
result['space'] = result.pop('channel')
1413
return result
14+
15+
def rename_uuid(result):
16+
result['user'] = result.pop('uuid')
17+
return result
18+
19+
20+
class PNUserMembershipsResult(PNMembershipsResult):
21+
def __init__(self, result):
22+
super().__init__(result)
23+
self.data = [PNMembershipsResult.rename_channel(space) for space in result['data']]
24+
25+
26+
class PNSpaceMembershipsResult(PNMembershipsResult):
27+
def __init__(self, result):
28+
super().__init__(result)
29+
self.data = [PNMembershipsResult.rename_uuid(user) for user in result['data']]

pubnub/models/consumer/entities/user.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __init__(self, user_id=None, **kwargs):
3939

4040
def to_payload_dict(self):
4141
result = {
42-
"channel": {
42+
"uuid": {
4343
"id": str(self.user_id)
4444
}
4545
}

pubnub/pubnub_core.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@
8383

8484
class PubNubCore:
8585
"""A base class for PubNub Python API implementations"""
86-
SDK_VERSION = "6.5.0"
86+
SDK_VERSION = "6.5.1"
8787
SDK_NAME = "PubNub-Python"
8888

8989
TIMESTAMP_DIVIDER = 1000
@@ -542,13 +542,13 @@ def add_memberships(
542542
sync=None
543543
):
544544
if user_id and space_id:
545-
raise(PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
545+
raise (PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
546546
if user_id and spaces:
547547
membership = AddUserSpaces(self).user_id(user_id).spaces(spaces)
548548
elif space_id and users:
549549
membership = AddSpaceMembers(self).space_id(space_id).users(users)
550550
else:
551-
raise(PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
551+
raise (PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
552552

553553
if sync:
554554
return membership.sync()
@@ -564,13 +564,13 @@ def update_memberships(
564564
sync=None
565565
):
566566
if user_id and space_id:
567-
raise(PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
567+
raise (PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
568568
if user_id and spaces:
569569
membership = UpdateUserSpaces(self).user_id(user_id).spaces(spaces)
570570
elif space_id and users:
571571
membership = UpdateSpaceMembers(self).space_id(space_id).users(users)
572572
else:
573-
raise(PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
573+
raise (PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
574574

575575
if sync:
576576
return membership.sync()
@@ -581,14 +581,14 @@ def remove_memberships(self, **kwargs):
581581
return RemoveMemberships(self)
582582

583583
if 'user_id' in kwargs.keys() and 'space_id' in kwargs.keys():
584-
raise(PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
584+
raise (PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
585585

586586
if kwargs['user_id'] and kwargs['spaces']:
587587
membership = RemoveUserSpaces(self).user_id(kwargs['user_id']).spaces(kwargs['spaces'])
588588
elif kwargs['space_id'] and kwargs['users']:
589589
membership = RemoveSpaceMembers(self).space_id(kwargs['space_id']).users(kwargs['users'])
590590
else:
591-
raise(PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
591+
raise (PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
592592

593593
if kwargs['sync']:
594594
return membership.sync()
@@ -598,14 +598,14 @@ def remove_memberships(self, **kwargs):
598598
def fetch_memberships(self, user_id: str = None, space_id: str = None, limit=None, page=None, filter=None,
599599
sort=None, include_total_count=None, include_custom=None, sync=None):
600600
if user_id and space_id:
601-
raise(PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
601+
raise (PubNubException(pn_error=PNERR_MISUSE_OF_USER_AND_SPACE))
602602

603603
if user_id:
604604
memberships = FetchUserMemberships(self).user_id(user_id)
605605
elif space_id:
606606
memberships = FetchSpaceMemberships(self).space_id(space_id)
607607
else:
608-
raise(PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
608+
raise (PubNubException(pn_error=PNERR_USER_SPACE_PAIRS_MISSING))
609609

610610
if limit:
611611
memberships.limit(limit)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='pubnub',
5-
version='6.5.0',
5+
version='6.5.1',
66
description='PubNub Real-time push service in the cloud',
77
author='PubNub',
88
author_email='[email protected]',

0 commit comments

Comments
 (0)