{
"info": {
"author": "Brennan Saeta",
"author_email": "saeta@coursera.org",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 2.7"
],
"description": "courseraprogramming\n===================\n\n.. image:: https://travis-ci.org/coursera/courseraprogramming.svg\n :target: https://travis-ci.org/coursera/courseraprogramming\n\nThis command-line tool is a software development toolkit to help instructional\nteams author asynchronous graders for Coursera (typically programming\nassignments). Coursera's asynchronous grading environment is based upon\n`docker `_. While use of this tool is by no means\nrequired to develop the docker container images, we believe it is helpful in the\nendeavour. See below for brief descriptions of this tool's capabilities.\n\nInstallation\n------------\n\nTo install this sdk, simply execute::\n\n sudo pip install courseraprogramming\n\n`pip `_ is a python package manager.\nIf you do not have ``pip`` installed on your machine, please follow the\ninstallation instructions for your platform found at:\nhttps://pip.pypa.io/en/latest/installing.html#install-or-upgrade-pip\n\nThe tool includes its own usage information and documentation. Simply run::\n\n courseraprogramming -h\n\nor::\n\n courseraprogramming --help\n\nfor a complete list of features, flags, and documentation.\n\nNote: the tool requires ``docker`` to already be installed on your machine.\nPlease see the docker\n`installation instructions `_ for further\ninformation.\n\nSubcommands\n-----------\n\nsanity\n^^^^^^\n\nRuns a number of sanity checks on your development environment and the\nDockerfile that builds your grader to help catch pitfalls early.\n\nExamples:\n - ``courseraprogramming sanity`` checks the python and docker environment for\n successful basic operations.\n - ``courseraprogramming sanity --skip-environment -f ./Dockerfile`` skips the\n environment checks, but runs a number of checks against the Dockerfile to\n help users avoid authoring pitfalls.\n - ``courseraprogramming sanity --help`` displays usage for the sanity subcommand.\n\nls & cat\n^^^^^^^^\n\nThese subcommands help you verify that a built docker container image actually\nhas what you expect inside of it. You can use these commands to poke at the\nfile system and verify that everything is where it should be.\n\nExamples:\n - ``courseraprogramming ls $MY_CONTAINER_IMAGE /path/to/dir``\n - ``courseraprogramming cat $MY_CONTAINER_IMAGE /path/to/MyFile.sh``\n - ``courseraprogramming cat --help``\n\ninspect\n^^^^^^^\n\nAllows for interactive inspection of your docker grading container image to help\ndebug grader issues. By default, it provides a shell that runs in a simulation\nof the hardened sandbox environment.\n\nExamples:\n - ``courseraprogramming inspect $MY_CONTAINER_IMAGE`` launches a basic shell within\n the container running as a deprivileged user, with memory constraints and the\n network configured similar to the production environment.\n - ``courseraprogramming inspect --super-user --unlimited-memory --allow-network\n $MY_CONTAINER_IMAGE`` launches a shell running as a root user with the\n production-simulating constraints removed.\n - ``courseraprogramming inspect -d /path/to/sample/submission $MY_CONTAINER_IMAGE``\n launches a container mapping the sample submission on the host into the\n grading container. If you interactively invoke the configured grading script\n and interactively debug your grader.\n - ``courseraprogramming inspect -h`` displays a list of all arguments and flags that can be\n passed to the ``inspect`` subcommand.\n\ngrade\n^^^^^\n\nThis grade subcommand loosely replicates the production grading environment on\nyour local machine, including applying CPU and memory limits, running as the\ncorrect user id, mounting the external file systems correctly, and relinquishing\nthe appropriate extra linux capabilities. Note that because the GrID system has\nadopted a defense-in-depth or layered defensive posture, not all layers of the\nproduction environment can be faithfully replicated locally.\n\nThe grade subcommand has 2 sub-sub-commands. ``local`` runs a local grader\ncontainer image on a sample submission found on the local file system. The\nfuture ``remote`` sub-sub-command will run a local grader container image on a\nsample submission downloaded from Coursera.org. This sub-sub-command is intended\nto help instructional teams verify new versions of their graders correctly\nhandle problematic submissions.\n\nExamples:\n - ``courseraprogramming grade local $MY_CONTAINER_IMAGE\n /path/to/sample/submission/``\n invokes the grader passing in the sample submission into the grader.\n - ``courseraprogramming grade local --help`` displays the full list of\n flags and options available.\n\nupload\n^^^^^^\n\nAllows an instructional team to upload their containers to Coursera without\nusing a web browser. It is designed to even work in an unattended fashion (i.e.\nfrom a jenkins job). In order to make the upload command work from a Jenkins\nautomated build machine, simply copy the `~/.coursera` directory from a working\nmachine, and install it in the jenkins home folder. Beware that the oauth2_cache\nfile within that directory contains a refresh token for the user who authorized\nthemselves. This refresh token should be treated as if it were a password and\nnot shared or otherwise disclosed!\n\nTo find the course id, item id, and part id, first go to the web authoring\ninterface for your programming assignment. There, the URL will be of the form:\n``/:courseSlug/author/outline/programming/:itemId/``. The part id will be\ndisplayed in the authoring user interface for each part. To convert the\n``courseSlug`` into a ``courseId``, you can take advantage of our `Course API` putting in the appropriate ``courseSlug``. For example, given a\ncourse slug of ``developer-iot``, you can query the course id by making the\nrequest: ``https://api.coursera.org/api/onDemandCourses.v1?q=slug&slug=developer-iot``.\nThe response will be a JSON object containing an ``id`` field with the value:\n``iRl53_BWEeW4_wr--Yv6Aw``.\n\nThis command can also be used to customize the resources that will be allocated\nto your grader when it grades learner submissions. The CPU, memory limit and\ntimeout are all customizable.\n\n - ``--grader-cpu`` takes a value of 1, 2, 3 or 4, representing the number of cores\n the grader will have access to when grading. The default is 1.\n - ``--grader-memory-limit`` takes a value of 1024, 2048, 3072 or 4096, representing the\n amount of memory in MB the grader will have access to when grading. The\n default is 1024.\n - ``--grading-timeout`` takes a value between 300 and 1800, representing the\n amount of time the grader is allowed to run before it times out. Note this\n value is counted from the moment the grader starts execution and does not\n include the time it takes Coursera to schedule the grader. The default value\n is 1200.\n\nExamples:\n - ``courseraprogramming upload $MY_CONTAINER_IMAGE $COURSE_ID $ITEM_ID\n $PART_ID`` uploads the specified grader container image to Coursera, begins\n and the post-upload processing, and associates the new grader with the\n specified item part in a new draft. Navigate to the course authoring UI to\n publish the draft to make it live.\n - ``courseraprogramming upload --help`` displays all available options\n for the :code:`upload` subcommand.\n\npublish\n^^^^^^^\n\nAllows an instructional team to publish changes made to programming\nassignments. Beware that *all* changes made to your assignment will be\npublished, not just grader changes. Like ``upload``, it is designed to work in\nan unattended fashion. Multiple items can be published at the same time using\nthe ``--additional-items`` flag. There are multiple different error conditions\nthat are represented by exit codes. An exit code of 1 represents a fatal error\nwhile an exit code of 2 represents a retryable error.\n\nExamples:\n - ``courseraprogramming publish $COURSE_ID $ITEM_ID`` publishes the item\n with item id $ITEM_ID in the course $COURSE_ID\n - ``courseraprogramming publish $COURSE_ID $ITEM_ID_1 --additional-items\n $ITEM_ID_2 $ITEM_ID_3`` publishes the items with ids $ITEM_ID_1, $ITEM_ID_2\n and $ITEM_ID_3 in the course $COURSE_ID\n\nBugs / Issues / Feature Requests\n--------------------------------\n\nPlease us the github issue tracker to document any bugs or other issues you\nencounter while using this tool.\n\nSupported Platforms\n^^^^^^^^^^^^^^^^^^^\n\nNote: We do not have the bandwidth to officially support this tool on windows.\nThat said, patches to add / maintain windows support are welcome!\n\nDeveloping / Contributing\n-------------------------\n\nWe recommend developing ``courseraprogramming`` within a python\n`virtualenv `_.\nTo get your environment set up properly, do the following::\n\n virtualenv venv\n source venv/bin/activate\n python setup.py develop\n pip install -r test_requirements.txt\n\nTests\n^^^^^\n\nTo run tests, simply run: ``nosetests``, or ``tox``.\n\nCode Style\n^^^^^^^^^^\n\nCode should conform to pep8 style requirements. To check, simply run::\n\n pep8 courseraprogramming tests",
"description_content_type": null,
"docs_url": null,
"download_url": "UNKNOWN",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/coursera/courseraprogramming",
"keywords": "grading programming coursera sdk docker cli tool",
"license": "Apache",
"maintainer": null,
"maintainer_email": null,
"name": "courseraprogramming",
"package_url": "https://pypi.org/project/courseraprogramming/",
"platform": "UNKNOWN",
"project_url": "https://pypi.org/project/courseraprogramming/",
"project_urls": {
"Download": "UNKNOWN",
"Homepage": "https://github.com/coursera/courseraprogramming"
},
"release_url": "https://pypi.org/project/courseraprogramming/0.18.0/",
"requires_dist": null,
"requires_python": null,
"summary": "A toolkit to help develop asynchronous graders for Coursera based on docker images.",
"version": "0.18.0"
},
"last_serial": 2405227,
"releases": {
"0.1.0": [
{
"comment_text": "",
"digests": {
"md5": "ba7f558f65a88f16f69b05fbc2b940ed",
"sha256": "d476e1e7d3ad1b4715c481009b564ee5950379dddd4d3b5d47b87cc1b7d2b9f8"
},
"downloads": -1,
"filename": "courseraprogramming-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "ba7f558f65a88f16f69b05fbc2b940ed",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6439,
"upload_time": "2015-07-23T23:53:08",
"url": "https://files.pythonhosted.org/packages/10/a8/77579e51cdda507cffd6a73510e2122ae7ca0b34c0b1f538fd467faec10a/courseraprogramming-0.1.0.tar.gz"
}
],
"0.10.0": [
{
"comment_text": "",
"digests": {
"md5": "9500751e52a1ad8296cdcc1b352b874a",
"sha256": "398ee030fc897800fafee3d4d256ce869bc58d2f999af13b03b6b36e7a0ade42"
},
"downloads": -1,
"filename": "courseraprogramming-0.10.0.tar.gz",
"has_sig": false,
"md5_digest": "9500751e52a1ad8296cdcc1b352b874a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20322,
"upload_time": "2016-03-01T19:11:17",
"url": "https://files.pythonhosted.org/packages/1b/03/1ff7c49e1eb22f95bdc8baffe0b891387819f6a14fa493ce19606884c265/courseraprogramming-0.10.0.tar.gz"
}
],
"0.11.0": [
{
"comment_text": "",
"digests": {
"md5": "e4d7738701ffe968dbd01e2de007c986",
"sha256": "eb6282339ae83eaf2b6df8af3501ca18f220a3adfe7b89a3daeaa307b5411e85"
},
"downloads": -1,
"filename": "courseraprogramming-0.11.0.tar.gz",
"has_sig": false,
"md5_digest": "e4d7738701ffe968dbd01e2de007c986",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22032,
"upload_time": "2016-03-30T23:02:32",
"url": "https://files.pythonhosted.org/packages/49/44/fff116f1d4c3a4001a9fcca5b054af1dc236d35e34ae72758292e65a8ca1/courseraprogramming-0.11.0.tar.gz"
}
],
"0.12.0": [
{
"comment_text": "",
"digests": {
"md5": "01b99d24cc440c10e343bdc4e944d235",
"sha256": "78f708ae32bedb57c068e7148c82536eb1544ab60719b57f16d2bf54f84d598e"
},
"downloads": -1,
"filename": "courseraprogramming-0.12.0.tar.gz",
"has_sig": false,
"md5_digest": "01b99d24cc440c10e343bdc4e944d235",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22912,
"upload_time": "2016-03-31T19:08:29",
"url": "https://files.pythonhosted.org/packages/45/9c/274315156b863eebec2659c9e1ff29cc400b4774756120b2607e7328171d/courseraprogramming-0.12.0.tar.gz"
}
],
"0.12.1": [
{
"comment_text": "",
"digests": {
"md5": "1db21129e5559a666033ebfcd3c9c2fe",
"sha256": "66ed5810ad445e107d534349def8a4aa0f08351156c4b6ee61b94bbaf9f37866"
},
"downloads": -1,
"filename": "courseraprogramming-0.12.1.tar.gz",
"has_sig": false,
"md5_digest": "1db21129e5559a666033ebfcd3c9c2fe",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22938,
"upload_time": "2016-04-02T18:13:15",
"url": "https://files.pythonhosted.org/packages/7c/a6/f97fcb14137cdad9c53ec1ddab6dd23a4bae6b1981e04bdf5dddb0bd130d/courseraprogramming-0.12.1.tar.gz"
}
],
"0.13.0": [
{
"comment_text": "",
"digests": {
"md5": "c4b5a55b2896e6b65068969cd6843edc",
"sha256": "a2aa8ea6c708cf576b075e99dd20b3002c38ba0a98b1da00da923a214ecf9764"
},
"downloads": -1,
"filename": "courseraprogramming-0.13.0.tar.gz",
"has_sig": false,
"md5_digest": "c4b5a55b2896e6b65068969cd6843edc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22966,
"upload_time": "2016-04-12T17:53:32",
"url": "https://files.pythonhosted.org/packages/4c/5a/b9bcf7dfba045d1e3eb3a8b056efc32dbf8734425adae17f39cae5177814/courseraprogramming-0.13.0.tar.gz"
}
],
"0.14.0": [
{
"comment_text": "",
"digests": {
"md5": "0f20095b0bebc3bbcec18fe31b39e3e3",
"sha256": "8218a84d4daed253da66cbf25f0a58b177f453326e3f69326c0016d9ab337c8f"
},
"downloads": -1,
"filename": "courseraprogramming-0.14.0.tar.gz",
"has_sig": false,
"md5_digest": "0f20095b0bebc3bbcec18fe31b39e3e3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 22986,
"upload_time": "2016-04-13T15:55:01",
"url": "https://files.pythonhosted.org/packages/47/3f/256ffe59370007783052e090209f186fd2b61a420b7b7a6629cce3aed6ee/courseraprogramming-0.14.0.tar.gz"
}
],
"0.15.0": [
{
"comment_text": "",
"digests": {
"md5": "6407b0a208295a7c103b7c7a7e845f3b",
"sha256": "53218902ddfb6801f4dd21380c4e60093f6713b62a3ef4a105212d133f6d8fe6"
},
"downloads": -1,
"filename": "courseraprogramming-0.15.0.tar.gz",
"has_sig": false,
"md5_digest": "6407b0a208295a7c103b7c7a7e845f3b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 23647,
"upload_time": "2016-04-20T03:23:03",
"url": "https://files.pythonhosted.org/packages/73/71/3cecd80feb0203429daf458b525ef6f864c778a226552c10c0b4a3175d9a/courseraprogramming-0.15.0.tar.gz"
}
],
"0.16.0": [
{
"comment_text": "",
"digests": {
"md5": "2ca8389c1c1c92cfbc48eefcbbd527a3",
"sha256": "dc14d8314b0a0c6771f266e3d6dbe2ad08e4fa396a220810e0f6c46fdf02717f"
},
"downloads": -1,
"filename": "courseraprogramming-0.16.0.tar.gz",
"has_sig": false,
"md5_digest": "2ca8389c1c1c92cfbc48eefcbbd527a3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24311,
"upload_time": "2016-07-12T23:26:28",
"url": "https://files.pythonhosted.org/packages/5a/15/f0f076a28d04c1fde7cc4eb461b086d676bbd32fb6cbde42d1f70476f7ef/courseraprogramming-0.16.0.tar.gz"
}
],
"0.17.0": [
{
"comment_text": "",
"digests": {
"md5": "fb184fe5f13f48d350d791c694562719",
"sha256": "ecacc914d12adb13eb630ff1cbbfcd2adc7f851bf3944e909e694d2631eaef8c"
},
"downloads": -1,
"filename": "courseraprogramming-0.17.0.tar.gz",
"has_sig": false,
"md5_digest": "fb184fe5f13f48d350d791c694562719",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24412,
"upload_time": "2016-10-17T17:06:13",
"url": "https://files.pythonhosted.org/packages/dc/1f/7bd551ab18f87f2ed45dbe033146d890d9f3bfcb7ab61ca886b25b397199/courseraprogramming-0.17.0.tar.gz"
}
],
"0.18.0": [
{
"comment_text": "",
"digests": {
"md5": "6c7f3dc4508afda661e170af4074da20",
"sha256": "ea0f73af8bdfb88189df0b85312dbebdb5cce4d6d9c4179b6900884f8d240039"
},
"downloads": -1,
"filename": "courseraprogramming-0.18.0.tar.gz",
"has_sig": false,
"md5_digest": "6c7f3dc4508afda661e170af4074da20",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24448,
"upload_time": "2016-10-17T22:42:43",
"url": "https://files.pythonhosted.org/packages/a1/48/d49071c0e3c8c664b0a86bb17c11d3745a5de1ccfc3ecb0dfadb0f1100bf/courseraprogramming-0.18.0.tar.gz"
}
],
"0.2.0": [
{
"comment_text": "",
"digests": {
"md5": "d5401ee6286a619285b85ae90f2b4a0c",
"sha256": "2fbfda38aee9489ae4806e735f0f80645e7c42389673a8cada20e14088a66c0d"
},
"downloads": -1,
"filename": "courseraprogramming-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "d5401ee6286a619285b85ae90f2b4a0c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8258,
"upload_time": "2015-07-27T18:00:29",
"url": "https://files.pythonhosted.org/packages/7d/59/ebf48e75ed2d9b40a02db8663f4a88f456fa15d490c9103484ce10048502/courseraprogramming-0.2.0.tar.gz"
}
],
"0.2.1": [
{
"comment_text": "",
"digests": {
"md5": "2ad381db717a913845a73f15813ce300",
"sha256": "66e6e214e3ea5a5c966a39bd9f722ad8090ea2fd1b510ca296d2dd4dbb5f05a7"
},
"downloads": -1,
"filename": "courseraprogramming-0.2.1.tar.gz",
"has_sig": false,
"md5_digest": "2ad381db717a913845a73f15813ce300",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8271,
"upload_time": "2015-07-27T23:09:33",
"url": "https://files.pythonhosted.org/packages/62/46/08f856a7a305c32aad5082d2d995d8fd1308c2dd6e2a70cdca8d05b25d82/courseraprogramming-0.2.1.tar.gz"
}
],
"0.5.0": [
{
"comment_text": "",
"digests": {
"md5": "b6243aa3ce41769a1a81e80b5fc06311",
"sha256": "4eff738fa3908ef209fa1b31dd6a84c4b7e174d22564a19c1c48505f8e6eb758"
},
"downloads": -1,
"filename": "courseraprogramming-0.5.0.tar.gz",
"has_sig": false,
"md5_digest": "b6243aa3ce41769a1a81e80b5fc06311",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18279,
"upload_time": "2015-08-06T23:28:58",
"url": "https://files.pythonhosted.org/packages/74/de/8e464530558ddc906ddb54796b6de49e7eb1362683571681c71df62776a1/courseraprogramming-0.5.0.tar.gz"
}
],
"0.5.1": [
{
"comment_text": "",
"digests": {
"md5": "27603d6321c814d24fa1942c503095e4",
"sha256": "07c3d40edfb0ab58a756c09257c8dd77e05bcfabbf127963e13039d429811208"
},
"downloads": -1,
"filename": "courseraprogramming-0.5.1.tar.gz",
"has_sig": false,
"md5_digest": "27603d6321c814d24fa1942c503095e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18499,
"upload_time": "2015-08-10T22:30:20",
"url": "https://files.pythonhosted.org/packages/ab/75/a8f144568c27c1b68f206736ff4d7d0576d1d9de85b46594fbe8a9d1b461/courseraprogramming-0.5.1.tar.gz"
}
],
"0.6.0": [
{
"comment_text": "",
"digests": {
"md5": "fe284cb4a3fc9b97657910e86a14e2e4",
"sha256": "a1683af2fc0cb774d62e02aa6049bbb97c579d7d07bc126e867d0937165f7856"
},
"downloads": -1,
"filename": "courseraprogramming-0.6.0.tar.gz",
"has_sig": false,
"md5_digest": "fe284cb4a3fc9b97657910e86a14e2e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 18614,
"upload_time": "2015-08-28T04:03:05",
"url": "https://files.pythonhosted.org/packages/50/c0/3d1290625a54b5ea672dad98fe40d500ee59e0b209f34a7eacdcb849d7f2/courseraprogramming-0.6.0.tar.gz"
}
],
"0.7.0": [
{
"comment_text": "",
"digests": {
"md5": "598ebabbcb68c98e96de3fbf60a144e8",
"sha256": "b27273d91676537086eab1fceaf108fbfac3f859f284980a201b5fdd848d3e82"
},
"downloads": -1,
"filename": "courseraprogramming-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "598ebabbcb68c98e96de3fbf60a144e8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19794,
"upload_time": "2015-12-08T03:20:49",
"url": "https://files.pythonhosted.org/packages/9c/ba/c055f2ea22364cc59b9cb851d8752142c436b8c928e1e2e742425b1ca1b7/courseraprogramming-0.7.0.tar.gz"
}
],
"0.7.1": [
{
"comment_text": "",
"digests": {
"md5": "596056ae6ac02acf8b304755155c160c",
"sha256": "66525327769b36df6674259c47ca8f6ad7c6313b4afa643dd1ab204bfefdb197"
},
"downloads": -1,
"filename": "courseraprogramming-0.7.1.tar.gz",
"has_sig": false,
"md5_digest": "596056ae6ac02acf8b304755155c160c",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 19800,
"upload_time": "2016-02-05T21:58:24",
"url": "https://files.pythonhosted.org/packages/c8/68/ab0c2799ef3bd21acd28d55c57b3ec7aa5c338f64af331ae906fd04f85f0/courseraprogramming-0.7.1.tar.gz"
}
],
"0.8.0": [
{
"comment_text": "",
"digests": {
"md5": "3f66f103b4d165c30df07fcf20a3e3b6",
"sha256": "8fd03a8c4c29669993386349fd9d4bdddcfc17b2b63f1a07e789b75a1b443c3e"
},
"downloads": -1,
"filename": "courseraprogramming-0.8.0.tar.gz",
"has_sig": false,
"md5_digest": "3f66f103b4d165c30df07fcf20a3e3b6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20048,
"upload_time": "2016-02-11T21:41:29",
"url": "https://files.pythonhosted.org/packages/e3/a0/c55db2f7bbf92d327c4519c0f926e3dc6eac25c766acc47da835a3792a7a/courseraprogramming-0.8.0.tar.gz"
}
],
"0.9.0": [
{
"comment_text": "",
"digests": {
"md5": "40c8f709b5b3b9668aa00f1bf283a2c7",
"sha256": "a10524634d4f5a12df4223f5a1276664cc8b76d8a12e480741f5638269556f8e"
},
"downloads": -1,
"filename": "courseraprogramming-0.9.0.tar.gz",
"has_sig": false,
"md5_digest": "40c8f709b5b3b9668aa00f1bf283a2c7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20076,
"upload_time": "2016-02-17T01:25:25",
"url": "https://files.pythonhosted.org/packages/b9/bf/ff8a5beeb25cabc3f0b77cfb9076733c468b0ebe6e93ec12516301a53e29/courseraprogramming-0.9.0.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "6c7f3dc4508afda661e170af4074da20",
"sha256": "ea0f73af8bdfb88189df0b85312dbebdb5cce4d6d9c4179b6900884f8d240039"
},
"downloads": -1,
"filename": "courseraprogramming-0.18.0.tar.gz",
"has_sig": false,
"md5_digest": "6c7f3dc4508afda661e170af4074da20",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 24448,
"upload_time": "2016-10-17T22:42:43",
"url": "https://files.pythonhosted.org/packages/a1/48/d49071c0e3c8c664b0a86bb17c11d3745a5de1ccfc3ecb0dfadb0f1100bf/courseraprogramming-0.18.0.tar.gz"
}
]
}