Skip to content

Commit 8c3cb75

Browse files
committed
Add message_type and space_id to publish
1 parent 809bfb0 commit 8c3cb75

File tree

5 files changed

+143
-0
lines changed

5 files changed

+143
-0
lines changed

pubnub/endpoints/pubsub/publish.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ class Publish(Endpoint, TimeTokenOverrideMixin):
1515
def __init__(self, pubnub):
1616
super(Publish, self).__init__(pubnub)
1717
self._channel = None
18+
self._space = None
1819
self._message = None
20+
self._message_type = None
1921
self._should_store = None
2022
self._use_post = None
2123
self._meta = None
@@ -27,10 +29,18 @@ def channel(self, channel):
2729
self._channel = str(channel)
2830
return self
2931

32+
def space(self, space):
33+
self._space = str(space)
34+
return self
35+
3036
def message(self, message):
3137
self._message = message
3238
return self
3339

40+
def message_type(self, message_type):
41+
self._message_type = message_type
42+
return self
43+
3444
def use_post(self, use_post):
3545
self._use_post = bool(use_post)
3646
return self
@@ -91,6 +101,12 @@ def custom_params(self):
91101
if self.pubnub.config.auth_key is not None:
92102
params["auth"] = utils.url_encode(self.pubnub.config.auth_key)
93103

104+
if self._message_type is not None:
105+
params['type'] = str(self._message_type)
106+
107+
if self._space is not None:
108+
params['space-id'] = str(self._space)
109+
94110
return params
95111

96112
def build_path(self):
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class PNMessageType:
2+
_internal_type: str = 0
3+
_user_type: str = None
4+
5+
def __init__(self, user_type: str = None) -> None:
6+
self._user_type = user_type
7+
8+
def set_internal_type(self, internal_type: str):
9+
self._internal_type = internal_type
10+
11+
def from_response(user_type: str = None, internal_type: str = None):
12+
message_type = PNMessageType(user_type)
13+
if internal_type is not None:
14+
message_type.set_internal_type(internal_type)
15+
return message_type
16+
17+
def __str__(self) -> str:
18+
return self._user_type if self._user_type is not None else str(self._internal_type)
19+
20+
def toJSON(self) -> str:
21+
return str(self)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- '*/*'
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Connection:
10+
- keep-alive
11+
User-Agent:
12+
- PubNub-Python/7.1.0
13+
method: GET
14+
uri: https://ps.pndsn.com/publish/pub-c-739aa0fc-3ed5-472b-af26-aca1b333ec52/sub-c-33f55052-190b-11e6-bfbc-02ee2ddab7fe/0/ch1/0/%22hi%22?seqn=1&space-id=sp1
15+
response:
16+
body:
17+
string: '[1,"Sent","16742188428215060"]'
18+
headers:
19+
Access-Control-Allow-Methods:
20+
- GET
21+
Access-Control-Allow-Origin:
22+
- '*'
23+
Cache-Control:
24+
- no-cache
25+
Connection:
26+
- keep-alive
27+
Content-Length:
28+
- '30'
29+
Content-Type:
30+
- text/javascript; charset="UTF-8"
31+
Date:
32+
- Fri, 20 Jan 2023 12:47:22 GMT
33+
status:
34+
code: 200
35+
message: OK
36+
version: 1
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
interactions:
2+
- request:
3+
body: null
4+
headers:
5+
Accept:
6+
- '*/*'
7+
Accept-Encoding:
8+
- gzip, deflate
9+
Connection:
10+
- keep-alive
11+
User-Agent:
12+
- PubNub-Python/7.1.0
13+
method: GET
14+
uri: https://ps.pndsn.com/publish/pub-c-739aa0fc-3ed5-472b-af26-aca1b333ec52/sub-c-33f55052-190b-11e6-bfbc-02ee2ddab7fe/0/ch1/0/%22hi%22?seqn=1&type=test_message
15+
response:
16+
body:
17+
string: '[1,"Sent","16742222446704312"]'
18+
headers:
19+
Access-Control-Allow-Methods:
20+
- GET
21+
Access-Control-Allow-Origin:
22+
- '*'
23+
Cache-Control:
24+
- no-cache
25+
Connection:
26+
- keep-alive
27+
Content-Length:
28+
- '30'
29+
Content-Type:
30+
- text/javascript; charset="UTF-8"
31+
Date:
32+
- Fri, 20 Jan 2023 13:44:04 GMT
33+
status:
34+
code: 200
35+
message: OK
36+
version: 1

tests/integrational/native_sync/test_publish.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from tests.helper import pnconf, pnconf_demo_copy, pnconf_enc, pnconf_file_copy
99
from tests.integrational.vcr_helper import pn_vcr
1010
from unittest.mock import patch
11+
from urllib.parse import urlparse, parse_qs
1112

1213
pubnub.set_stream_logger('pubnub', logging.DEBUG)
1314

@@ -371,3 +372,36 @@ def test_publish_ttl_100(self):
371372
assert env.result.timetoken > 1
372373
except PubNubException as e:
373374
self.fail(e)
375+
376+
@pn_vcr.use_cassette('tests/integrational/fixtures/native_sync/publish/publish_user_message_type.yaml',
377+
filter_query_parameters=['uuid', 'pnsdk'])
378+
def test_publish_user_message_type(self):
379+
with pn_vcr.use_cassette('tests/integrational/fixtures/native_sync/publish/publish_user_message_type.yaml',
380+
filter_query_parameters=['uuid', 'pnsdk']) as cassette:
381+
try:
382+
env = PubNub(pnconf).publish().channel("ch1").message("hi").message_type('test_message').sync()
383+
assert isinstance(env.result, PNPublishResult)
384+
assert env.result.timetoken > 1
385+
assert len(cassette) == 1
386+
uri = urlparse(cassette.requests[0].uri)
387+
query = parse_qs(uri.query)
388+
assert 'type' in query.keys()
389+
assert query['type'] == ['test_message']
390+
except PubNubException as e:
391+
self.fail(e)
392+
393+
def test_publish_space_id(self):
394+
with pn_vcr.use_cassette('tests/integrational/fixtures/native_sync/publish/publish_space_id.yaml',
395+
filter_query_parameters=['uuid', 'pnsdk']) as cassette:
396+
try:
397+
env = PubNub(pnconf).publish().channel('ch1').space('sp1').message("hi").sync()
398+
399+
assert isinstance(env.result, PNPublishResult)
400+
assert env.result.timetoken > 1
401+
assert len(cassette) == 1
402+
uri = urlparse(cassette.requests[0].uri)
403+
query = parse_qs(uri.query)
404+
assert 'space-id' in query.keys()
405+
assert query['space-id'] == ['sp1']
406+
except PubNubException as e:
407+
self.fail(e)

0 commit comments

Comments
 (0)