{ "info": { "author": "Michal Mimino Danilak", "author_email": "michal.danilak@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Scientific/Engineering" ], "description": "Marathoner\n==========\n\nMarathoner is a command line tool for effective local testing of solutions for [Marathon Match competitions](http://community.topcoder.com/longcontest/?module=ViewActiveContests) organized by [TopCoder Inc.](http://www.topcoder.com/)\n\nCreated with love by [Mimino](http://community.topcoder.com/tc?module=MemberProfile&cr=22685656).\n\nTable of contents:\n\n- [Features](https://github.com/Mimino666/tc-marathoner#features)\n- [Installation](https://github.com/Mimino666/tc-marathoner#installation)\n- [Getting started](https://github.com/Mimino666/tc-marathoner#getting-started)\n- [Basic commands](https://github.com/Mimino666/tc-marathoner#basic-commands)\n- [Tagging of solutions](https://github.com/Mimino666/tc-marathoner#tagging-of-solutions)\n- [Tips and tricks](https://github.com/Mimino666/tc-marathoner#tips-and-tricks)\n\n\nFeatures\n--------\n\n- Works with solutions written in C++, C#, Java, Python, VB.\n- Provides a simple way to run your solution on multiple test cases.\n To run on the first hundred seeds, just type to command line prompt: ```1 100```.\n- Keeps track of the best scores for each seed, so you can compare your solutions locally.\n- Exports input data from visualizer into external file, so you can debug on them.\n- Automatically versions your source code, so you can return to your previous solutions.\n- (**NEW**) Caches the output of your solution, so you don't have to wait again when running the same code on the same seed.\n- and many more...\n\n\nInstallation\n------------\n\nMarathoner is written in Python, so first get some Python at [http://www.python.org](http://www.python.org) (versions 2.6, 2.7 and 3.x are supported).\n\nIf you have *pip* (Python package manager) installed, run: ```$ pip install marathoner```.\n\nTo update Marathoner to newer version, run: ```$ pip install marathoner --upgrade```.\n\nOr download the source code from GitHub and from *tc-marathoner* directory run: ```$ python setup.py install```.\n\n\nGetting started\n---------------\n\nLet me show you how to setup Marathoner for a recent Marathon Match called [ViralInfection](http://community.topcoder.com/longcontest/?module=ViewProblemStatement&compid=49418&rd=16493).\n\n1. Download the visualizer [tester.jar](http://www.topcoder.com/contest/problem/ViralInfection/ViralInfectionVis.jar).\n Create a solution that communicates with visualizer as described [here](http://www.topcoder.com/contest/problem/ViralInfection/manual.html)\n and make sure your solution works by running:\n\n ```$ java -jar ViralInfectionVis.jar -exec \"\" -seed 1```\n\n2. Run from the command line: ```$ marathoner new ViralInfectionMarat```\n\n Marathoner will create in the current directory a new project directory named *ViralInfectionMarat*,\n where it will store all the files related to ViralInfection match.\n\n3. Go into newly created project directory and edit *marathoner.cfg* file.\n Fill out its contents as described in the comments inside the file.\n Here is an example of my *marathoner.cfg* file for this match:\n\n ```\n [marathoner]\n visualizer = c:\\Mimino\\ViralInfection\\ViralInfectionVis.jar\n solution = \"c:\\Mimino\\ViralInfection\\ViralInfection.exe\"\n source = c:\\Mimino\\ViralInfection\\ViralInfection.cpp\n testcase = c:\\Mimino\\ViralInfection\\testcase.txt\n maximize = true\n novis = -novis\n vis =\n params = -debug -scale 10\n cache = true\n ```\n\n Save and close the file.\n\n4. While still in the project directory, run from the command line: ```$ marathoner run```.\n\n If everything is setup correctly, you should see a welcome message and the command line prompt. Try to run:\n ```\n >>> 1\n Running single test 1...\n Score = 123456.0\n Run time: 0.14\n New score: 1234567.00\n Best score: 123456.00\n Relative score: 0.09999\n ```\n You should also see the visualization for the seed number 1.\n\n Close the visualizer and type command ```help``` to show the list of available commands.\n\nCongratulations, you are now ready to compete!\n\n\nBasic commands\n--------------\n\n#### <seed> [<vis params>]\nRun single test with visualization. Examples:\n```\n>>> 5 # run seed 5\n>>> 5 -nostrict # run seed 5 with additional visualizer option \"-nostrict\"\n```\n\n#### <seed1> <seed2> [<vis params>]\nRun multiple tests with seeds from interval *seed1*-*seed2*, inclusive. Visualization is turned off. Examples:\n```\n>>> 1 100 # run seeds from interval 1-100, inclusive\n>>> 1 100 -nostrict # run seeds from interval 1-100, inclusive, with additional visualizer option \"-nostrict\"\n```\n\n#### best [<seed1>] [<seed2>]\nPrint the best scores for the seeds. Examples:\n```\n>>> best # print the best scores for all the known seeds\n>>> best 5 # print the best score for seed 5\n>>> best 1 100 # print the best scores for seeds from interval 1-100, inclusive\n```\n\n#### clear\nClear console window.\n\n#### help\nShow list of available commands.\n\n#### quit\nQuit Marathoner prompt.\n\n\nTagging of solutions\n--------------------\n\nOnce you have implemented a solution which you plan to run on a large number of tests,\nyou can *tag* the solution:\n```\n>>> tag create solution1 # tag the current solution with name \"solution1\"\n```\nMarathoner will compute the hash of your current source code (you specified path to your source code in .cfg file)\nand store it under the name *solution1*. Now whenever you run some tests,\nMarathoner will check the hash of your current source code against the hashes of the source codes you have already tagged.\nIf it finds the match, Marathoner will store the results of the tests under the matched tag.\n```\n>>> tag # display the list of existing tags\n|-----------------|-------|-------------|---------------------|\n| Tag | Seeds | Avg. score | Created |\n|-----------------|-------|-------------|---------------------|\n| (*) solution1 | 0 | (!) 0.0 | 2013-12-13 04:26:54 |\n|-----------------|-------|-------------|---------------------|\n\n(*) means current active tag\n(!) means the best average relative score\n\n>>> 1 100 # run seeds 1-100 and store the scores under \"solution1\" tag\nRunning 100 tests with tag \"solution1\"...\n\n>>> 101 200 # run seeds 101-200 and add them to \"solution1\" tag\nRunning 100 tests with tag \"solution1\"...\n\n>>> tag\n|-----------------|-------|-------------|---------------------|\n| Tag | Seeds | Avg. score | Created |\n|-----------------|-------|-------------|---------------------|\n| (*) solution1 | 200 | (!) 1.0 | 2013-12-13 04:26:54 |\n|-----------------|-------|-------------|---------------------|\n\n(*) means current active tag\n(!) means the best average relative score\n\n>>> tag solution1 # view the detail scores of seeds 1-200 of \"solution1\" tag\n|------|---------|---------|----------|----------|\n| Seed | Score | Best | Relative | Run time |\n|------|---------|---------|----------|----------|\n| 1 | 10.00 | 10.00 | 1.000 | 2.95 |\n| 2 | 385.00 | 385.00 | 1.000 | 2.95 |\n...\n| 200 | 123.00 | 123.00 | 1.000 | 2.95 |\n|------|---------|---------|----------|----------|\n\nRelative score of \"ch21\" tag on 200 tests: 200.00\nAverage relative score: 1.00\n```\n\nAnd now comes the killer! When you have tagged many different solutions\nand you want to compare them against each other, simply run the command:\n```\n>>> tag solution1 solution2 # compare the scores of tags \"solution1\" and \"solution2\"\n|----------|-------------|-------------|---------|\n| Seed | solution1 | solution2 | Best |\n|----------|-------------|-------------|---------|\n| 1 | (+) 10.00 | 9.00 | 10.00 |\n| 2 | (*) 385.00 | (*) 385.00 | 384.00 |\n...\n| 200 | 121.00 | (+) 123.00 | 123.00 |\n|----------|-------------|-------------|---------|\n| Relative | 199.66398 | 199.58193 | 200 |\n| Average | 0.99831 | 0.99790 | 1.00 |\n| # (*) | 67 | 55 | / |\n| # (+) | 34 | 30 | / |\n|----------|-------------|-------------|---------|\n\n(*) means the best score among the selected tags\n(+) means the absolute best score\n```\n\n**WARNING**: When you change the source code of your solution and don't compile it,\nMarathoner will still run the old solution, but the hash of the source file will be different.\nSo it is possible that the solution will not run with the correct tag name.\n\n\n#### tag\nPrint the list of existing tags. Examples:\n```\n>>> tag\n|-----------------|-------|-------------|---------------------|\n| Tag | Seeds | Avg. score | Created |\n|-----------------|-------|-------------|---------------------|\n| solution1 | 100 | 0.3 | 2013-12-13 03:00:00 |\n| (*) solution2 | 200 | (!) 1.0 | 2013-12-13 04:26:54 |\n|-----------------|-------|-------------|---------------------|\n\n(*) means current active tag\n(!) means the best average relative score\n```\n\n#### tag <tag_name>\nPrint the scores of the selected tag. Examples:\n```\n>>> tag solution1\n|------|----------|----------|----------|----------|\n| Seed | Score | Best | Relative | Run time |\n|------|----------|----------|----------|----------|\n| 1 | 257.00 | 257.00 | 1.000 | 1.31 |\n| 2 | 353.00 | 352.00 | 0.997 | 1.00 |\n| 3 | 0.00 | 294.00 | 0.000 | 1.04 |\n|------|----------|----------|----------|----------|\n\nRelative score of \"solution1\" tag on 3 tests: 1.997\nAverage relative score: 0.66567\nYou have scored zero points on 1 seeds. Here are some of the seeds: [3]\n```\n\n#### tag <tag_name1> <tag_name2> ...\nCompare the scores of the selected tags. Only the seeds that all the tags have in common will be compared. Examples:\n```\n>>> tag create solution1 # tag the solution with name \"solution1\"\n>>> 1 10 # run the seeds 1-10 and store them under \"solution1\" tag\n\n( change source code of solution )\n>>> tag create solution2 # tag the another solution with name \"solution2\"\n>>> 5 15 # run the seeds 5-15 and store them under \"solution2\" tag\n>>> tag solution1 solution2 # compare the scores of seeds 5-10 (the ones they have in common)\n|----------|-------------|-------------|---------|\n| Seed | solution1 | solution2 | Best |\n|----------|-------------|-------------|---------|\n| 5 | (+) 10.00 | 9.00 | 10.00 |\n...\n| 10 | 121.00 | (+) 123.00 | 123.00 |\n|----------|-------------|-------------|---------|\n| Relative | 4.33199 | 4.79096 | 6 |\n| Average | 0.72199 | 0.79849 | 1.00 |\n| # (*) | 2 | 5 | / |\n| # (+) | 1 | 1 | / |\n|----------|-------------|-------------|---------|\n\n( change source code again )\n>>> tag create solution3 # tag the another solution with name \"solution3\"\n>>> 9 10 # run the seeds 9-10 and store them under \"solution3\" tag\n>>> tag solution1 solution2 solution3 # compare the scores of seeds 9-10\n|----------|-------------|-------------|-------------|---------|\n| Seed | solution1 | solution2 | solution3 | Best |\n|----------|-------------|-------------|-------------|---------|\n| 9 | (+) 10.00 | 9.00 | 2.00 | 10.00 |\n| 10 | 121.00 | (+) 123.00 | 100.00 | 123.00 |\n|----------|-------------|-------------|-------------|---------|\n| Relative | 1.66398 | 1.58193 | 1.30212 | 2 |\n| Average | 0.83199 | 0.79096 | 0.65106 | 1.00 |\n| # (*) | 0 | 0 | 0 | / |\n| # (+) | 1 | 1 | 0 | / |\n|----------|-------------|-------------|-------------|---------|\n```\n\n#### tag create <tag_name>\nTag the current solution with name *tag_name*. Examples:\n```\n>>> tag create solution1 # tag the current solution with name \"solution1\"\n>>> 1 10 # run the seeds 1-10 and store them under \"solution1\" tag\nRunning 10 tests with tag \"solution1\"...\n\n( change source code of solution )\n>>> 1 10 # now, because the source code has changed, the current solution doesn't have any tag\nRunning 10 tests...\n\n( change source code back ) # Marathoner automatically detects the change and \"solution1\" tag is active again\n>>> 11 20 # run the seeds 11-20 and store them under \"solution1\" tag\nRunning 10 tests with tag \"solution1\"...\n```\n\n#### tag delete <tag>\nDelete the tag *tag_name*. Examples:\n```\n>>> tag delete solution1\nAre you sure you want to delete tag \"solution1\"? [y/n] y\nTag \"solution1\" was deleted.\n```\n\n\nTips and tricks\n---------------\n\n- If your solution gets stuck, press ```q``` to easily terminate it. If you are running multiple tests, it terminates the whole execution (best scores of already run tests are still saved, though).\n- If your solution crashes on some seed and you want to debug it, you can find input data of this seed in file specified by *testcase* field in *marathoner.cfg*.\n- You can find the log of the last multitest run in the project directory, called *multiple_tests.log*.\n- When you run multiple tests, standard error output from your solution is not displayed. But lines starting with ```!``` are displayed, still.\n- Marathoner stores the source code of all the tagged solutions in ```/tags``` directory, so you can later return to them. You can use this as a simple version control system.\n- If you internally measure running time of your solution, output to standard error a line in format: ```Run time = ```. Marathoner will use this time instead of the one it measures externally, which can be imprecise.", "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/Mimino666/tc-marathoner", "keywords": null, "license": "The MIT License (MIT)\n\nCopyright (c) 2013-2015 Michal \"Mimino\" Danil\u00e1k\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.", "maintainer": null, "maintainer_email": null, "name": "marathoner", "package_url": "https://pypi.org/project/marathoner/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/marathoner/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Mimino666/tc-marathoner" }, "release_url": "https://pypi.org/project/marathoner/1.2.18/", "requires_dist": null, "requires_python": null, "summary": "Testing tool for TopCoder marathon matches.", "version": "1.2.18" }, "last_serial": 1725024, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "fa659bae2d04ea2a61b12245daa20635", "sha256": "02f6c18542d5fdded9dd9f727a9b56ce5a582db68f9e410b09fffbda7790f15e" }, "downloads": -1, "filename": "marathoner-1.0.0.zip", "has_sig": false, "md5_digest": "fa659bae2d04ea2a61b12245daa20635", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27279, "upload_time": "2013-12-08T14:59:39", "url": "https://files.pythonhosted.org/packages/c9/dd/944fc3a556e9028a93fcbc4a747c0896cd8b59310be3d96e4246f2276014/marathoner-1.0.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "1771957c2aa280611ecf705e372d7140", "sha256": "6a67f7f5ce1b5d0ebbd7114cb43f9fa4df70d570dcf2e0064c67c34204e07dcf" }, "downloads": -1, "filename": "marathoner-1.0.1.zip", "has_sig": false, "md5_digest": "1771957c2aa280611ecf705e372d7140", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28671, "upload_time": "2013-12-09T21:39:10", "url": "https://files.pythonhosted.org/packages/ed/af/ce82752989a4f80d89c72908048b35bd31034809e06f508acfbb1f9224d9/marathoner-1.0.1.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "90bc6d1fd1bbea12183aa538e8204451", "sha256": "e5deb589332943fcc5e9bd4fc1b52dfb7c7293771fc7880a51aea23846697cf3" }, "downloads": -1, "filename": "marathoner-1.1.0.zip", "has_sig": false, "md5_digest": "90bc6d1fd1bbea12183aa538e8204451", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28377, "upload_time": "2013-12-10T19:47:25", "url": "https://files.pythonhosted.org/packages/2f/20/691caa8924f0fffb2190fbb110d22da6243d53734c48bedd56a18e5b0540/marathoner-1.1.0.zip" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "fe0990a8e5fe872f9b822ec480c9a699", "sha256": "fb1d1671ef3cc8ec03928328cafb2bd2adba4579e9ed729f44110429958ea0c1" }, "downloads": -1, "filename": "marathoner-1.2.0.zip", "has_sig": false, "md5_digest": "fe0990a8e5fe872f9b822ec480c9a699", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37918, "upload_time": "2013-12-13T04:41:38", "url": "https://files.pythonhosted.org/packages/ca/46/f44db8191c49b8743a9ddbe522ffff3883792b5b78b39f5e7a789a0c8adb/marathoner-1.2.0.zip" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "9161174f0aa245dca297c3ee4110b372", "sha256": "76065d421b584e1679c808f082878415e1b07c7e692ccfcd49dd01d146b333ae" }, "downloads": -1, "filename": "marathoner-1.2.1.zip", "has_sig": false, "md5_digest": "9161174f0aa245dca297c3ee4110b372", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38748, "upload_time": "2013-12-28T00:01:49", "url": "https://files.pythonhosted.org/packages/a1/d2/25414f1b643958cd424401a332a79ca00ff69855138e484fbeb0f587f114/marathoner-1.2.1.zip" } ], "1.2.10": [ { "comment_text": "", "digests": { "md5": "9173149473afe9660fd96e994c703810", "sha256": "e1db94dca89e1a93e70b2e909c132a9b51913887bfb5dff2e238c1f4717d1813" }, "downloads": -1, "filename": "marathoner-1.2.10.zip", "has_sig": false, "md5_digest": "9173149473afe9660fd96e994c703810", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47478, "upload_time": "2015-04-21T11:56:51", "url": "https://files.pythonhosted.org/packages/97/5c/b91e5d54ca470e4a088e3ba1b0320ea64e928c70cca6dd0159066c09a20f/marathoner-1.2.10.zip" } ], "1.2.11": [ { "comment_text": "", "digests": { "md5": "6c9a4b41d9ad827978f4c0e6b61c6a84", "sha256": "4b442dede2877f1bde51ccd0875dd6209e10cbdd3cabde8e1fe8dc3ab35dc94a" }, "downloads": -1, "filename": "marathoner-1.2.11.zip", "has_sig": false, "md5_digest": "6c9a4b41d9ad827978f4c0e6b61c6a84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46509, "upload_time": "2015-04-21T21:29:09", "url": "https://files.pythonhosted.org/packages/52/13/893984bfab262f836e281af57b4dbb87b3ab08f4d53ce563158e09ac4828/marathoner-1.2.11.zip" } ], "1.2.12": [ { "comment_text": "", "digests": { "md5": "0a64b342ea62d71e21be99b7b68453bb", "sha256": "666bad035c0540da0fac9f915f497c5db3abf9af03a493371f4b47e743eb8c44" }, "downloads": -1, "filename": "marathoner-1.2.12.zip", "has_sig": false, "md5_digest": "0a64b342ea62d71e21be99b7b68453bb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46511, "upload_time": "2015-04-23T14:02:34", "url": "https://files.pythonhosted.org/packages/77/1a/c83b8f8be97d2a738a7ecdde16aa09b5be22a4d57beb9f9b378d842a93f4/marathoner-1.2.12.zip" } ], "1.2.13": [ { "comment_text": "", "digests": { "md5": "03482f210cfd5e49e8d1a23c446deeb8", "sha256": "c756a8ac26e06ef23ef4b7350bc61a9a7a60b788aed6380b850a010b2abd41b7" }, "downloads": -1, "filename": "marathoner-1.2.13.zip", "has_sig": false, "md5_digest": "03482f210cfd5e49e8d1a23c446deeb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46543, "upload_time": "2015-04-23T20:32:27", "url": "https://files.pythonhosted.org/packages/d0/b9/a356c3f24ebf24aea16d446749682b7a60d65cc6a21f536374cdd7a08b69/marathoner-1.2.13.zip" } ], "1.2.14": [ { "comment_text": "", "digests": { "md5": "5f3ddd8a489528120babd4c1e2f94d88", "sha256": "ec9e85287284aea30a37327e09ef74823fc597c4d31fb35ef2af97935d2baa2d" }, "downloads": -1, "filename": "marathoner-1.2.14.zip", "has_sig": false, "md5_digest": "5f3ddd8a489528120babd4c1e2f94d88", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46567, "upload_time": "2015-05-25T11:39:49", "url": "https://files.pythonhosted.org/packages/f9/2a/cd9fd6419517357b640511b14f8730ef42a967de37a5fcbc17b543ac8ca8/marathoner-1.2.14.zip" } ], "1.2.15": [ { "comment_text": "", "digests": { "md5": "63b95d365e422bb207931ba78d10c285", "sha256": "52887618ea7f9cca1f50d5be01012b93beb2206a0729a88732256f190eb06b6c" }, "downloads": -1, "filename": "marathoner-1.2.15.zip", "has_sig": false, "md5_digest": "63b95d365e422bb207931ba78d10c285", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47861, "upload_time": "2015-05-26T01:58:18", "url": "https://files.pythonhosted.org/packages/d4/69/54148b875516dfcf2ab2aab3d3390896a064db79d07152da7322d515657e/marathoner-1.2.15.zip" } ], "1.2.16": [ { "comment_text": "", "digests": { "md5": "325b14b75cb231ad5b7ad61010257cc1", "sha256": "30475d6b13f6af2e02056468e4e30b3177414e72198aed8d007b1df04e6d3bb7" }, "downloads": -1, "filename": "marathoner-1.2.16.zip", "has_sig": false, "md5_digest": "325b14b75cb231ad5b7ad61010257cc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48371, "upload_time": "2015-06-22T17:54:56", "url": "https://files.pythonhosted.org/packages/ff/7f/760d4a0ab472944d6baf267315487d85b4ff76c692d44facb15bb856c923/marathoner-1.2.16.zip" } ], "1.2.17": [ { "comment_text": "", "digests": { "md5": "9bde5788a7beb07d2330ae0cf7ee015f", "sha256": "f52b36a7d3ffb6ad78d9b0f0953cd7a9b6990aa6d04b8acf0f8320c38d08cbda" }, "downloads": -1, "filename": "marathoner-1.2.17.zip", "has_sig": false, "md5_digest": "9bde5788a7beb07d2330ae0cf7ee015f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48924, "upload_time": "2015-08-16T10:06:55", "url": "https://files.pythonhosted.org/packages/ad/1a/28373673f5786fcb37ad534ffee82530bf7cf3ebfec74da79d1cab18c28f/marathoner-1.2.17.zip" } ], "1.2.18": [ { "comment_text": "", "digests": { "md5": "759439f0f88c44f7cea4f565e86e4ccc", "sha256": "8250f1e44cf929786ff946fed604f2716a5ba04b85489f9fdf2176516c98c9c2" }, "downloads": -1, "filename": "marathoner-1.2.18.zip", "has_sig": false, "md5_digest": "759439f0f88c44f7cea4f565e86e4ccc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49536, "upload_time": "2015-09-16T12:33:49", "url": "https://files.pythonhosted.org/packages/9e/50/68566a46c70f14995dc9458e0f640aea0be501fb1d2f8c092c6cf50af584/marathoner-1.2.18.zip" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "15cc7c414497c3fade7c065d0067eaee", "sha256": "de0961f6c799c1acfae9b164c16156206f5d4674e00369d48f8d1d07f6a64ad7" }, "downloads": -1, "filename": "marathoner-1.2.2.zip", "has_sig": false, "md5_digest": "15cc7c414497c3fade7c065d0067eaee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40330, "upload_time": "2013-12-28T22:35:33", "url": "https://files.pythonhosted.org/packages/6b/4a/68410be9e86c1b024162b9db618319ec2a2a01503eb805338f77dfb61df5/marathoner-1.2.2.zip" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "897ad84d35120f4e41995733c21058b0", "sha256": "6fdca2b5d860f2111101b65f90220bf21ed93b77d31686566251c9358185c6d6" }, "downloads": -1, "filename": "marathoner-1.2.3.zip", "has_sig": false, "md5_digest": "897ad84d35120f4e41995733c21058b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40608, "upload_time": "2014-05-21T23:09:52", "url": "https://files.pythonhosted.org/packages/84/66/68695c23926f59946898fd192f97d7673bd4cfa17650d145a6659537511e/marathoner-1.2.3.zip" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "a0ccf0027a4ef6fca07ee04150929276", "sha256": "f058decedaad14cab24c36cb842d79b077daafacfb05a9aeab0afb79eaf37558" }, "downloads": -1, "filename": "marathoner-1.2.4.zip", "has_sig": false, "md5_digest": "a0ccf0027a4ef6fca07ee04150929276", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42239, "upload_time": "2014-06-15T16:22:34", "url": "https://files.pythonhosted.org/packages/f7/e7/a7ba1b92c4e232b89a9b2449e6c49d1fdd2430004c6cc695299911f9e7d9/marathoner-1.2.4.zip" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "b8529069b6d26f493c236eda17c18297", "sha256": "4bc0897c3ee9287062c6ad1ed61576d7cc275e0283b0157a079f75f4f5bfe2b1" }, "downloads": -1, "filename": "marathoner-1.2.5.zip", "has_sig": false, "md5_digest": "b8529069b6d26f493c236eda17c18297", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42567, "upload_time": "2014-06-25T21:55:19", "url": "https://files.pythonhosted.org/packages/12/7a/9d948167a6da55b2e8c51b1bd7d78b0c95d976e9a9fec0da2803e5a34ad5/marathoner-1.2.5.zip" } ], "1.2.6": [ { "comment_text": "", "digests": { "md5": "b774a74afd74f5864d632f58c6f31162", "sha256": "e18c6a2e90ec7aeacbd190e2b319190e4260b724f64fab4b56227bc9a4a4ccc9" }, "downloads": -1, "filename": "marathoner-1.2.6.zip", "has_sig": false, "md5_digest": "b774a74afd74f5864d632f58c6f31162", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43266, "upload_time": "2015-02-27T17:06:41", "url": "https://files.pythonhosted.org/packages/ab/c6/8666dcbc3a7cf200e8fc47d8845f39986b6112159bb037fca1e2d249d40f/marathoner-1.2.6.zip" } ], "1.2.7": [ { "comment_text": "", "digests": { "md5": "7e3ec1af73d5a0fa8693643b4ebb5ae4", "sha256": "e78e636e51460506f09cc640162c4d0074859ff855cc0a52877c27b8b196d97a" }, "downloads": -1, "filename": "marathoner-1.2.7.zip", "has_sig": false, "md5_digest": "7e3ec1af73d5a0fa8693643b4ebb5ae4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46550, "upload_time": "2015-03-03T16:58:43", "url": "https://files.pythonhosted.org/packages/b0/73/c8e4da1430efd1e80ecf4a89ef11a616c265c2697ea50a47879bb98aa5b0/marathoner-1.2.7.zip" } ], "1.2.8": [ { "comment_text": "", "digests": { "md5": "271e49a97891ea53f5a5432fa8882632", "sha256": "ac8959ed64cea147c2a73032253bc5fd915c04a7322ea92536f1dbed6395e188" }, "downloads": -1, "filename": "marathoner-1.2.8.zip", "has_sig": false, "md5_digest": "271e49a97891ea53f5a5432fa8882632", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46300, "upload_time": "2015-04-20T20:48:09", "url": "https://files.pythonhosted.org/packages/e0/86/245be1fcc8b54ffa41352b2545808c528abc819025e1e66e51ce628820b4/marathoner-1.2.8.zip" } ], "1.2.9": [ { "comment_text": "", "digests": { "md5": "3d97b16be8fdf04812fe74167cce4100", "sha256": "910f1accf9b60f3f42ff9b158e961fcbf207f6c36b9f1485211519c388b0c023" }, "downloads": -1, "filename": "marathoner-1.2.9.zip", "has_sig": false, "md5_digest": "3d97b16be8fdf04812fe74167cce4100", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47372, "upload_time": "2015-04-21T00:24:29", "url": "https://files.pythonhosted.org/packages/79/7e/d2cad5b735e378f1daaae04ba2bdb90ccfeff1af67accdb665428f3ebd8f/marathoner-1.2.9.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "759439f0f88c44f7cea4f565e86e4ccc", "sha256": "8250f1e44cf929786ff946fed604f2716a5ba04b85489f9fdf2176516c98c9c2" }, "downloads": -1, "filename": "marathoner-1.2.18.zip", "has_sig": false, "md5_digest": "759439f0f88c44f7cea4f565e86e4ccc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49536, "upload_time": "2015-09-16T12:33:49", "url": "https://files.pythonhosted.org/packages/9e/50/68566a46c70f14995dc9458e0f640aea0be501fb1d2f8c092c6cf50af584/marathoner-1.2.18.zip" } ] }