Skip to content

Commit b703c62

Browse files
authored
Merge pull request #109 from opentok/2.5.0
Merge 2.5.0 into master
2 parents 971ab2d + 2f5e8cd commit b703c62

File tree

4 files changed

+30
-12
lines changed

4 files changed

+30
-12
lines changed

README.rst

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ http://www.pip-installer.org/en/latest/
1919
Add the ``opentok`` package as a dependency in your project. The most common way is to add it to your
2020
``requirements.txt`` file::
2121

22-
opentok>=2.4.1
22+
opentok>=2.5.0
2323

2424
Next, install the dependencies::
2525

@@ -85,8 +85,9 @@ Generating Tokens
8585

8686
Once a Session is created, you can start generating Tokens for clients to use when connecting to it.
8787
You can generate a token either by calling the ``opentok.generate_token(session_id)`` method or by
88-
calling the ``session.generate_token()`` method on a ``Session`` instance after creating it. There
89-
is a set of optional keyword parameters: ``role``, ``expire_time``, and ``data``.
88+
calling the ``session.generate_token()`` method on a ``Session`` instance after creating it. Both
89+
have a set of optional keyword parameters: ``role``, ``expire_time``, ``data``, and
90+
``initial_layout_class_list``.
9091

9192
.. code:: python
9293
@@ -99,7 +100,8 @@ is a set of optional keyword parameters: ``role``, ``expire_time``, and ``data``
99100
# Set some options in a token
100101
token = session.generate_token(role=Roles.moderator,
101102
expire_time=int(time.time()) + 10,
102-
data=u'name=Johnny')
103+
data=u'name=Johnny'
104+
initial_layout_class_list=[u'focus'])
103105
104106
Working with Archives
105107
~~~~~~~~~~~~~~~~~~~~~

opentok/opentok.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ def proxies(self):
7373
def proxies(self, proxies):
7474
self._proxies = proxies
7575

76-
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, data=None):
76+
def generate_token(self, session_id, role=Roles.publisher, expire_time=None, data=None,
77+
initial_layout_class_list=[]):
7778
"""
7879
Generates a token for a given session.
7980
@@ -102,6 +103,8 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
102103
end-user. The length of the string is limited to 1000 characters. This data cannot be
103104
updated once it is set.
104105
106+
:param list initial_layout_class_list:
107+
105108
:rtype:
106109
The token string.
107110
"""
@@ -131,7 +134,12 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
131134
if expire_time > now + (60*60*24*30): # 30 days
132135
raise OpenTokException(u('Cannot generate token, expire_time is not in the next 30 days {0}').format(expire_time))
133136
if data and len(data) > 1000:
134-
raise OpenTokException(u('Cannot generate token, data must be less than 1000 characters').format(data))
137+
raise OpenTokException(u('Cannot generate token, data must be less than 1000 characters'))
138+
if initial_layout_class_list and not all(text_type(c) for c in initial_layout_class_list):
139+
raise OpenTokException(u('Cannot generate token, all items in initial_layout_class_list must be strings'))
140+
initial_layout_class_list_serialized = u(' ').join(initial_layout_class_list)
141+
if len(initial_layout_class_list_serialized) > 1000:
142+
raise OpenTokException(u('Cannot generate token, initial_layout_class_list must be less than 1000 characters'))
135143

136144
# decode session id to verify api_key
137145
sub_session_id = session_id[2:]
@@ -146,11 +154,12 @@ def generate_token(self, session_id, role=Roles.publisher, expire_time=None, dat
146154
raise OpenTokException(u('Cannot generate token, the session_id {0} does not belong to the api_key {1}').format(session_id, self.api_key))
147155

148156
data_params = dict(
149-
session_id = session_id,
150-
create_time = now,
151-
expire_time = expire_time,
152-
role = role.value,
153-
nonce = random.randint(0,999999)
157+
session_id = session_id,
158+
create_time = now,
159+
expire_time = expire_time,
160+
role = role.value,
161+
nonce = random.randint(0,999999),
162+
initial_layout_class_list = initial_layout_class_list_serialized
154163
)
155164
if data:
156165
data_params['connection_data'] = data

opentok/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
# see: http://legacy.python.org/dev/peps/pep-0440/#public-version-identifiers
2-
__version__ = '2.4.2a1'
2+
__version__ = '2.5.0'

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
def test_generate_no_data_token(self):
6875
token = self.opentok.generate_token(self.session_id)
6976
assert isinstance(token, text_type)

0 commit comments

Comments
 (0)