Skip to content

Commit 50a67b4

Browse files
committed
add initial_layout_class_list field to token generation
1 parent 59fc18b commit 50a67b4

File tree

2 files changed

+24
-8
lines changed

2 files changed

+24
-8
lines changed

opentok/opentok.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,8 @@ def proxies(self):
7070
def proxies(self, proxies):
7171
self._proxies = proxies
7272

73-
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, data=None):
73+
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, data=None,
74+
initial_layout_class_list=[]):
7475
"""
7576
Generates a token for a given session.
7677
@@ -99,6 +100,8 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
99100
end-user. The length of the string is limited to 1000 characters. This data cannot be
100101
updated once it is set.
101102
103+
:param list initial_layout_class_list:
104+
102105
:rtype:
103106
The token string.
104107
"""
@@ -128,7 +131,12 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
128131
if expire_time > now + (60*60*24*30): # 30 days
129132
raise OpenTokException(u('Cannot generate token, expire_time is not in the next 30 days {0}').format(expire_time))
130133
if (data is not None) and len(data) > 1000:
131-
raise OpenTokException(u('Cannot generate token, data must be less than 1000 characters').format(data))
134+
raise OpenTokException(u('Cannot generate token, data must be less than 1000 characters'))
135+
if initial_layout_class_list and not all(text_type(c) for c in initial_layout_class_list):
136+
raise OpenTokException(u('Cannot generate token, all items in initial_layout_class_list must be strings'))
137+
initial_layout_class_list_serialized = u(' ').join(initial_layout_class_list)
138+
if len(initial_layout_class_list_serialized) > 1000:
139+
raise OpenTokException(u('Cannot generate token, initial_layout_class_list must be less than 1000 characters'))
132140

133141
# decode session id to verify api_key
134142
sub_session_id = session_id[2:]
@@ -143,12 +151,13 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
143151
raise OpenTokException(u('Cannot generate token, the session_id {0} does not belong to the api_key {1}').format(session_id, self.api_key))
144152

145153
data_params = dict(
146-
session_id = session_id,
147-
create_time = now,
148-
expire_time = expire_time,
149-
role = role.value,
150-
connection_data = (data or None),
151-
nonce = random.randint(0,999999)
154+
session_id = session_id,
155+
create_time = now,
156+
expire_time = expire_time,
157+
role = role.value,
158+
connection_data = (data or None),
159+
nonce = random.randint(0,999999),
160+
initial_layout_class_list = initial_layout_class_list_serialized
152161
)
153162
data_string = urlencode(data_params, True)
154163

tests/test_token_generation.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ def test_generate_data_token(self):
6464
assert token_decoder(token)[u('connection_data')] == data
6565
assert token_signature_validator(token, self.api_secret)
6666

67+
def test_generate_initial_layout_class_list(self):
68+
initial_layout_class_list = [u('focus'), u('small')];
69+
token = self.opentok.generate_token(self.session_id, initial_layout_class_list=initial_layout_class_list)
70+
assert isinstance(token, text_type)
71+
assert sorted(token_decoder(token)[u('initial_layout_class_list')].split(u(' '))) == sorted(initial_layout_class_list)
72+
assert token_signature_validator(token, self.api_secret)
73+
6774
@raises(TypeError)
6875
def test_does_not_generate_token_without_params(self):
6976
token = self.opentok.generate_token()

0 commit comments

Comments
 (0)