1
1
from datetime import datetime # generate_token
2
2
import calendar # generate_token
3
+ import base64 # generate_token
4
+ import random # generate_token
3
5
import time # generate_token
4
6
import hmac # _sign_string
5
7
import hashlib # _sign_string
6
- import base64 # generate_token
7
- import random # generate_token
8
8
import requests # create_session, archiving
9
9
import json # archiving
10
10
from socket import inet_aton # create_session
11
11
import xml .dom .minidom as xmldom # create_session
12
12
13
- from .exceptions import OpenTokException , RequestError , AuthError , NotFoundError , ArchiveError
14
- from .session import Session
15
- from .version import __version__
16
-
17
13
# compat
18
14
from six .moves import map
19
15
from six .moves .urllib .parse import urlencode
20
16
from six import text_type , u , b , PY3
21
17
from enum import Enum
22
18
23
- dthandler = lambda obj : obj .isoformat () if isinstance (obj , datetime .datetime ) or isinstance (obj , datetime .date ) else None
19
+ from .version import __version__
20
+ from .session import Session
21
+ from .archives import Archive , ArchiveList
22
+ from .exceptions import OpenTokException , RequestError , AuthError , NotFoundError , ArchiveError
24
23
25
24
class Roles (Enum ):
26
25
"""List of valid roles for a token."""
27
26
subscriber = u ('subscriber' ) # Can only subscribe
28
27
publisher = u ('publisher' ) # Can publish, subscribe, and signal
29
28
moderator = u ('moderator' ) # Can do the above along with forceDisconnect and forceUnpublish
30
29
31
-
32
- class OpenTokArchive (object ):
33
-
34
- def __init__ (self , sdk , values ):
35
- self .sdk = sdk
36
- self .id = values .get ('id' )
37
- self .name = values .get ('name' )
38
- self .status = values .get ('status' )
39
- self .session_id = values .get ('sessionId' )
40
- self .partner_id = values .get ('partnerId' )
41
- self .created_at = datetime .datetime .fromtimestamp (values .get ('createdAt' ) / 1000 )
42
- self .size = values .get ('size' )
43
- self .duration = values .get ('duration' )
44
- self .url = values .get ('url' )
45
-
46
- def stop (self ):
47
- self .sdk .stop_archive (self .id )
48
-
49
- def delete (self ):
50
- self .sdk .delete_archive (self .id )
51
-
52
- def attrs (self ):
53
- return dict ((k , v ) for k , v in six .iteritems (self .__dict__ ) if k is not "sdk" )
54
-
55
- def json (self ):
56
- return json .dumps (self .attrs (), default = dthandler , indent = 4 )
57
-
58
-
59
- class OpenTokArchiveList (object ):
60
-
61
- def __init__ (self , values ):
62
- self .count = values .get ('count' )
63
- self .items = map (lambda x : OpenTokArchive (self , x ), values .get ('items' , []))
64
-
65
- def __iter__ (self ):
66
- for x in self .items :
67
- yield x
68
-
69
- def attrs (self ):
70
- return {
71
- 'count' : self .count ,
72
- 'items' : map (OpenTokArchive .attrs , self .items )
73
- }
74
-
75
- def json (self ):
76
- return json .dumps (self .attrs (), default = dthandler , indent = 4 )
77
-
78
-
79
30
class OpenTok (object ):
80
31
"""Use this SDK to create tokens and interface with the server-side portion
81
32
of the Opentok API.
@@ -221,7 +172,7 @@ def session_url(self):
221
172
return url
222
173
223
174
def archive_url (self , archive_id = None ):
224
- url = OpenTok . API_URL + '/v2/partner/' + self .api_key + '/archive'
175
+ url = self . api_url + '/v2/partner/' + self .api_key + '/archive'
225
176
if archive_id :
226
177
url = url + '/' + archive_id
227
178
return url
@@ -232,7 +183,7 @@ def start_archive(self, session_id, **kwargs):
232
183
response = requests .post (self .archive_url (), data = json .dumps (payload ), headers = self .archive_headers ())
233
184
234
185
if response .status_code < 300 :
235
- return OpenTokArchive (self , response .json ())
186
+ return Archive (self , response .json ())
236
187
elif response .status_code == 403 :
237
188
raise AuthError ()
238
189
elif response .status_code == 400 :
@@ -248,7 +199,7 @@ def stop_archive(self, archive_id):
248
199
response = requests .post (self .archive_url (archive_id ) + '/stop' , headers = self .archive_headers ())
249
200
250
201
if response .status_code < 300 :
251
- return OpenTokArchive (self , response .json ())
202
+ return Archive (self , response .json ())
252
203
elif response .status_code == 403 :
253
204
raise AuthError ()
254
205
elif response .status_code == 404 :
@@ -274,7 +225,7 @@ def get_archive(self, archive_id):
274
225
response = requests .get (self .archive_url (archive_id ), headers = self .archive_headers ())
275
226
276
227
if response .status_code < 300 :
277
- return OpenTokArchive (self , response .json ())
228
+ return Archive (self , response .json ())
278
229
elif response .status_code == 403 :
279
230
raise AuthError ()
280
231
elif response .status_code == 404 :
@@ -292,7 +243,7 @@ def get_archives(self, offset=None, count=None):
292
243
response = requests .get (self .archive_url () + "?" + urlencode (params ), headers = self .archive_headers ())
293
244
294
245
if response .status_code < 300 :
295
- return OpenTokArchiveList (response .json ())
246
+ return ArchiveList (response .json ())
296
247
elif response .status_code == 403 :
297
248
raise AuthError ()
298
249
elif response .status_code == 404 :
@@ -302,3 +253,4 @@ def get_archives(self, offset=None, count=None):
302
253
303
254
def _sign_string (self , string , secret ):
304
255
return hmac .new (secret .encode ('utf-8' ), string .encode ('utf-8' ), hashlib .sha1 ).hexdigest ()
256
+
0 commit comments