{ "info": { "author": "Spencer Putt", "author_email": "sputt@alumni.iu.edu", "bugtrack_url": null, "classifiers": [ "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development" ], "description": "README for Qer Python Requirements Compiler\n============================================\n\n.. image:: https://travis-ci.org/sputt/qer.svg?branch=master\n :target: https://travis-ci.org/sputt/qer\n\n.. image:: https://img.shields.io/pypi/v/qer.svg\n :alt: PyPI Package version\n :target: https://pypi.python.org/pypi/qer\n\n================================\nQer Python Requirements Compiler\n================================\n\nQer is a Python work-in-progress requirements compiler geared toward large Python projects. It allows you to:\n\n* Produce an output file consisting of fully constrained exact versions of your requirements\n* Identify sources of constraints on your requirements\n* Constrain your output requirements using requirements that will not be included in the output\n* Save distributions that are downloaded while compiling\n* Use a current solution as a source of requirements. In other words, you can easily compile a subset from an existing solution.\n\nWhy use it?\n-----------\n**pip-tools** is the defacto requirements compiler for Python, but is missing some important features.\n\n* Does not allow you to use constraints that are not included in the final output\n* Provides no tools to track down where conflicting constraints originate\n* Cannot treat source directories recursively as package sources\n\nQer has these features, making it an effective tool for large Python projects.\n\nThis situation is very common:\n\nYou have a project with requirements ``requirements.txt`` and test requirements ``test-requirements.txt``. You want\nto produce a fully constrained output of ``requirements.txt`` to use to deploy your application. Easy, right? Just\ncompile ``requirements.txt``. However, if your test requirements will in any way constrain packages you need,\neven those needed transitively, it means you will have tested with different versions than you'll ship.\n\nFor this reason, you can user Qer to compile ``requirements.txt`` using ``test-requirements.txt`` as constraints.\n\nThe Basics\n----------\n\nInstall and run\n~~~~~~~~~~~~~~~\nQer can be simply installed by running::\n\n pip install qer\n\nTwo entrypoint scripts are provided::\n\n req-compile ... [--constraints constraint_file] [--index-url https://...]\n req-hash ... \n\nProducing output requirements\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nTo produce a fully constrained set of requirements for a given number of input requirements files, pass requirements\nfiles to req-compile::\n\n > cat requirements.txt\n astroid>=2.0.0\n isort >= 4.2.5\n mccabe\n\n > req-compile requirements.txt\n astroid==2.1.0 #\n futures==3.2.0 # isort\n isort==4.3.4 #\n lazy-object-proxy==1.3.1 #\n mccabe==0.6.1 #\n six==1.12.0 # astroid\n typing==3.6.6 # astroid\n wrapt==1.11.1 # astroid\n\nOutput is always emitted to stdout. Possible inputs include::\n\n > req-compile\n > req-compile .\n # Compiles the current directory (looks for a setup.py)\n\n > req-compile .[test]\n # Compiles the current directory with the extra \"test\"\n\n > req-compile subdir/project\n # Compiles the project in the subdir/project directory\n\n > req-compile subdir/project2[test,docs]\n # Compiles the project in the subdir/project2 directory with the test and docs extra requirements included\n\n > req-candidates --paths-only | req-compile\n # Search for candidates and compile them piped in via stdin\n\n > echo flask | req-compile\n # Compile the requirement 'flask' using the defaut remote index (PyPI)\n\n\nSpecifying source of distributions\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nQer supports obtaining python distributions from multiple sources, each of which can be specified more than once. The following sources\ncan be specified, resolved in the same order (e.g. source takes precedence over index-url):\n\n* ``--solution``\n\n Load a previous solution and use it as a source of distributions. This will allow a full\n recompilation of a working solution without requiring any other source. If the\n solution file can't be found, a warning will be emitted but not cause a failure\n* ``--source``\n\n Use a local filesystem with source python packages to compile from. This will search the entire\n tree specified at the source directory, until an __init__.py is reached. ``--remove-source`` can\n be supplied to remove results that were obtained from source directories. You may want to do\n this if compiling for a project and only third party requirements compilation results need to be saved.\n* ``--find-links``\n\n Read a directory to load distributions from. The directory can contain anything\n a remote index would, wheels, zips, and source tarballs. This matches pip's commmand line.\n* ``--index-url``\n\n URL of a remote index to search for packages in. When compiling, it's necessary to download\n a package to determine its requirements. ``--wheel-dir`` can be supplied to specify where to save\n these distributions. Otherwise they will be deleted after compilation is complete.\n\nAll options can be repeated multiple times, with the resolution order within types matching what\nwas passed on the commandline. However, overall resolution order will always match the order\nof the list above.\n\nBy default, PyPI (https://pypi.org/) is added as a default source. It can be removed by passing\n``--no-index`` on the commandline.\n\nIdentifying source of constraints\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nWhy did I just get version 1.11.0 of ``six``? Find out by examining the output::\n\n six==1.11.0 # astroid, pathlib2, pymodbus (==1.11.0), pytest (>=1.10.0), more_itertools (<2.0.0,>=1.0.0)\n\nHashing input requirements\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nHash input requirements by allowing Qer to parse, combine, and hash a single list. This will allow\nmultiple input files to be logically combined so irrelevant changes don't cause recompilations. For example,\nadding ``tenacity`` to a nested requirements file when ``tenacity`` is already included elsewhere.::\n\n > req-hash projectreqs.txt\n dc2f25c1b28226b25961a5320e25c339e630342d0ce700b126a5857eeeb9ba12\n\nConstraining output\n~~~~~~~~~~~~~~~~~~~\nConstrain production outputs with test requirements using the ``--constraints`` flag. More than one file can be\npassed::\n\n > cat requirements.txt\n astroid\n\n > cat test-requirements.txt\n pylint<1.6\n\n > req-compile requirements.txt --constraints test-requirements.txt\n astroid==1.4.9 # (via constraints: pylint (<1.5.0,>=1.4.5))\n lazy-object-proxy==1.3.1 # astroid\n six==1.12.0 # astroid\n wrapt==1.11.1 # astroid\n\nNote that astroid is constrained by ``pylint``, even though ``pylint`` is not included in the output.\n\nAdvanced Features\n-----------------\nCompiling a constrained subset\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nInput can be supplied via stdin as well as via as through files. For example, to supply a full\nsolution through a second compilation in order to obtain a subset of requirements, the\nfollowing cmdline might be used::\n\n > req-compile requirements.txt --constraints compiled-requirements.txt\n\nor, for example to consider two projects together::\n\n > req-compile /some/other/project /myproject | req-compile /myproject --solution -\n\nwhich is equivalent to::\n\n > req-compile /myproject --constraints /some/other/project\n\nResolving constraint conflicts\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nConflicts will automatically print the source of each conflicting requirement::\n\n > cat projectreqs.txt\n astroid<1.6\n pylint>=1.5\n\n > req-compile projectreqs.txt\n No version of astroid could satisfy the following requirements:\n projectreqs.txt requires astroid<1.6\n pylint 1.9.4 (via projectreqs.txt (>=1.5)) requires astroid<2.0,>=1.6\n\nSaving distributions\n~~~~~~~~~~~~~~~~~~~~\nFiles downloading during the compile process can be saved for later install. This can optimize\nthe execution times of builds when a separate compile step is required::\n\n > req-compile projectreqs.txt --wheel-dir .wheeldir > compiledreqs.txt\n > pip install -r compilereqs.txt --find-links .wheeldir --no-index\n\nCookbook\n--------\nSome useful patterns for projects are outlined below.\n\nCompile, then install\n~~~~~~~~~~~~~~~~~~~~~\nAfter requirements are compiled, the usual next step is to install them\ninto a virtualenv.\n\nA script for test might run::\n\n > req-compile --extra test --solution compiled-requirements.txt --wheel-dir .wheeldir > compiled-requirements.txt\n > pip-sync compiled-requirement.txt --find-links .wheeldir --no-index\n or\n > pip install -r compiled-requirements.txt --find-links .wheeldir --no-index\n\nThis would produce an environment containing all of the requirements and test requirements for the project\nin the current directory (as defined by a setup.py). This is a *stable* set, in that only changes to\nthe requirements and constraints would produce a new output. To produce a totally fresh compilation,\ndon't pass in a previous solution.\n\nThe find-links parameter to the sync or pip install will *reuse* the wheels already downloaded by Qer during\nthe compilation phase. This will make the installation step entirely offline.\n\nWhen taking this environment to deploy, trim down the set to the install requirements::\n\n > req-compile --solution compiled-requirements.txt --no-index > install-requirements.txt\n\ninstall-requirements.txt will contain the pinned requirements that should be installed in your\ntarget environment. The reason for this extra step is that you don't want to distribute\nyour test requirements, and you also want your installed requirements to be the same\nversions that you've tested with. In order to get all of your explicitly declared\nrequirements and all of the transitive dependencies, you can use the prior solution to\nextract a subset. Passing the ``--no-index`` makes it clear that this command will not\nhit the remote index at all (though this would naturally be the case as solution files\ntake precedence over remote indexes in repository search order).\n\nCompile for a group of projects\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nQer can discover requirements that are grouped together on the filesystem. The\n``req-candidates`` command will print discovered projects and with the ``--paths-only`` options\nwill dump their paths to stdout. This allows recursive discovery of projects that you\nmay want to compile together.\n\nFor example, consider a filesystem with this layout::\n\n solution\n \\_ utilities\n | \\_ network_helper\n |_ integrations\n | \\_ github\n \\_ frameworks\n |_ neural_net\n \\_ cluster\n\nIn each of the leaf nodes, there is a setup.py and full python project. To compile these\ntogether and ensure that their requirements will all install into the same environment::\n\n > cd solution\n > req-candidates --paths-only\n /home/user/projects/solution/utilities/network_helper\n /home/user/projects/solution/integrations/github\n /home/user/projects/solution/frameworks/neural_net\n /home/user/projects/solution/frameworks/cluster\n\n > req-candidates --paths-only | req-compile --extra test --solution compiled-requirements.txt --wheel-dir .wheeldir > compiled-requirements.txt\n .. all reqs and all test reqs compiled together...\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/sputt/qer", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "qer", "package_url": "https://pypi.org/project/qer/", "platform": "", "project_url": "https://pypi.org/project/qer/", "project_urls": { "Homepage": "https://github.com/sputt/qer" }, "release_url": "https://pypi.org/project/qer/0.8.0/", "requires_dist": [ "requests", "six", "functools32 ; python_version < \"3.0\"", "enum34 ; python_version < \"3.0\"" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "summary": "Python requirements compiler", "version": "0.8.0" }, "last_serial": 5488929, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "d33a2789338b934ac4772ca233ae04c6", "sha256": "6188b8f211bf633c8dd80e42304c1679030123e28f32713dcb2faef5bdab62b6" }, "downloads": -1, "filename": "qer-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "d33a2789338b934ac4772ca233ae04c6", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12649, "upload_time": "2019-02-13T07:49:55", "url": "https://files.pythonhosted.org/packages/b3/7e/f35052c31ed5ad55f089890c1b7c58978cba765c6c2944ae786e9333e7aa/qer-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49e86f2be33fdff84a3a1db1b89056ec", "sha256": "00fb3e32ab6f2552216c110737194203bbe7973298a19785529b3bc3abc2daca" }, "downloads": -1, "filename": "qer-0.1.0.tar.gz", "has_sig": false, "md5_digest": "49e86f2be33fdff84a3a1db1b89056ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11611, "upload_time": "2019-02-13T07:49:57", "url": "https://files.pythonhosted.org/packages/08/59/116a5d0b995502440b7a419c403fe13d15ada66237fb83393333067826e7/qer-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "e58da0d7f1cfae9f006a2525ade559e1", "sha256": "ef0b4f285cbafe98fdc06f69e4ee515def37a74e134179677a2b9fcf6c2e84de" }, "downloads": -1, "filename": "qer-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "e58da0d7f1cfae9f006a2525ade559e1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12709, "upload_time": "2019-02-13T08:18:00", "url": "https://files.pythonhosted.org/packages/83/29/70bbd925d1fae6a4a4c35eb1b5bbbcd989e4ea779df0195115e9cd91f31c/qer-0.1.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08f10ab9a89eedada104aab3eab96745", "sha256": "8431f8b67fefd84d2b81f02ff704e2d1d8244be4c9c4ba1570b816dbc9f51036" }, "downloads": -1, "filename": "qer-0.1.1.tar.gz", "has_sig": false, "md5_digest": "08f10ab9a89eedada104aab3eab96745", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11641, "upload_time": "2019-02-13T08:18:01", "url": "https://files.pythonhosted.org/packages/9a/68/d43edbfc020020d1a556b67f21fc472b87326565dcfad033574d26f14ca5/qer-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "8f1d9857b80747c2370e2c0c1cba3fb5", "sha256": "12784499a6f273ed06f86ebd51eff224aeec73ce48b2c7be621f2da0e921de21" }, "downloads": -1, "filename": "qer-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8f1d9857b80747c2370e2c0c1cba3fb5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14248, "upload_time": "2019-02-17T07:11:00", "url": "https://files.pythonhosted.org/packages/7c/9b/fa9092d63571e8b2c2be03ee0044091ba4d9c3c34093072a777441c10b7c/qer-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ee4376912115cd8d9399fa642bc9d851", "sha256": "1ac681d6df31588375eaa5728d989cbeab46194a0f962cc6f0be70e88338c3f8" }, "downloads": -1, "filename": "qer-0.2.0.tar.gz", "has_sig": false, "md5_digest": "ee4376912115cd8d9399fa642bc9d851", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12783, "upload_time": "2019-02-17T07:11:02", "url": "https://files.pythonhosted.org/packages/be/1f/d17783aabdc7dfbf5368e7b144377a3356563c8000ed5a8146b8c4e0ebea/qer-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "8ce45424d3067bef608a1e2b29937176", "sha256": "0d598f4a0372bfe012dc7a99e2236c46f833d29a7ca916116275adfa8cbb3827" }, "downloads": -1, "filename": "qer-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ce45424d3067bef608a1e2b29937176", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 14413, "upload_time": "2019-02-17T11:51:17", "url": "https://files.pythonhosted.org/packages/17/05/65a9908c4bd9edc32611f6f9437d8a55ad63e218187146526bac489825c9/qer-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c9ad4f339956440f7ab546693a018c5", "sha256": "c660f4707a366c38bc0a837db38d572eb13b2f3e9e7b70b48cc823c9db1d4026" }, "downloads": -1, "filename": "qer-0.2.1.tar.gz", "has_sig": false, "md5_digest": "8c9ad4f339956440f7ab546693a018c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12901, "upload_time": "2019-02-17T11:51:18", "url": "https://files.pythonhosted.org/packages/4e/2d/db21254e8adcbebe7ec351fce0469e90c0ccfbf288eac6de36d41a9a8de6/qer-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "d60a6c554d124e89fce098d0e3adea1b", "sha256": "091aabe3f49756f1741e59324c9b7426417f52b74f74b808cf145b059baccccb" }, "downloads": -1, "filename": "qer-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d60a6c554d124e89fce098d0e3adea1b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 15085, "upload_time": "2019-02-19T05:58:19", "url": "https://files.pythonhosted.org/packages/b4/b8/c5d7db1418ae1cb86eae76cebbcc969d304905618fd3dab3cc4bd7c0cec7/qer-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56a28845cbf2c960f2818ac89e0e77a4", "sha256": "01fbe3472220cc5f91f949b49f5811e1f2587d14bcf80afcd38e7d53e9f4b13a" }, "downloads": -1, "filename": "qer-0.2.2.tar.gz", "has_sig": false, "md5_digest": "56a28845cbf2c960f2818ac89e0e77a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13545, "upload_time": "2019-02-19T05:58:21", "url": "https://files.pythonhosted.org/packages/4d/e0/9701cce2ff005af5380a972a5ccd96483dd034dd2479e9988ab87fcf9ec8/qer-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "4d2f1b655300f2fe2487fbdba5e2a5a2", "sha256": "75b7c25cbc9d03e308b30ed80e71be5d553c8d04d6277e42280049ff30ef8e86" }, "downloads": -1, "filename": "qer-0.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d2f1b655300f2fe2487fbdba5e2a5a2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 18374, "upload_time": "2019-03-06T06:42:25", "url": "https://files.pythonhosted.org/packages/c8/fe/9b904e68aa4c0abf9bd20d2c3978df559908d02fb7e8cd48af7e320d9bdc/qer-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "58edf148e2ced3ebb07c016f11e93d8d", "sha256": "80fb7be70bdd2ac6231b965240c56a432498b993e4230e708e29dd7f2193b50f" }, "downloads": -1, "filename": "qer-0.3.0.tar.gz", "has_sig": false, "md5_digest": "58edf148e2ced3ebb07c016f11e93d8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15938, "upload_time": "2019-03-06T06:42:27", "url": "https://files.pythonhosted.org/packages/6c/01/02ac74c51d0a89c178b5c30f8b4e290830d24ed266d830cd671b27a9cae8/qer-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "33f22e335fd1e45bebc0a6ae9ae542f1", "sha256": "8b61add9b82deea5af43f800efbd159e194e39f97194c4ffefa8a6dfe4180747" }, "downloads": -1, "filename": "qer-0.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "33f22e335fd1e45bebc0a6ae9ae542f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19930, "upload_time": "2019-03-10T03:15:05", "url": "https://files.pythonhosted.org/packages/85/1a/0a60f7ee52a5f7d62801f4b3f4d47e558fc237c3ac7feccc0ec724b29d04/qer-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0662db6a95b313435d998b2d62a634fe", "sha256": "ef0aea637d3c65aed8ed40e9de61fe7c096e465ca7fcf9b3dfe2f10219355bf4" }, "downloads": -1, "filename": "qer-0.4.0.tar.gz", "has_sig": false, "md5_digest": "0662db6a95b313435d998b2d62a634fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17351, "upload_time": "2019-03-10T03:15:07", "url": "https://files.pythonhosted.org/packages/36/c7/15cbacca62aa353b9bef4a4bc824ad225268c5056a4df849c64875040c95/qer-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "9849847c4c4e2cf0e8e95b43a2ef28ca", "sha256": "7a0244f9646e436f3eebb5b45b1ec7ee6bd32afc60b9cc89520f7ce7f577e6c7" }, "downloads": -1, "filename": "qer-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9849847c4c4e2cf0e8e95b43a2ef28ca", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22741, "upload_time": "2019-03-16T09:40:52", "url": "https://files.pythonhosted.org/packages/54/04/fc884252b2f8c32768c51712c8ff78794a2ff4b4da929a988903454dfa12/qer-0.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5030f15664f733807e5da9148156a4e8", "sha256": "237eacfecbd9703db4cc61600a87ba681cd11c55556374eed14c0fd6327bf576" }, "downloads": -1, "filename": "qer-0.4.1.tar.gz", "has_sig": false, "md5_digest": "5030f15664f733807e5da9148156a4e8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19217, "upload_time": "2019-03-16T09:40:53", "url": "https://files.pythonhosted.org/packages/90/39/2d6adbb08a57b1496a93829c3064c9a55f026e12af6fc57d99832ad5816d/qer-0.4.1.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "8e007483e152b1f423e6b44241b0e204", "sha256": "552329c02814cefa9faa9dce7a6292f9ec199685d3ed1bc997c2aa2e013b539a" }, "downloads": -1, "filename": "qer-0.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8e007483e152b1f423e6b44241b0e204", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 24602, "upload_time": "2019-03-19T07:30:44", "url": "https://files.pythonhosted.org/packages/44/91/c1e1380f0de8f30f6f7b4953602d61e1315b117c9e97f9324a2b560c1e76/qer-0.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db55222fe5d54946c8fa4f63714ec410", "sha256": "c17b71d9a7d4191f85e70807c5377edda4ef923b4528a255236f4b9bd874f4aa" }, "downloads": -1, "filename": "qer-0.5.1.tar.gz", "has_sig": false, "md5_digest": "db55222fe5d54946c8fa4f63714ec410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20602, "upload_time": "2019-03-19T07:30:46", "url": "https://files.pythonhosted.org/packages/43/27/0d625c53ab22d632a1a100e4ef61157447a1bd5fafd3e0c2e3690093547b/qer-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "ef702f5250cd8d749d83072d2a96a6dc", "sha256": "53f58db7649afaa602987d009e38754fe9b634ba5e9832fa1e1c7dc8eff7d0c7" }, "downloads": -1, "filename": "qer-0.5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ef702f5250cd8d749d83072d2a96a6dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25799, "upload_time": "2019-03-22T07:30:49", "url": "https://files.pythonhosted.org/packages/59/fa/7f3727e9c027d351bbb8118637c2a906248f04bc6f5802c4522b10ed885a/qer-0.5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f4245fa51331993bcedb474bb226af0", "sha256": "09f80bea7ad26a794f3be0f2d6affcee5c0be745cd4dfac1f1110aebae7f99ca" }, "downloads": -1, "filename": "qer-0.5.2.tar.gz", "has_sig": false, "md5_digest": "8f4245fa51331993bcedb474bb226af0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21477, "upload_time": "2019-03-22T07:30:50", "url": "https://files.pythonhosted.org/packages/5b/b5/5d6aab58c8febf3c1a5f7a6e4d09a28bcb798e6fdb7bedb97722daa845cb/qer-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "485fd166d2e31cdd038d86774759990d", "sha256": "7cd6948a05ad4e5895eff8a501fc851d48a7adb6f1d3c5ecf1c51b73f3362411" }, "downloads": -1, "filename": "qer-0.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "485fd166d2e31cdd038d86774759990d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27198, "upload_time": "2019-05-11T07:30:42", "url": "https://files.pythonhosted.org/packages/2a/e6/41b405d09985d8a927969544267d718a06e0923c93573dc20a726c7db81b/qer-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ec48476b033013148211d0dd152eb5b", "sha256": "ed6033da1d50ca4253d43dd65e296eab10403003e520fd6c3eee76e25d4eab85" }, "downloads": -1, "filename": "qer-0.6.0.tar.gz", "has_sig": false, "md5_digest": "0ec48476b033013148211d0dd152eb5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22144, "upload_time": "2019-05-11T07:30:43", "url": "https://files.pythonhosted.org/packages/fe/85/b946c5fc26ad09bb6b08ca88930fdb2d46844f0888d3f4c8366f277aca4c/qer-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "271c703b086b1638ad319c1b95211204", "sha256": "f3d937e60e638f06b8a13261c30d71a773cfc5bb59db080cf3fafa22afc25bd6" }, "downloads": -1, "filename": "qer-0.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "271c703b086b1638ad319c1b95211204", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27214, "upload_time": "2019-05-11T08:07:28", "url": "https://files.pythonhosted.org/packages/27/b3/f8c1294a5e5c2cbb0d6d159644f90e805790d871aa1c9fe5973180616ee2/qer-0.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b23c10369955ff642e9c50fa87d82da", "sha256": "707f328603ad16f908ea9d7fd57d228b8644ae0cffeb0353aa63496930264bfe" }, "downloads": -1, "filename": "qer-0.6.1.tar.gz", "has_sig": false, "md5_digest": "3b23c10369955ff642e9c50fa87d82da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22194, "upload_time": "2019-05-11T08:07:29", "url": "https://files.pythonhosted.org/packages/01/9a/9a31004c14beaf2898da2174c709dd670c2d92f3cb2380bfe50f98dfd916/qer-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "6922659e5f105f00293e7746342730bf", "sha256": "e45b4aa871b23d1f92556f124ba8348e98331f5a5c716a39d259aa8571391459" }, "downloads": -1, "filename": "qer-0.6.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6922659e5f105f00293e7746342730bf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27373, "upload_time": "2019-05-13T05:22:29", "url": "https://files.pythonhosted.org/packages/61/e0/559ea469a30e4cd3574f9058f65c1e6de1165c61c90f7f39d3c0ce22abaf/qer-0.6.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7e060ea79e1b30f6db5ae8225a47b097", "sha256": "6d3ca7ea4a220926c7760544a88ffe5d44be3f0b80403ed1da04daefd3028783" }, "downloads": -1, "filename": "qer-0.6.2.tar.gz", "has_sig": false, "md5_digest": "7e060ea79e1b30f6db5ae8225a47b097", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22584, "upload_time": "2019-05-13T05:22:31", "url": "https://files.pythonhosted.org/packages/1c/31/6380309e89abfd02db15ee2b710a349ba67906ebc269def90a28bba951ca/qer-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "76efda746c6f482f10a91d52acfeeda3", "sha256": "6fc291f5df93310f3e276b94ebd38ebdcfd058e867dbf5b6cdce51d2d93d67fe" }, "downloads": -1, "filename": "qer-0.6.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "76efda746c6f482f10a91d52acfeeda3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27538, "upload_time": "2019-05-17T06:40:06", "url": "https://files.pythonhosted.org/packages/45/26/6883e62057e6bc4ac66975e69aeb3307668dc7389b1ef708216939c7af6d/qer-0.6.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1a907825945679a3ad3fcf5b99af6494", "sha256": "160f651c12524e6581deb9e9e1dae6e1e8f2ab1bc85e4833d502e86d718eb1c4" }, "downloads": -1, "filename": "qer-0.6.3.tar.gz", "has_sig": false, "md5_digest": "1a907825945679a3ad3fcf5b99af6494", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22739, "upload_time": "2019-05-17T06:40:08", "url": "https://files.pythonhosted.org/packages/f2/92/36c333247dd3548a4f881474f2500fb52c02e3bf1eaf871afaac912bf801/qer-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "49c26df1a8078392c8e6839a388bad7d", "sha256": "6a5e6849b613521ebf4907df4bbed03dc5abb2f530665db71182b930b91eeaff" }, "downloads": -1, "filename": "qer-0.6.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "49c26df1a8078392c8e6839a388bad7d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28298, "upload_time": "2019-05-27T01:30:45", "url": "https://files.pythonhosted.org/packages/8b/b4/e24a5212479dc35845ada74830ca6c4be4fb1908063d32dd5925e828f641/qer-0.6.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6bc11f651c2d9c794ada8645c2b1e9a1", "sha256": "218a911a82be7e4fd5de59fd05353c83f9bcde95ec69bee70d0f5862f95d47f6" }, "downloads": -1, "filename": "qer-0.6.4.tar.gz", "has_sig": false, "md5_digest": "6bc11f651c2d9c794ada8645c2b1e9a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23362, "upload_time": "2019-05-27T01:30:46", "url": "https://files.pythonhosted.org/packages/22/22/076146f0e4e5e52b0363bb468e64831cfa0b6b5ace25ab290188c2870e46/qer-0.6.4.tar.gz" } ], "0.6.5": [ { "comment_text": "", "digests": { "md5": "c4e4f498c7dc4af56508fe8be88c731f", "sha256": "459d3d27f6d17dffd80f90817d742abadedb55cc34652243949eebba8ebf906d" }, "downloads": -1, "filename": "qer-0.6.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c4e4f498c7dc4af56508fe8be88c731f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28606, "upload_time": "2019-05-27T04:28:50", "url": "https://files.pythonhosted.org/packages/6a/5f/05075f090cb7ccb801135f7abad83049fc6960b411ceb6b1476622979506/qer-0.6.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37bdcd24c71a9f073135aa86d83c5575", "sha256": "587c326cd711f2bde404ec077b1078d6c02733ccb2244a46604e14607f8b8520" }, "downloads": -1, "filename": "qer-0.6.5.tar.gz", "has_sig": false, "md5_digest": "37bdcd24c71a9f073135aa86d83c5575", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24297, "upload_time": "2019-05-27T04:28:51", "url": "https://files.pythonhosted.org/packages/28/9e/216d10e1d2cb50372382678ec6e741c525ac783b239c98559eb4d433dcdd/qer-0.6.5.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "af44bbf2567e51e8ad9f05162f53f1a9", "sha256": "448157d759f5e70346e2e88363dfc2d12c6d496dcbf0000523ed110c87b23c71" }, "downloads": -1, "filename": "qer-0.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "af44bbf2567e51e8ad9f05162f53f1a9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29680, "upload_time": "2019-05-27T23:35:02", "url": "https://files.pythonhosted.org/packages/ae/67/0bbf7a38bd46b5c88f4cbabadfa6ce1fa2bac6a87af8f2beebac702c9848/qer-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e035ff7d8e1087b34a8b96b73525b8fe", "sha256": "5860de7234d43859ac9d1ab77e2f1db094eae699c7589c14edee54889d230669" }, "downloads": -1, "filename": "qer-0.7.0.tar.gz", "has_sig": false, "md5_digest": "e035ff7d8e1087b34a8b96b73525b8fe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25136, "upload_time": "2019-05-27T23:35:04", "url": "https://files.pythonhosted.org/packages/d6/ec/5e39436a8163b0f70d2b818a180813ade08988262e5c5193c3395b8b1066/qer-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "e11cf6b718f585d44a943247d5cd3ae1", "sha256": "2ea5b2837761fa3a10022da1fc2f6b74791a67f66a4783257882f6a18d7ff1ea" }, "downloads": -1, "filename": "qer-0.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e11cf6b718f585d44a943247d5cd3ae1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 29781, "upload_time": "2019-05-28T02:04:24", "url": "https://files.pythonhosted.org/packages/af/f0/0c2390c75bebec25a87287386027d2c732c48b0150df0ea504c931fb7fa1/qer-0.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f0d90b6de31426403bdb6723e7fd6d3", "sha256": "4035b56608f5f296283479e01915774b3ee68330e6f4c20fdd2cd4c88d63b2c2" }, "downloads": -1, "filename": "qer-0.7.1.tar.gz", "has_sig": false, "md5_digest": "8f0d90b6de31426403bdb6723e7fd6d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25255, "upload_time": "2019-05-28T02:04:26", "url": "https://files.pythonhosted.org/packages/94/98/aa2d00aea0de4fb4f45cb2131253d5eb9ac5070c0fe606d0b4959adeae64/qer-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "5c46875d31d833537f66da4850c3a022", "sha256": "95ba3694364bd2cc0f17ec8cb1038581412896eb570353fa7828b8d24f2e04d8" }, "downloads": -1, "filename": "qer-0.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5c46875d31d833537f66da4850c3a022", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 30215, "upload_time": "2019-06-10T08:14:25", "url": "https://files.pythonhosted.org/packages/f8/f0/08cae96526d2175566c287dbc74ec1e22c092c4667b0768403256a83e9ee/qer-0.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c18db3e144a8419da2abfa33105b79a1", "sha256": "0bdf0b4274dfd7f3457ec1e2df7e508c35132f562a5f87dc28c4d94d1c4f1979" }, "downloads": -1, "filename": "qer-0.7.2.tar.gz", "has_sig": false, "md5_digest": "c18db3e144a8419da2abfa33105b79a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25539, "upload_time": "2019-06-10T08:14:26", "url": "https://files.pythonhosted.org/packages/fd/fe/63029254cbbbda5ae204f4decec544eb907eb4c158ef0fe8aba733250874/qer-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "f0cb3dc90d891d85505c5e721c57a465", "sha256": "ff0cc960459743f18b3de60d42c7da687406a92cbb0ef78b17199b5e835d9655" }, "downloads": -1, "filename": "qer-0.7.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0cb3dc90d891d85505c5e721c57a465", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37002, "upload_time": "2019-06-30T08:12:04", "url": "https://files.pythonhosted.org/packages/ae/fd/facc066afd9766cf6d64343678cf81296b20202e873d9becc26168647ea3/qer-0.7.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d0253297191157dc5d80c33cccabb19a", "sha256": "b87e46fadc2a5d426af2de858126eb94a7859a047f7ce32a8644d3dd9503ec91" }, "downloads": -1, "filename": "qer-0.7.3.tar.gz", "has_sig": false, "md5_digest": "d0253297191157dc5d80c33cccabb19a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33647, "upload_time": "2019-06-30T08:12:05", "url": "https://files.pythonhosted.org/packages/d4/95/e11e3059ea1b7172baca870290ba1208d6088ec7e3df91760894f2d41239/qer-0.7.3.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "a57f24c9c17d4ca726c3ffd0a6be8e2c", "sha256": "273bbd5bbc12a3dbac316b394bd523e06d87ee97cfd90de43d8583ef47c0b208" }, "downloads": -1, "filename": "qer-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a57f24c9c17d4ca726c3ffd0a6be8e2c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 37926, "upload_time": "2019-07-04T22:35:11", "url": "https://files.pythonhosted.org/packages/88/a5/5c63ee58461b519d2155e2f5bad66e8a175331652e7b589728af6f8f7cbd/qer-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9532ce8827b0dd7cd700e97b0b756566", "sha256": "f91e6663a77cc6b8fd37841d1c58ccb89daf655d23f2ded08434b66227ad4e9d" }, "downloads": -1, "filename": "qer-0.8.0.tar.gz", "has_sig": false, "md5_digest": "9532ce8827b0dd7cd700e97b0b756566", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 34381, "upload_time": "2019-07-04T22:35:13", "url": "https://files.pythonhosted.org/packages/90/37/0b15aec412ab56bfea3fc07802912f94bbc2250689ec08a45a2c603c7e0d/qer-0.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a57f24c9c17d4ca726c3ffd0a6be8e2c", "sha256": "273bbd5bbc12a3dbac316b394bd523e06d87ee97cfd90de43d8583ef47c0b208" }, "downloads": -1, "filename": "qer-0.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a57f24c9c17d4ca726c3ffd0a6be8e2c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 37926, "upload_time": "2019-07-04T22:35:11", "url": "https://files.pythonhosted.org/packages/88/a5/5c63ee58461b519d2155e2f5bad66e8a175331652e7b589728af6f8f7cbd/qer-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9532ce8827b0dd7cd700e97b0b756566", "sha256": "f91e6663a77cc6b8fd37841d1c58ccb89daf655d23f2ded08434b66227ad4e9d" }, "downloads": -1, "filename": "qer-0.8.0.tar.gz", "has_sig": false, "md5_digest": "9532ce8827b0dd7cd700e97b0b756566", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", "size": 34381, "upload_time": "2019-07-04T22:35:13", "url": "https://files.pythonhosted.org/packages/90/37/0b15aec412ab56bfea3fc07802912f94bbc2250689ec08a45a2c603c7e0d/qer-0.8.0.tar.gz" } ] }