{
"info": {
"author": "TokBox, Inc.",
"author_email": "support@tokbox.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"Intended Audience :: Telecommunications Industry",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 2.6",
"Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Topic :: Communications",
"Topic :: Communications :: Chat",
"Topic :: Communications :: Conferencing",
"Topic :: Multimedia :: Sound/Audio :: Capture/Recording",
"Topic :: Multimedia :: Sound/Audio :: Players",
"Topic :: Multimedia :: Video :: Capture",
"Topic :: Multimedia :: Video :: Display",
"Topic :: Software Development :: Libraries :: Python Modules"
],
"description": "==================\nOpenTok Python SDK\n==================\n\n.. image:: https://travis-ci.org/opentok/Opentok-Python-SDK.svg\n :target: https://travis-ci.org/opentok/Opentok-Python-SDK\n\nThe OpenTok Python SDK lets you generate\n`sessions `_ and\n`tokens `_ for `OpenTok `_\napplications, and `archive `_ OpenTok sessions.\n\nInstallation using Pip (recommended):\n-------------------------------------\n\nPip helps manage dependencies for Python projects using the PyPI index. Find more info here:\nhttp://www.pip-installer.org/en/latest/\n\nAdd the ``opentok`` package as a dependency in your project. The most common way is to add it to your\n``requirements.txt`` file::\n\n opentok>=2.10.0\n\nNext, install the dependencies::\n\n $ pip install -r requirements.txt\n\n\nUsage\n-----\n\nInitializing\n~~~~~~~~~~~~\n\nImport the package at the top of any file where you will use it. At the very least you will need the\n``OpenTok`` class. Then initialize an OpenTok instance with your own API Key and API Secret.\n\n.. code:: python\n\n from opentok import OpenTok\n\n opentok = OpenTok(api_key, api_secret)\n\nCreating Sessions\n~~~~~~~~~~~~~~~~~\n\nTo create an OpenTok Session, use the ``opentok.create_session()`` method. There are three optional\nkeyword parameters for this method:\n\n* ``location`` which can be set to a string containing an IP address.\n\n* ``media_mode`` which is a String (defined by the MediaModes class).\n This determines whether the session will use the\n `OpenTok Media Router `_\n or attempt to send streams directly between clients. A routed session is required for some\n OpenTok features (such as archiving).\n\n* ``archive_mode`` which specifies whether the session will be automatically archived (``always``)\n or not (``manual``).\n\nThis method returns a ``Session`` object. Its ``session_id`` attribute is useful when saving to a persistent\nstore (such as a database).\n\n.. code:: python\n\n # Create a session that attempts to send streams directly between clients (falling back\n # to use the OpenTok TURN server to relay streams if the clients cannot connect):\n session = opentok.create_session()\n\n from opentok import MediaModes\n # A session that uses the OpenTok Media Router, which is required for archiving:\n session = opentok.create_session(media_mode=MediaModes.routed)\n\n # An automatically archived session:\n session = opentok.create_session(media_mode=MediaModes.routed, archive_mode=ArchiveModes.always)\n\n # A session with a location hint\n session = opentok.create_session(location=u'12.34.56.78')\n\n # Store this session ID in the database\n session_id = session.session_id\n\nGenerating Tokens\n~~~~~~~~~~~~~~~~~\n\nOnce a Session is created, you can start generating Tokens for clients to use when connecting to it.\nYou can generate a token either by calling the ``opentok.generate_token(session_id)`` method or by\ncalling the ``session.generate_token()`` method on a ``Session`` instance after creating it. Both\nhave a set of optional keyword parameters: ``role``, ``expire_time``, ``data``, and\n``initial_layout_class_list``.\n\n.. code:: python\n\n # Generate a Token from just a session_id (fetched from a database)\n token = opentok.generate_token(session_id)\n # Generate a Token by calling the method on the Session (returned from create_session)\n token = session.generate_token()\n\n from opentok import Roles\n # Set some options in a token\n token = session.generate_token(role=Roles.moderator,\n expire_time=int(time.time()) + 10,\n data=u'name=Johnny'\n initial_layout_class_list=[u'focus'])\n\nWorking with Archives\n~~~~~~~~~~~~~~~~~~~~~\n\nYou can only archive sessions that use the OpenTok Media\nRouter (sessions with the media mode set to routed).\n\nYou can start the recording of an OpenTok Session using the ``opentok.start_archive(session_id)``\nmethod. This method takes an optional keyword argument ``name`` to assign a name to the archive.\nThis method will return an ``Archive`` instance. Note that you can only start an Archive on\na Session that has clients connected.\n\n.. code:: python\n\n archive = opentok.start_archive(session_id, name=u'Important Presentation')\n\n # Store this archive_id in the database\n archive_id = archive.id\n\nYou can also disable audio or video recording by setting the `has_audio` or `has_video` property of\nthe `options` parameter to `false`:\n\n.. code:: python\n\n archive = opentok.start_archive(session_id, name=u'Important Presentation', has_video=False)\n\n # Store this archive_id in the database\n archive_id = archive.id\n\nBy default, all streams are recorded to a single (composed) file. You can record the different\nstreams in the session to individual files (instead of a single composed file) by setting the\n``output_mode`` parameter of the ``opentok.start_archive()`` method `OutputModes.individual`.\n\n.. code:: python\n\n archive = opentok.start_archive(session_id, name=u'Important Presentation', output_mode=OutputModes.individual)\n\n # Store this archive_id in the database\n archive_id = archive.id\n\nComposed archives (output_mode=OutputModes.composed) have an optional ``resolution`` parameter.\nIf no value is supplied the opentok platform will use the default resolution \"640x480\".\nYou can set this to \"1280x720\" by setting the\n``resolution`` parameter of the ``opentok.start_archive()`` method.\n\nWarning: This value cannot be set for Individual output mode, an error will be thrown.\n\n.. code:: python\n\n archive = opentok.start_archive(session_id, name=u'Important Presentation', resolution=\"1280x720\")\n\n # Store this archive_id in the database\n archive_id = archive.id\n\nYou can stop the recording of a started Archive using the ``opentok.stop_archive(archive_id)``\nmethod. You can also do this using the ``archive.stop()`` method of an ``Archive`` instance.\n\n.. code:: python\n\n # Stop an Archive from an archive_id (fetched from database)\n opentok.stop_archive(archive_id)\n # Stop an Archive from an instance (returned from opentok.start_archive)\n archive.stop()\n\nTo get an ``Archive`` instance (and all the information about it) from an archive ID, use the\n``opentok.get_archive(archive_id)`` method.\n\n.. code:: python\n\n archive = opentok.get_archive(archive_id)\n\nTo delete an Archive, you can call the ``opentok.delete_archive(archive_id)`` method or the\n``archive.delete()`` method of an ``Archive`` instance.\n\n.. code:: python\n\n # Delete an Archive from an archive ID (fetched from database)\n opentok.delete_archive(archive_id)\n # Delete an Archive from an Archive instance (returned from opentok.start_archive or\n opentok.get_archive)\n archive.delete()\n\nYou can also get a list of all the Archives you've created (up to 1000) with your API Key. This is\ndone using the ``opentok.list_archives()`` method. There are three optional keyword parameters:\n``count``, ``offset`` and ``session_id``; they can help you paginate through the results and\nfilter by session ID. This method returns an instance of the ``ArchiveList`` class.\n\n.. code:: python\n\n archive_list = opentok.list_archive()\n\n # Get a specific Archive from the list\n archive = archive_list.items[i]\n\n # Iterate over items\n for archive in iter(archive_list):\n pass\n\n # Get the total number of Archives for this API Key\n total = archive_list.total\n\nNote that you can also create an automatically archived session, by passing in\n``ArchiveModes.always`` as the ``archive_mode`` parameter when you call the\n``opentok.create_session()`` method (see \"Creating Sessions,\" above).\n\nFor composed archives, you can change the layout dynamically, using the `opentok.set_archive_layout(archive_id, type, stylesheet)` method:\n\n.. code:: python\n\n opentok.set_archive_layout('ARCHIVEID', 'horizontalPresentation')\n\nSetting the layout of composed archives is optional. By default, composed archives use the `best fit` layout. Other valid values are: `custom`, `horizontalPresentation`, `pip` and `verticalPresentation`. If you specify a `custom` layout type, set the stylesheet parameter:\n\n.. code:: python\n\n opentok.set_archive_layout(\n 'ARCHIVEID',\n 'custom',\n 'stream.instructor {position: absolute; width: 100%; height:50%;}'\n )\n\nFor other layout types, do not set the stylesheet property. For more information see\n`Customizing the video layout for composed archives `_.\n\nFor more information on archiving, see the\n`OpenTok archiving `_ programming guide.\n\nSending Signals\n~~~~~~~~~~~~~~~~~~~~~\n\nOnce a Session is created, you can send signals to everyone in the session or to a specific connection. You can send a signal by calling the ``signal(session_id, payload)`` method of the ``OpenTok`` class. The ``payload`` parameter is a dictionary used to set the ``type``, ``data`` fields. \u1ef2ou can also call the method with the parameter ``connection_id`` to send a signal to a specific connection ``signal(session_id, data, connection_id)``.\n\n.. code:: python\n\n # payload structure\n payload = {\n 'type': 'type', #optional\n 'data': 'signal data' #required\n }\n\n connection_id = '2a84cd30-3a33-917f-9150-49e454e01572'\n\n # To send a signal to everyone in the session:\n opentok.signal(session_id, payload)\n\n # To send a signal to a specific connection in the session:\n opentok.signal(session_id, payload, connection_id)\n\nWorking with Streams\n~~~~~~~~~~~~~~~~~~~~~\n\nYou can get information about a stream by calling the `get_stream(session_id, stream_id)` method of the `OpenTok` class.\n\nThe method returns a Stream object that contains information of an OpenTok stream:\n\n* ``id``: The stream ID\n* ``videoType``: \"camera\" or \"screen\"\n* ``name``: The stream name (if one was set when the client published the stream)\n* ``layoutClassList``: It's an array of the layout classes for the stream\n\n.. code:: python\n\n session_id = 'SESSIONID'\n stream_id = '8b732909-0a06-46a2-8ea8-074e64d43422'\n\n # To get stream info:\n stream = opentok.get_stream(session_id, stream_id)\n\n # Stream properties:\n print stream.id #8b732909-0a06-46a2-8ea8-074e64d43422\n print stream.videoType #camera\n print stream.name #stream name\n print stream.layoutClassList #['full']\n\nAlso, you can get information about all the streams in a session by calling the `list_streams(session_id)` method of the `OpenTok` class.\n\nThe method returns a StreamList object that contains a list of all the streams\n\n.. code:: python\n\n # To get all streams in a session:\n stream_list = opentok.list_streams(session_id)\n\n # Getting the first stream of the list\n stream = stream_list.items[0]\n\n # Stream properties:\n print stream.id #8b732909-0a06-46a2-8ea8-074e64d43422\n print stream.videoType #camera\n print stream.name #stream name\n print stream.layoutClassList #['full']\n\nYou can change the layout classes for streams in a session by calling the `set_stream_class_lists(session_id, stream_list)` method of the `OpenTok` class.\n\nThe layout classes define how the stream is displayed in the layout of a composed OpenTok archive.\n\n.. code:: python\n\n # This list contains the information of the streams that will be updated. Each element\n # in the list is a dictionary with two properties: 'id' and 'layoutClassList'. The 'id'\n # property is the stream ID (a String), and the 'layoutClassList' is an array of class\n # names (Strings) to apply to the stream.\n payload = [\n {'id': '7b09ec3c-26f9-43d7-8197-f608f13d4fb6', 'layoutClassList': ['focus']},\n {'id': '567bc941-6ea0-4c69-97fc-70a740b68976', 'layoutClassList': ['top']},\n {'id': '307dc941-0450-4c09-975c-705740d08970', 'layoutClassList': ['bottom']}\n ]\n\n opentok.set_stream_class_lists('SESSIONID', payload)\n\nFor more information see\n`Changing the composed archive layout classes for an OpenTok stream `_.\n\nForce Disconnect\n~~~~~~~~~~~~~~~~~~~~~\n\nYour application server can disconnect a client from an OpenTok session by calling the force_disconnect(session_id, connection_id) method of the OpenTok class, or the force_disconnect(connection_id) method of the Session class.\n\n.. code:: python\n\n session_id = 'SESSIONID'\n connection_id = 'CONNECTIONID'\n\n # To send a request to disconnect a client:\n opentok.force_disconnect(session_id, connection_id)\n\nWorking with SIP Interconnect\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nYou can connect your SIP platform to an OpenTok session, the audio from your end of the SIP call is added to the OpenTok session as an audio-only stream. The OpenTok Media Router mixes audio from other streams in the session and sends the mixed audio to your SIP endpoint.\n\n.. code:: python\n\n session_id = u('SESSIONID')\n token = u('TOKEN')\n sip_uri = u('sip:user@sip.partner.com;transport=tls')\n\n # call the method with the required parameters\n sip_call = opentok.dial(session_id, token, sip_uri)\n\n # the method also support aditional options to establish the sip call\n\n options = {\n 'from': 'from@example.com',\n 'headers': {\n 'headerKey': 'headerValue'\n },\n 'auth': {\n 'username': 'username',\n 'password': 'password'\n },\n 'secure': True\n }\n\n # call the method with aditional options\n sip_call = opentok.dial(session_id, token, sip_uri, options)\n\nFor more information, including technical details and security considerations, see the\n`OpenTok SIP interconnect `_ developer guide.\n\nWorking with Broadcasts\n~~~~~~~~~~~~~~~~~~~~~~~\n\nOpenTok broadcast lets you share live OpenTok sessions with many viewers.\n\nYou can use the ``opentok.start_broadcast()`` method to start a live streaming for an OpenTok session. This broadcasts the session to an HLS (HTTP live streaming) or to RTMP streams.\n\nTo successfully start broadcasting a session, at least one client must be connected to the session.\n\nThe live streaming broadcast can target one HLS endpoint and up to five RTMP servers simulteneously for a session. You can only start live streaming for sessions that use the OpenTok Media Router; you cannot use live streaming with sessions that have the media mode set to relayed.\n\n.. code:: python\n\n session_id = 'SESSIONID'\n options = {\n 'layout': {\n 'type': 'custom',\n 'stylesheet': 'the layout stylesheet (only used with type == custom)'\n },\n 'maxDuration': 5400,\n 'outputs': {\n 'hls': {},\n 'rtmp': [{\n 'id': 'foo',\n 'serverUrl': 'rtmp://myfooserver/myfooapp',\n 'streamName': 'myfoostream'\n }, {\n 'id': 'bar',\n 'serverUrl': 'rtmp://mybarserver/mybarapp',\n 'streamName': 'mybarstream'\n }]\n },\n 'resolution': '640x480'\n }\n\n broadcast = opentok.start_broadcast(session_id, options)\n\nYou can stop a started Broadcast using the ``opentok.stop_broadcast(broadcast_id)`` method.\n\n.. code:: python\n\n # getting the ID from a broadcast object\n broadcast_id = broadcast.id\n\n # stop a broadcast\n broadcast = opentok.stop_broadcast(broadcast_id)\n\nYou can get details on a broadcast that is in-progress using the method ``opentok.get_broadcast(broadcast_id)``.\n\n.. code:: python\n\n broadcast_id = '1748b7070a81464c9759c46ad10d3734'\n\n # get broadcast details\n broadcast = opentok.get_broadcast(broadcast_id)\n\n print broadcast.json()\n\n # print result\n # {\n # \"createdAt\": 1437676551000,\n # \"id\": \"1748b707-0a81-464c-9759-c46ad10d3734\",\n # \"projectId\": 100,\n # \"resolution\": \"640x480\",\n # \"sessionId\": \"2_MX4xMDBfjE0Mzc2NzY1NDgwMTJ-TjMzfn4\",\n # \"status\": \"started\",\n # \"updatedAt\": 1437676551000,\n # \"broadcastUrls\": {\n # \"hls\": \"http://server/fakepath/playlist.m3u8\",\n # \"rtmp\": {\n # \"bar\": {\n # \"serverUrl\": \"rtmp://mybarserver/mybarapp\",\n # \"status\": \"live\",\n # \"streamName\": \"mybarstream\"\n # },\n # \"foo\": {\n # \"serverUrl\": \"rtmp://myfooserver/myfooapp\",\n # \"status\": \"live\",\n # \"streamName\": \"myfoostream\"\n # }\n # }\n # }\n # }\n\nYou can dynamically change the layout type of a live streaming broadcast.\n\n.. code:: python\n\n # Valid values to 'layout_type' are: 'custom', 'horizontalPresentation',\n # 'pip' and 'verticalPresentation' \n opentok.set_broadcast_layout('BROADCASTID', 'horizontalPresentation')\n\n # if you specify a 'custom' layout type, set the stylesheet parameter:\n opentok.set_broadcast_layout(\n 'BROADCASTID',\n 'custom',\n 'stream.instructor {position: absolute; width: 100%; height:50%;}'\n )\n\nFor more information about OpenTok live streaming broadcasts, see the\n`Broadcast developer guide `_.\n\nSamples\n-------\n\nThere are two sample applications included in this repository. To get going as fast as possible, clone the whole\nrepository and follow the Walkthroughs:\n\n- `HelloWorld `_\n- `Archiving `_\n\nDocumentation\n-------------\n\nReference documentation is available at .\n\nRequirements\n------------\n\nYou need an OpenTok API key and API secret, which you can obtain at https://dashboard.tokbox.com/\n\nThe OpenTok Python SDK requires Python 2.6, 2.7, 3.3, 3.4, 3.5 or 3.6\n\nRelease Notes\n-------------\n\nSee the `Releases `_ page for details about\neach release.\n\nImportant changes since v2.2\n----------------------------\n\n**Changes in v2.2.1:**\n\nThe default setting for the create_session() method is to create a session with the media mode set\nto relayed. In previous versions of the SDK, the default setting was to use the OpenTok Media Router\n(media mode set to routed). In a relayed session, clients will attempt to send streams directly\nbetween each other (peer-to-peer); if clients cannot connect due to firewall restrictions, the\nsession uses the OpenTok TURN server to relay audio-video streams.\n\n**Changes in v2.2.0:**\n\nThis version of the SDK includes support for working with OpenTok archives.\n\nThe OpenTok.create_session() method now includes a media_mode parameter, instead of a p2p parameter.\n\nFor details, see the reference documentation at\n.\n\nDevelopment and Contributing\n----------------------------\n\nInterested in contributing? We :heart: pull requests! See the `Development `_ and\n`Contribution `_ guidelines.\n\nSupport\n-------\n\nSee https://support.tokbox.com/ for all our support options.\n\nFind a bug? File it on the `Issues `_ page.\nHint: test cases are really helpful!\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/opentok/Opentok-Python-SDK",
"keywords": "video chat tokbox tok opentok python media webrtc archiving realtime",
"license": "LICENSE.txt",
"maintainer": "",
"maintainer_email": "",
"name": "opentok",
"package_url": "https://pypi.org/project/opentok/",
"platform": "",
"project_url": "https://pypi.org/project/opentok/",
"project_urls": {
"Homepage": "https://github.com/opentok/Opentok-Python-SDK"
},
"release_url": "https://pypi.org/project/opentok/2.10.0/",
"requires_dist": null,
"requires_python": "",
"summary": "OpenTok server-side SDK",
"version": "2.10.0"
},
"last_serial": 4281057,
"releases": {
"0.91.2": [
{
"comment_text": "",
"digests": {
"md5": "49a0223792fb858999d0bc3015401335",
"sha256": "332f0caecc925d87c0091bc7c6732025f55209d3478a2f8fc276a0dcee10ad79"
},
"downloads": -1,
"filename": "opentok-0.91.2.tar.gz",
"has_sig": false,
"md5_digest": "49a0223792fb858999d0bc3015401335",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6016,
"upload_time": "2013-07-18T23:45:46",
"url": "https://files.pythonhosted.org/packages/a4/d9/95361c80870203312591216bbe8e185dea30b6e22f79789d585c2683aeed/opentok-0.91.2.tar.gz"
}
],
"2.10.0": [
{
"comment_text": "",
"digests": {
"md5": "731ec4d85bb7474c60b51caaaa897c22",
"sha256": "9383ac96121e38254391478887bab303cf83ac5e72e33f07293a5dc6a1f07c8b"
},
"downloads": -1,
"filename": "opentok-2.10.0.tar.gz",
"has_sig": false,
"md5_digest": "731ec4d85bb7474c60b51caaaa897c22",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 28369,
"upload_time": "2018-09-17T21:58:16",
"url": "https://files.pythonhosted.org/packages/6a/a4/e645806a917cb666130fe0595f2bdd9964a610b297e1c2df9bbfcdeac9ea/opentok-2.10.0.tar.gz"
}
],
"2.2.0": [
{
"comment_text": "",
"digests": {
"md5": "4d2626c635cdc4384ae2bcbe0446fc40",
"sha256": "e00b12400ddb33e05e23d05101b36b9e4dcccc701eb0b60ee629d60d910ccf6b"
},
"downloads": -1,
"filename": "opentok-2.2.0.tar.gz",
"has_sig": false,
"md5_digest": "4d2626c635cdc4384ae2bcbe0446fc40",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11365,
"upload_time": "2014-05-27T21:57:55",
"url": "https://files.pythonhosted.org/packages/69/e6/430f063d20775d18e5fc525e51e786c4abd314fb27e35d76fe9528223a83/opentok-2.2.0.tar.gz"
}
],
"2.2.1": [
{
"comment_text": "",
"digests": {
"md5": "02874365b9609c46818de2bce0a570cb",
"sha256": "0cdf0a1eb42575decbbe2a7e63ff3cd89ac23ef71e9d775d6f1f17ef9096dfb7"
},
"downloads": -1,
"filename": "opentok-2.2.1.tar.gz",
"has_sig": false,
"md5_digest": "02874365b9609c46818de2bce0a570cb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 11368,
"upload_time": "2014-06-17T21:06:02",
"url": "https://files.pythonhosted.org/packages/9f/c5/ba19dd82db2b3b9a3558b284be8d4583ce02b10ca1a607213a1f468ce928/opentok-2.2.1.tar.gz"
}
],
"2.2.2a1": [],
"2.3.0": [
{
"comment_text": "",
"digests": {
"md5": "0c451085e7a1fe22b458db438f78c0a8",
"sha256": "44c0afd8638981b9bda5ee904a089a726f73bd1286c5f1f583ec4148b7ce5e9a"
},
"downloads": -1,
"filename": "opentok-2.3.0.tar.gz",
"has_sig": false,
"md5_digest": "0c451085e7a1fe22b458db438f78c0a8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12760,
"upload_time": "2015-06-04T20:27:28",
"url": "https://files.pythonhosted.org/packages/fb/48/e7fbd69ba97583d34cf7f7d3df73297b08879356f2b8531f5c032eeb2ec8/opentok-2.3.0.tar.gz"
}
],
"2.4.0": [
{
"comment_text": "",
"digests": {
"md5": "b44b1e505a2ea506c986eef376f19f47",
"sha256": "e2e517411fb17e25f05a53d8a67181a60ca2e059632b99403652433ddb3847ee"
},
"downloads": -1,
"filename": "opentok-2.4.0.tar.gz",
"has_sig": false,
"md5_digest": "b44b1e505a2ea506c986eef376f19f47",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12859,
"upload_time": "2015-12-17T18:18:44",
"url": "https://files.pythonhosted.org/packages/5a/52/31ab7e0b47df4247b8cc15cd3e41b1df00220801713eab2205bf1a54a85b/opentok-2.4.0.tar.gz"
}
],
"2.4.1": [
{
"comment_text": "",
"digests": {
"md5": "036c38aa9da41229a22260933a018885",
"sha256": "d2ff7be11fd7b277c15e2802d0b2d203ef7d74ed65b83e41e2610ed3ede8b031"
},
"downloads": -1,
"filename": "opentok-2.4.1.tar.gz",
"has_sig": false,
"md5_digest": "036c38aa9da41229a22260933a018885",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 12888,
"upload_time": "2016-04-22T05:52:19",
"url": "https://files.pythonhosted.org/packages/58/3c/ede61695cd5860ef12e030e3794883a86b5b89ea24ef7cf4ac07ba6c078f/opentok-2.4.1.tar.gz"
}
],
"2.5.0": [
{
"comment_text": "",
"digests": {
"md5": "905ecf9d154e3f19e8445b9db45fffb5",
"sha256": "723171c03f9228f6cc5bc0eb583f6f38618ae9ae71bdf23e623fae5550cff96c"
},
"downloads": -1,
"filename": "opentok-2.5.0.tar.gz",
"has_sig": false,
"md5_digest": "905ecf9d154e3f19e8445b9db45fffb5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13294,
"upload_time": "2017-06-09T01:58:53",
"url": "https://files.pythonhosted.org/packages/22/42/950b94da8a6c5fbfa680a539a4ca3aef2c70d0be5762572b494760837a58/opentok-2.5.0.tar.gz"
}
],
"2.5.0b1": [
{
"comment_text": "",
"digests": {
"md5": "ee640acecff254595dc8ae72ae664ee3",
"sha256": "b34a63a89f9a1f8ee2caf61fc5dabd3d2a39436c517b857a4ef2d2e200e54420"
},
"downloads": -1,
"filename": "opentok-2.5.0b1.tar.gz",
"has_sig": false,
"md5_digest": "ee640acecff254595dc8ae72ae664ee3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13044,
"upload_time": "2016-04-22T02:10:31",
"url": "https://files.pythonhosted.org/packages/d4/87/7cae9d781332d88f9dd759904c12a7a6d7f106e131f92eca139186de14b6/opentok-2.5.0b1.tar.gz"
}
],
"2.5.1": [
{
"comment_text": "",
"digests": {
"md5": "c8347d70bf7eb2e1dd19f6189f0a6674",
"sha256": "d2dc1229d56533596582a3b2dd6356db22573baefe85082f6acbd8e62d0a3c0c"
},
"downloads": -1,
"filename": "opentok-2.5.1.tar.gz",
"has_sig": false,
"md5_digest": "c8347d70bf7eb2e1dd19f6189f0a6674",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 13471,
"upload_time": "2017-08-18T05:38:48",
"url": "https://files.pythonhosted.org/packages/9b/6b/2fc9a48f3e8f2f481f9a7f689d78be57481df58680905172bdf60b5571d7/opentok-2.5.1.tar.gz"
}
],
"2.6.0": [
{
"comment_text": "",
"digests": {
"md5": "08250c8c53be4eda1caf31d0a1babd01",
"sha256": "47f12664816af65a0b703f2d8989c2659d9217c64ac1186cd7549810de18559f"
},
"downloads": -1,
"filename": "opentok-2.6.0.tar.gz",
"has_sig": false,
"md5_digest": "08250c8c53be4eda1caf31d0a1babd01",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 16478,
"upload_time": "2018-01-08T23:43:44",
"url": "https://files.pythonhosted.org/packages/a2/ad/c3e72c78f9108557e53bf2dffd2a08d27a8af6d74857a2bd46a8c03a0afb/opentok-2.6.0.tar.gz"
}
],
"2.7.0": [
{
"comment_text": "",
"digests": {
"md5": "13060adf123243c58986fd86d1351367",
"sha256": "5eec92d64c83a98b0ec31bd05d18f22076c1bef68c232f189e16a3acfc6f4d11"
},
"downloads": -1,
"filename": "opentok-2.7.0.tar.gz",
"has_sig": false,
"md5_digest": "13060adf123243c58986fd86d1351367",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20382,
"upload_time": "2018-08-16T23:20:49",
"url": "https://files.pythonhosted.org/packages/64/c8/a33c4a4ef74a9fc19476a62a51cf8761a7756061b9e8b9983f0bd64e81be/opentok-2.7.0.tar.gz"
}
],
"2.8.0": [
{
"comment_text": "",
"digests": {
"md5": "6323c606b86ca9e1e7ef079ee1ef3a94",
"sha256": "78cd5f93094a03511a783e72140a7f86e800732d15e16fd1abbef2b9905cbc0d"
},
"downloads": -1,
"filename": "opentok-2.8.0.tar.gz",
"has_sig": false,
"md5_digest": "6323c606b86ca9e1e7ef079ee1ef3a94",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 21523,
"upload_time": "2018-09-06T19:45:23",
"url": "https://files.pythonhosted.org/packages/a0/00/ec858a8bb46180c0f9abb44f2c38a829a0fb4be7082c07c9a34ce0867edd/opentok-2.8.0.tar.gz"
}
],
"2.9.0": [
{
"comment_text": "",
"digests": {
"md5": "af86cbc17ce5f7d29cb042a7de22c286",
"sha256": "edc9bf5e76fcdfe7bcd156920ce77b55f31a19bde45407ad4c2c09f092fa9e1c"
},
"downloads": -1,
"filename": "opentok-2.9.0.tar.gz",
"has_sig": false,
"md5_digest": "af86cbc17ce5f7d29cb042a7de22c286",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24806,
"upload_time": "2018-09-17T17:36:23",
"url": "https://files.pythonhosted.org/packages/51/a0/c47921b6f3e6a618f519a9fc067f315a8efc1911846850a26136ed5ffda9/opentok-2.9.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "731ec4d85bb7474c60b51caaaa897c22",
"sha256": "9383ac96121e38254391478887bab303cf83ac5e72e33f07293a5dc6a1f07c8b"
},
"downloads": -1,
"filename": "opentok-2.10.0.tar.gz",
"has_sig": false,
"md5_digest": "731ec4d85bb7474c60b51caaaa897c22",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 28369,
"upload_time": "2018-09-17T21:58:16",
"url": "https://files.pythonhosted.org/packages/6a/a4/e645806a917cb666130fe0595f2bdd9964a610b297e1c2df9bbfcdeac9ea/opentok-2.10.0.tar.gz"
}
]
}