{ "info": { "author": "Joshua Ehrlich", "author_email": "jehrlich@linkedin.com,zopkio@googlegroups.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3" ], "description": "Zopkio - A Functional and Performance Test Framework for Distributed Systems\n============================================================================\n .. image:: https://travis-ci.org/linkedin/Zopkio.svg?branch=master\n :target: https://travis-ci.org/linkedin/Zopkio\n\n .. image:: https://coveralls.io/repos/linkedin/Zopkio/badge.svg?branch=master&service=github\n :target: https://coveralls.io/github/linkedin/Zopkio?branch=master\n\nZopkio is a test framework built to support at scale performance and functional\ntesting.\n\nInstallation\n------------\n\nZopkio is distributed via pip\n\nTo install::\n (sudo) pip install zopkio\n\nIf you want to work with the latest code::\n\n git clone git@github.com:linkedin/zopkio.git\n cd zopkio\n\nOnce you have downloaded the code you can run the zopkio unit tests::\n\n python setup.py test\n\nOr you can install zopkio and run the sample test::\n\n (sudo) python setup.py install\n zopkio examples/server_client/server_client.py\n\nN.B the example code assumes you can ssh into your own box using your\nssh keys so if your are having issues with the tests failing check your\nauthorized_keys.\n\nIn the past there have been issues installing one of our dependencies (Naarad)\nif you encounter errors installing naarad see\nhttps://github.com/linkedin/naarad/wiki/Installation\n\nBasic usage\n-----------\n\nUse the zopkio main script::\n\n zopkio testfile\n\nZopkio takes several optional arguments::\n\n --test-only [TEST_LIST [TEST_LIST ...]]\n run only the named tests to help debug broken tests\n --machine-list [MACHINE_LIST [MACHINE_LIST ...]]\n mapping of logical host names to physical names\n allowing the same test suite to run on different\n hardware, each argument is a pair of logical name and\n physical name separated by a =\n --config-overrides [CONFIG_OVERRIDES [CONFIG_OVERRIDES ...]]\n config overrides at execution time, each argument is a\n config with its value separated by a =. This has the\n highest priority of all configs\n -d OUTPUT_DIR, --output-dir OUTPUT_DIR\n Specify the output directory for logs and test results.\n By default, Zopkio will write to the current directory.\n --log-level LOG_LEVEL\n Log level (default INFO)\n --console-log-level CONSOLE_LEVEL\n Console Log level (default ERROR)\n --nopassword Disable password prompt\n --user USER user to run the test as (defaults to current user)\n\nTesting with Zopkio\n-------------------\n\nZopkio provides the ability to write tests that combine performance and\nfunctional testing across a distributed service or services.\nWriting tests using Zopkio should be nearly as simple as writing tests in xUnit\nor Nose etc. A test suite will consist of a single file specifying four\nrequired pieces:\n\n#. A deployment file\n#. One or more test files\n#. A dynamic configuration file\n#. A config directory\n\nFor simplicity in the first iteratation this is assumed to be json or a python\nfile with a dictionary called *test*.\n\nDeployment\n~~~~~~~~~~\n\nThe deployment file should be pointed to by an entry in the dictionary called\n*deployment_code*. Deplyoment is one of the key features of Zopkio.\nDevelopers can write test in\nwhich they bring up arbtrary sets of services on multiple machines and then\nwithin the tests exercise a considerable degree of control over these machines.\nThe deployment section of code will be similar to deployment in other test\nframeworks but because of the increased complexity and the expectation of reuse\nacross multiple test suites, it can be broken into its own file.\n\nA deployment file can contain four functions:\n\n#. ``setup_suite``\n#. ``setup``\n#. ``teardown``\n#. ``teardown_suite``\n\nAs in other test frameworks, ``setup_suite`` will run before any of tests,\n``setup`` will run before each test, ``teardown`` will run if ``setup`` ran\nsuccessfully regardless of the test status, and ``teardown_suite`` will run if\n``setup_suite`` ran successfully regardless of any other conditions. The main\ndistinction in the case of this framework will be in the extended libraries to\nsupport deployment.\n\nIn many cases the main task of the deployment code is creating a Deployer.\nThis can be done using the SSHDeployer provided by the framework or through\ncustom code. For more information about deployers see the APIs. The ``runtime``\nmodule provides a helpful ``set_deployer(service_name)`` and\n``get_deployer(service_name)``. In addition to allowing the deployers to be\neasily shared across functions and modules, using these functions will allow\nthe framework to automatically handle certain tasks such as copying logs from\nthe remote hosts. Once the deployer is created it can be used in both the\nsetup and teardown functions to start and stop the services.\n\nSince the ``setup`` and ``teardown`` functions run before and after each test a\ntypical use is to restore the state of the system between tests to prevent\ntests from leaking bugs into other tests. If the ``setup`` or ``teardown``\nfails we will skip the test and mark it as a failure. In an effort to avoid\nwasting time with a corrupted stack there is a configuration\n``max_failures_per_suite_before_abort`` which can be set to determine how many\ntimes the frameworke will skip tests before autmatically skipping the remaining\ntests in that suite.\n\nIn addition the entire suite is rerun parameterized by the configurations (See\nconfigs_) there is a second config ``max_suite_failures_before_abort``\nwhich behaves similarly.\n\nTest Files\n~~~~~~~~~~\n\nTest files are specified by an entry in the test dictionary called *test_code*,\nwhich should point to a list of test files.\nFor each test file, the framework will execute any function with *test* in the\nname (no matter the case) and track if the function executes successfully. In\naddition if there is a function ``test_foo`` and a function ``validate_foo``,\nafter all cleanup and log collection is done, if ``test_foo`` executed successfully\nthen ``validate_foo`` will be executed and tested for successful execution if\nit fails, the original test will fail and the logs from the post execution will\nbe displayed. Test can be run in either a parallel mode or a serial mode. By\ndefault tests are run serially without any specified order. However each test file\nmay specify an attribute *test_phase*. A test_phase of -1 is equivalent to serial\ntesting. Otherwise all tests with the same test_phase will be run in parallel\ntogether. Phases proceed in ascending order.\n\nDynamic Configuration File\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe dynamic configuration component may be specified as either\n*dynamic_configuration_code* or *perf_code*. This module contains a number\nof configurations that can be used during the running of the tests to provide\ninputs for the test runner. The required elements are a function to return Naarad\nconfigs, and functions to return the locations of the logs to fetch from the\nremote hosts. There are also several configs which can be placed either in this\nmodule as attributes or in the Master config file. The main focus of this module\nis support for Naarad. The output of the load\ngeneration can be any format supported by Naarad including JMeter and CSV. The\nperformacnce file can also contain rules for Naarad to use to pass/fail the\ngeneral performance of a run (beyond rules specific to individual tests). To\nget the most from Naarad, a Naarad config file can be provided (see\nhttps://github.com/linkedin/naarad/blob/master/README.md section Usage). In\norder to have Naarad support the module should provide a function\n``naarad_config()``. There are also two functons\n``machine_logs()`` and ``naarad_logs()`` that should return dictionaries\nfrom ``unique_ids`` to the list of logs to collect. Machine logs are the\nset of logs that should not be processed by naarad.\n\n\n.. _configs:\n\nConfigs\n-------\n\nBeing able to test with different configurations is extremely important. The\nframework distinguishes between three types of configs:\n\n #. master config\n #. test configs\n #. application configs\n\nMaster configs are properties which affect the way zopkio operates. Current properties\nthat are supported include:\n * ``max_suite_failures_before_abort``\n * ``max_failures_per_suite_before_abort``\n * ``LOGS_DIRECTORY``\n * ``OUTPUT_DIRECTORY``\n\nTest configs are properties which affect how the tests are run. They are specific\nto the tests test writer and accessible from\n``runtime.get_config(config_name)`` which will return the stored value or the\nempty string if no property with that name is present. These are the properties\nthat can be overrode by the ``config-overrides`` command line flag.\nsome of the test configs that zopkio recognizes are:\n * ``loop_all_tests``\n * ``show_all_iterations``\n * ``verify_after_each_test``\n\n'loop_all_tests' repeats the entire test suite for that config for the specified number of times\n'show_all_iterations' shows the result in test page for each iteration of the test.\n'verify_after_each_test' forces the validation before moving onto the next test\n\nApplication configs are properties which affect how the remote services are\nconfigured. There is not currently an official way to copy these configs to remote\nhosts separately from the code, although there are several utilities to support it\n.\n\nIn order to allow the same tests to run over multiple configurations, the\nframework interprets configs accoriding to the following rules. All configs\nare grouped under a single folder. If this folder\ncontains at least one subfolder, then the config files at the top level are\nconsidered defaults and for each subfolder of the top folder, the entire test\nsuite will be run using the configs within that folder (plus the defaults and\nconfig overrides). This is the case in which\n``max_suite_failures_before_abort`` will be considered. Otherwise the suite\nwill be run once with the top level config files and overrides.\n\n\nExample Tests\n-------------\n1) command : zopkio examples/server_client/server_client.py\n\n- Runs bunch of tests with multiple clients and servers deployed\n\n2) command : zopkio examples/server_client/single_server_multipleiter_inorder.py --nopassword\n\n\n- The individual tests have the TEST_PHASE set to be 1,2,3 respectively. This enforces order.\n- To run multiple iterations set loop_all_tests to be in config.json file\n- To validate each run of the test before moving to next one set verify_after_each_test in configs\n- To show the pass/fail for each iteration set show_all_iterations to be true in configs\n- sample settings to get mulitple runs for this test\n #. \"show_all_iterations\":true,\n #. \"verify_after_each_test\":true,\n #. \"loop_all_tests\":2,\n\n3) command : zopkio examples/server_client/server_client_multiple_iteration.py\n\n- The base_tests_multiple_iteration.py module has TEST_ITER parameter set to 2.\n- This repeats all the tests twice but does not enfore any ordering\n\n4) command : zopkio examples/server_client/client_resilience.py\n\n- This is an example of the test recipe feature of zopkio. See test_recipes.py for recipe and test_resilience.py for example used here\n- This tests the kill_recovery recipe to which you pass the deployer, process list, optional restart func, recovery func and timeout\n- Zopkio will kill a random process of the deployer and verifies if the system can recover correctly based on recovery function before the timeout value", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/linkedin/zopkio/tarball/0.2.5", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/linkedin/zopkio", "keywords": null, "license": "Apache", "maintainer": null, "maintainer_email": null, "name": "zopkio", "package_url": "https://pypi.org/project/zopkio/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/zopkio/", "project_urls": { "Download": "https://github.com/linkedin/zopkio/tarball/0.2.5", "Homepage": "http://github.com/linkedin/zopkio" }, "release_url": "https://pypi.org/project/zopkio/0.2.5/", "requires_dist": null, "requires_python": null, "summary": "Zopkio: A distributed testing framework", "version": "0.2.5" }, "last_serial": 1770768, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "0f54a3174a27c105d12f3ee8e5d04f04", "sha256": "268e32e8143092417c07370c92c2bfd98e555b48af4aa8178cad0e48ea1038c4" }, "downloads": -1, "filename": "zopkio-0.1.1.tar.gz", "has_sig": false, "md5_digest": "0f54a3174a27c105d12f3ee8e5d04f04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2415371, "upload_time": "2014-12-09T07:38:12", "url": "https://files.pythonhosted.org/packages/97/65/855daf597698ce7eb1353a461eef6cd1ce1c9d45b17903579eb65f6d9ae8/zopkio-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "e8786e76d2f1333687578a7127dfbdb8", "sha256": "0f48a6644e0d4956d1ea48f49a81251e17ad003c8d1c6cc6dcd4e8386e1b7a35" }, "downloads": -1, "filename": "zopkio-0.1.10.tar.gz", "has_sig": false, "md5_digest": "e8786e76d2f1333687578a7127dfbdb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2432053, "upload_time": "2014-12-31T17:18:21", "url": "https://files.pythonhosted.org/packages/5b/58/572a2cb0f8289dbb8148679907b6d17c77201fefacf2d95e471e914ae4db/zopkio-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "4937dc508b70aa9a3542bb12efbd5c5f", "sha256": "8abbf2d80fa67bbd3ef0d32e9f6535599c73a97900065c20742a4bccebc0c7cc" }, "downloads": -1, "filename": "zopkio-0.1.11.tar.gz", "has_sig": false, "md5_digest": "4937dc508b70aa9a3542bb12efbd5c5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2465965, "upload_time": "2015-01-12T08:18:53", "url": "https://files.pythonhosted.org/packages/52/88/5bcd19427d44144bc1f1c274023d72448cad1e9556969db6d2f4e528ab5f/zopkio-0.1.11.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "07789de7b4d2a795c17ea3d5354258cc", "sha256": "8d978cbfb3f6c1e41e02dba1fde6a1fbaf05d3a5e686191c7cd29ae12c100c82" }, "downloads": -1, "filename": "zopkio-0.1.13.tar.gz", "has_sig": false, "md5_digest": "07789de7b4d2a795c17ea3d5354258cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2478280, "upload_time": "2015-02-09T07:40:22", "url": "https://files.pythonhosted.org/packages/75/e8/6a2103ac5189647a77af49fcafbadc1dfef438d663b034f422fc5f254b68/zopkio-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "983ace331d8f28a1eab3d961ddec03d7", "sha256": "59391957c27782a60b232766847030b1563df2e987f3102f0ccd95fe7cd141ba" }, "downloads": -1, "filename": "zopkio-0.1.14.tar.gz", "has_sig": false, "md5_digest": "983ace331d8f28a1eab3d961ddec03d7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46590, "upload_time": "2015-02-24T21:47:04", "url": "https://files.pythonhosted.org/packages/07/3a/404623fa9b226e6c48d95b5dcbf6a428ce3ab2f852e9ce8553852ec944a9/zopkio-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "dc73cae99375411785988fd543d96d2c", "sha256": "f6f7769759d120ce70402c825eb24d51ae7360553d0030e0c8e9c206c2aa1452" }, "downloads": -1, "filename": "zopkio-0.1.15.tar.gz", "has_sig": false, "md5_digest": "dc73cae99375411785988fd543d96d2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63848, "upload_time": "2015-02-27T19:20:19", "url": "https://files.pythonhosted.org/packages/73/7d/13046393a5d9366f33e84d2e6a0de33d155bb6bed445912a3fb2918001f3/zopkio-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "74199fbb1e4c091f5ef5acf985d4bcfa", "sha256": "94cee4ec2a08f82131f936712e4990c842e216ca76b761d5df733684a5c16257" }, "downloads": -1, "filename": "zopkio-0.1.16.tar.gz", "has_sig": false, "md5_digest": "74199fbb1e4c091f5ef5acf985d4bcfa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48074, "upload_time": "2015-03-06T23:24:48", "url": "https://files.pythonhosted.org/packages/4d/6e/05c15277b592c3902cc5779f0383383938ab3c99c573214584af693fb4aa/zopkio-0.1.16.tar.gz" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "5c33eebf7c7a7a9095f0aff6eda466ca", "sha256": "47bc8f65fd63a756bd93950a5b661ad7321752ca8ee65da7ece91099dad6d3d7" }, "downloads": -1, "filename": "zopkio-0.1.17.tar.gz", "has_sig": false, "md5_digest": "5c33eebf7c7a7a9095f0aff6eda466ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 64194, "upload_time": "2015-03-30T19:09:25", "url": "https://files.pythonhosted.org/packages/0b/79/0619740e2ef6093400ab6f07665abdf2765411701f1b633b289dccef6d7b/zopkio-0.1.17.tar.gz" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "2c529b7d557359733a2638578e42ab19", "sha256": "b3284be8606226acee132f9abbc5031caf9bf7896eb88fc6b23e2613be8f1724" }, "downloads": -1, "filename": "zopkio-0.1.18.tar.gz", "has_sig": false, "md5_digest": "2c529b7d557359733a2638578e42ab19", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47687, "upload_time": "2015-04-23T00:34:10", "url": "https://files.pythonhosted.org/packages/03/36/f9920c75a262ec3a0a2ed4b278317792cf53251ab750f3d06f3f91441a57/zopkio-0.1.18.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "334f4d15ba18e6949a7c5dd4f8c9f291", "sha256": "7ff1f2f85ed9ddb3d3c769c0c4435750d0419e3980d6d0e00eb92a60e1671132" }, "downloads": -1, "filename": "zopkio-0.1.19.tar.gz", "has_sig": false, "md5_digest": "334f4d15ba18e6949a7c5dd4f8c9f291", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47678, "upload_time": "2015-04-27T22:17:49", "url": "https://files.pythonhosted.org/packages/e3/a4/4f4c14688ec1d711559ebb0c3f4a0bce71385de307ed9df2ff90ca142ab2/zopkio-0.1.19.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "53dc62a58eef7d3171aace5186bf959c", "sha256": "93598e7a5ab1ee23816c32ed71750538e14797d545ef0817d056ed1b6dca6c29" }, "downloads": -1, "filename": "zopkio-0.1.3.tar.gz", "has_sig": false, "md5_digest": "53dc62a58eef7d3171aace5186bf959c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 68480, "upload_time": "2014-12-12T01:50:21", "url": "https://files.pythonhosted.org/packages/8e/e1/158f63b775916197cf20db58cf38bb2fb7ae0f0b8bc58579ea2ab779757b/zopkio-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b07eae1ea6d6809367504371d01a2d9c", "sha256": "97cf6fbe29a266981fbf115ed8e2b0e2bb6a4a92c9cbdda45d874979acbb56b7" }, "downloads": -1, "filename": "zopkio-0.1.4.tar.gz", "has_sig": false, "md5_digest": "b07eae1ea6d6809367504371d01a2d9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122297, "upload_time": "2014-12-12T08:00:51", "url": "https://files.pythonhosted.org/packages/3c/59/24615380138a7d3881db79fc886f3bbf39c415d4cfb7c70b033a03c96bd6/zopkio-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "4d930dcde58bed858e743dbabbeea654", "sha256": "85631f0cd0a9be817894f0523c0dd44050bd2c027de33a7365a8fac7a943f60f" }, "downloads": -1, "filename": "zopkio-0.1.5.tar.gz", "has_sig": false, "md5_digest": "4d930dcde58bed858e743dbabbeea654", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 153405, "upload_time": "2014-12-16T03:46:57", "url": "https://files.pythonhosted.org/packages/ba/8e/320e87ab91c7cf8bb9116881437d3838945140a1b9744b62893ded29f8a0/zopkio-0.1.5.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "35fbf1ea273f3d7182e23e47efc39f30", "sha256": "3fa0180439d49343d8f147fa7fee2975dd8a355e0008bd3e49131d8147862570" }, "downloads": -1, "filename": "zopkio-0.1.7.tar.gz", "has_sig": false, "md5_digest": "35fbf1ea273f3d7182e23e47efc39f30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 225326, "upload_time": "2014-12-19T00:55:16", "url": "https://files.pythonhosted.org/packages/3e/0a/fdf1478c0ce853870fa280ac4e18da4a632bf38a2816028f6bddf69b2e83/zopkio-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "e2bfb97b0e75929081f67f827da1d559", "sha256": "1e74949b62851d29ca4e01a5e723b5705b1809c30ba4562ab0fad9326f283ec2" }, "downloads": -1, "filename": "zopkio-0.1.8.tar.gz", "has_sig": false, "md5_digest": "e2bfb97b0e75929081f67f827da1d559", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2629910, "upload_time": "2014-12-22T06:50:47", "url": "https://files.pythonhosted.org/packages/1a/68/d94d5f5df076b3dcc77750984aab0a06e68737eef320f983357067aad40e/zopkio-0.1.8.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "197fb582e7446189b90370eef8877b80", "sha256": "60bfa851763c82a45059bbaa8b3e0672de4a15417508a03a8e9e181815e09fcf" }, "downloads": -1, "filename": "zopkio-0.2.0.tar.gz", "has_sig": false, "md5_digest": "197fb582e7446189b90370eef8877b80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124102, "upload_time": "2015-05-12T04:47:23", "url": "https://files.pythonhosted.org/packages/c0/9f/251ee565c024a908586f4531af33d477db4b8fb5c792f50a5041967f9d9b/zopkio-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "1dc96add7ac7b8ae17602595bc16c67c", "sha256": "1dd7f3a641534e914ae05984eec0c86c269a86b0e6764486623b4c8c14bead41" }, "downloads": -1, "filename": "zopkio-0.2.1.tar.gz", "has_sig": false, "md5_digest": "1dc96add7ac7b8ae17602595bc16c67c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2485796, "upload_time": "2015-05-28T19:36:01", "url": "https://files.pythonhosted.org/packages/37/0a/385eeee8c3a54fc8da687f2fe9fc93f2588778f982bae24ade4031b6db6e/zopkio-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "357be98c58d6a51344700ffee00f04ff", "sha256": "c2dfff16d4be0fa28c12c48550c1ef0264d47b1fa64e132c5de4c468848da1a5" }, "downloads": -1, "filename": "zopkio-0.2.2.tar.gz", "has_sig": false, "md5_digest": "357be98c58d6a51344700ffee00f04ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49829, "upload_time": "2015-06-29T22:40:56", "url": "https://files.pythonhosted.org/packages/c1/00/aa6e159822677f279c0b9fd6eecbc6326fc87a5107716a5414d27baf8ac8/zopkio-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "19c1c6acb6281ebe1a3814a3071369c4", "sha256": "562e750ad131f76648314dcd924eabc5bf1ceb5c02dcfdd3fb984fed007a4ac6" }, "downloads": -1, "filename": "zopkio-0.2.3.tar.gz", "has_sig": false, "md5_digest": "19c1c6acb6281ebe1a3814a3071369c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49863, "upload_time": "2015-08-11T21:30:05", "url": "https://files.pythonhosted.org/packages/8a/a9/48484ad399946a3f4f566a9f31e40a3f324f04652d066f6759f71a89e7e7/zopkio-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "3eefbb7bca5a45c655e36b37a5948a8c", "sha256": "32d1649d2fddecab87fbede6f77bb7f093186bda89f36d64fb3e66db4a155d88" }, "downloads": -1, "filename": "zopkio-0.2.4.tar.gz", "has_sig": false, "md5_digest": "3eefbb7bca5a45c655e36b37a5948a8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52426, "upload_time": "2015-09-21T23:15:01", "url": "https://files.pythonhosted.org/packages/8e/41/0fd2810e68e063b8d4fd40863b92506ae647878c19581d598efd557a7422/zopkio-0.2.4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "147399139a5f4911253e6feaba7d3fed", "sha256": "afb85e55dc0418b605bb73abf17f2da85ce47dfc8fbee25923fa760572cb9fa3" }, "downloads": -1, "filename": "zopkio-0.2.5.tar.gz", "has_sig": false, "md5_digest": "147399139a5f4911253e6feaba7d3fed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53353, "upload_time": "2015-10-15T21:19:58", "url": "https://files.pythonhosted.org/packages/30/44/6c1a9cd59451bdbc29c07ae3125dd7728b40d1fd6b7fde1bf58ca0b7e869/zopkio-0.2.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "147399139a5f4911253e6feaba7d3fed", "sha256": "afb85e55dc0418b605bb73abf17f2da85ce47dfc8fbee25923fa760572cb9fa3" }, "downloads": -1, "filename": "zopkio-0.2.5.tar.gz", "has_sig": false, "md5_digest": "147399139a5f4911253e6feaba7d3fed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53353, "upload_time": "2015-10-15T21:19:58", "url": "https://files.pythonhosted.org/packages/30/44/6c1a9cd59451bdbc29c07ae3125dd7728b40d1fd6b7fde1bf58ca0b7e869/zopkio-0.2.5.tar.gz" } ] }