{ "info": { "author": "Aaron Biller", "author_email": "aaronbiller@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database", "Topic :: Utilities" ], "description": "|Comparator|\n\nCOMPARATOR\n==========\n\n|pypi| |versions| |CircleCI| |Coverage Status|\n\nComparator is a utility for comparing the results of queries run against\ntwo databases. Future development will include support for APIs, static\nfiles, and more.\n\nInstallation\n------------\n\n.. code:: bash\n\n pip install comparator\n\nUsage\n-----\n\nOverview\n~~~~~~~~\n\n.. code:: python\n\n from spackl import db\n\n import comparator as cpt\n\n conf = db.Config()\n l = db.Postgres(**conf.default)\n r = db.Postgres(**conf.other_db)\n query = 'SELECT * FROM my_table ORDER BY 1'\n\n c = cpt.Comparator(l, query, r)\n c.run_comparisons()\n\n::\n\n [('basic_comp', True)]\n\nIncluded Comparisons\n~~~~~~~~~~~~~~~~~~~~\n\nThere are some basic comparisons included, and they can be imported and\npassed using constants.\n\n.. code:: python\n\n from comparator.comps import BASIC_COMP, LEN_COMP\n\n c = cpt.Comparator(l, query, r, comps=[BASIC_COMP, LEN_COMP])\n c.run_comparisons()\n\n::\n\n [('basic_comp', True), ('len_comp', True)]\n\nQueries and Exceptions\n~~~~~~~~~~~~~~~~~~~~~~\n\nIt\u2019s possible to run different queries against each database. You can\nraise exceptions if that\u2019s your speed.\n\n.. code:: python\n\n lq = 'SELECT * FROM my_table ORDER BY 1'\n rq = 'SELECT id, uuid, name FROM reporting.my_table ORDER BY 1'\n comparisons = [BASIC_COMP, LEN_COMP]\n\n c = cpt.Comparator(l, lq, r, rq, comps=comparisons)\n\n for result in c.compare():\n if not result:\n raise Exception('{} check failed!'.format(result.name))\n\nCustom Comparisons\n~~~~~~~~~~~~~~~~~~\n\nYou\u2019ll probably want to define your own comparison checks. You can do so\nby defining functions that accept ``left`` and ``right`` args, which correspond\nto the results of the queries against your \"left\" and \"right\" data source,\nrespectively. Perform whatever magic you like, and return a boolean (or not\u2026 your choice).\n\n.. code:: python\n\n def left_is_longer(left, right):\n # Return True if left contains more rows than right\n return len(left) > len(right)\n\n\n def totals_are_equal(left, right):\n # Return True if sum(left) == sum(right)\n sl, sr = 0, 0\n for row in left:\n sl += int(row[1])\n for row in right:\n sr += int(row[1])\n return sl == sr\n\n\n c = cpt.Comparator(l, query, r, comps=[left_is_longer, totals_are_equal])\n c.run_comparisons()\n\n::\n\n [('left_is_longer', False), ('totals_are_equal', True)]\n\nAccess Comparator and Query Results\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe results of both queries and comparisons can be checked using\nstandard operators, as well as for \u201ctruthiness\u201d (ex:\n``failures = [result.name for result in c.compare() if result is False]``).\n\nComparisons do not always need to return a boolean. Accessing the\nresulting value of such a comparison is simple.\n\n.. code:: python\n\n def len_diff(left, right):\n return len(left) - len(right)\n\n\n c = cpt.Comparator(l, query, r, comps=len_diff)\n res = c.run_comparisons()[0]\n if res == 0:\n print('They match')\n elif res < 0:\n print('Left is shorter by {}'.format(res.result))\n else:\n print('Left is longer by {}'.format(res.result))\n\nIt's recommended that you use the ``spackl`` package for instantiating your\n\"left\" and \"right\" data source objects (``pip install spackl``). This package\nwas originally part of ``comparator``, and provides the following functionality:\n\nQuery results are contained in the ``QueryResult`` class, which provides\nsimple yet powerful ways to look up and access the output of the query.\nData can be retrieved as a dict, list, json string, or pandas DataFrame.\nRows/columns can be accesed by index, attribute, or key. Iterating on\nthe ``QueryResult`` returns a ``QueryResultRow``, which has the same\nlookup functionality, as well as standard operators (<, >, =, etc).\n\n.. code:: python\n\n from spackl import db\n\n conf = db.Config()\n pg = db.Postgres(**conf.default)\n res = pg.query(query_string)\n\n res # [{'a': 1, 'b': 2, 'c': 3}, {'a': 4, 'b': 5, 'c': 6}, {'a': 7, 'b': 8, 'c': 9}]\n\n res.a # (1, 4, 7)\n res['a'] # (1, 4, 7)\n res[0] # QueryResultRow : (1, 2, 3)\n\n res[0].a # 1\n res[0]['a'] # 1\n res[0][0] # 1\n\n res.dict() # {'a': (1, 4, 7), 'b': (2, 5, 8), 'c': (3, 6, 9)}\n res.list() # [(1, 2, 3), (4, 5, 6), (7, 8, 9)]\n res.first() # QueryResultRow : (1, 2, 3)\n\nThese result sets can be used to great effect in comparison callables.\nFor example, accessing the result of a query as a pandas DataFrame\nallows for an endless variety of checks/manipulations do be done on a\nsingle query output.\n\nSupport is being added to ``spackl`` to allow for querying from files and APIs\nusing the same methods, allowing for easy comparison between many disparate\ndata sources. Stay tuned.\n\n.. |Comparator| image:: https://raw.githubusercontent.com/aaronbiller/comparator/master/docs/comparator.jpg\n.. |pypi| image:: https://img.shields.io/pypi/v/comparator.svg\n :target: https://pypi.org/project/comparator/\n.. |versions| image:: https://img.shields.io/pypi/pyversions/comparator.svg\n :target: https://pypi.org/project/comparator/\n.. |CircleCI| image:: https://circleci.com/gh/aaronbiller/comparator/tree/master.svg?style=shield\n :target: https://circleci.com/gh/aaronbiller/comparator/tree/master\n.. |Coverage Status| image:: https://coveralls.io/repos/github/aaronbiller/comparator/badge.svg?branch=master\n :target: https://coveralls.io/github/aaronbiller/comparator?branch=master\n\nCHANGELOG\n=========\n\n0.4.0 (2019-03-09)\n------------------\n\n- BREAKING - All ``source`` modules and methods have been stripped out\n- Functionality has been moved to the ``spackl`` package (``pip install spackl``)\n- The ``comparator`` package will expect ``spackl`` to be used for all ``left`` and ``right`` data sources\n\n0.4.0rc3 (2018-12-05)\n---------------------\n\n- Adds better transaction handling in the PostgresDb class\n- Cleans up calls to connect() in the Db classes\n\n0.4.0rc2 (2018-12-05)\n---------------------\n\n- BREAKING - ``QueryPair`` arguments order has changed (``QueryPair(left, lquery, right, rquery)``)\n- ``QueryPair``, ``Comparator``, and ``ComparatorSet`` no longer require a \"right\" Db\n\n0.4.0rc1 (2018-11-07)\n---------------------\n\n- DEPRECATED - the ``from_list`` method on ``ComparatorSet``\n- adds the ``QueryPair`` class\n- BREAKING - ``Comparator`` and ``ComparatorSet`` are instantiated with ``QueryPair`` objects\n- BREAKING - ``ComparatorSet.from_dict()`` requires the dict as the first argument\n- BREAKING - ``QueryResult.keys()`` and ``QueryResult.values()`` both return generators\n- the ``rquery`` passed to a ``QueryPair`` can be formatted with the ``lquery`` query result\n- adds the ``QueryResultCol`` class\n- adds the ``append``, ``pop``, ``extend``, and ``filter`` methods on ``QueryResult``\n- downgrades pandas version requirement to >=0.22.0\n- improves docstrings on ``QueryResult`` methods\n- adds slice handling to ``QueryResult``\n- adds ``empty`` property to ``QueryResult``\n\n0.3.2 (2018-10-04)\n------------------\n\n- adds MANIFEST.in for readme and changes\n\n0.3.1 (2018-10-03)\n------------------\n\n- adds ``creds_file`` to possible BigQueryDb init kwargs\n\n0.3.0 (2018-10-03)\n------------------\n\n- DEPRECATED - the ``query_df`` method on ``BaseDb`` and subclasses\n- DEPRECATED - the ``output`` kwarg for Comparator results\n- adds the ``execute`` method on ``BaseDb`` and subclasses\n- adds the ``QueryResult`` and ``QueryResultRow`` classes\n- adds the ``ComparatorSet`` class\n- adds ``list_tables`` and ``delete_table`` methods to ``BigQueryDb``\n- cleans up some python 2/3 compatability using six\n\n0.2.1 (2018-09-19)\n------------------\n\n- officially support Python 2.7, 3.6, and 3.7\n\n0.2.0 (2018-09-18)\n------------------\n\n- adds ``query_df`` methods for returning pandas DataFrames\n- adds ``output`` kwarg to Comparator to allow calling the ``query_df`` method\n\n0.1.0 (2018-09-12)\n------------------\n\n- initial release", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/aaronbiller/comparator", "keywords": "utility compare database", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "comparator", "package_url": "https://pypi.org/project/comparator/", "platform": "", "project_url": "https://pypi.org/project/comparator/", "project_urls": { "Homepage": "https://github.com/aaronbiller/comparator" }, "release_url": "https://pypi.org/project/comparator/0.4.0/", "requires_dist": null, "requires_python": "", "summary": "Utility for comparing results between data sources", "version": "0.4.0" }, "last_serial": 4918209, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "6bc5c49efc81ec6940b657c0dc891ff2", "sha256": "11715001c1230c143cabab2ee485ed528885f1909cfda0afb66554e363e92fae" }, "downloads": -1, "filename": "comparator-0.1.0-py3.6.egg", "has_sig": false, "md5_digest": "6bc5c49efc81ec6940b657c0dc891ff2", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 36999, "upload_time": "2018-09-12T03:00:35", "url": "https://files.pythonhosted.org/packages/22/91/f825c450a4765356ed610613ffe5908711a6e51fbd26b76a24bd30026c2f/comparator-0.1.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "eaa8a5a4d1964476d5c9e5a657ffd246", "sha256": "17a9e3fb6b3a3bf4f2ff3a9a1c3261f789e49c4c75f2d4866e574014a6fa5d69" }, "downloads": -1, "filename": "comparator-0.1.0.tar.gz", "has_sig": false, "md5_digest": "eaa8a5a4d1964476d5c9e5a657ffd246", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10580, "upload_time": "2018-09-12T03:00:36", "url": "https://files.pythonhosted.org/packages/06/40/768a3b6d1b52d5bb824b1b43cf95a65319f0ad89a1b3f0b6a024cf89e95d/comparator-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b98c0ba01942eef80eb42da23dc5677a", "sha256": "5ada3832641911e36a7298aa079ac7cd65c45bc3f9443427071296cff6775932" }, "downloads": -1, "filename": "comparator-0.2.0-py3.6.egg", "has_sig": false, "md5_digest": "b98c0ba01942eef80eb42da23dc5677a", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 39440, "upload_time": "2018-09-18T22:38:55", "url": "https://files.pythonhosted.org/packages/ed/63/30be1092a0bce40160f2e2ad171ce862fd8a103650c78331101a56c569e6/comparator-0.2.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "a7a6545eb961e6f49a8d2caa6988dbbc", "sha256": "7720922ce54c9353aa39b98828d9e2d5caf88781406559b9047cc1446fb2f0c0" }, "downloads": -1, "filename": "comparator-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a7a6545eb961e6f49a8d2caa6988dbbc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11567, "upload_time": "2018-09-18T22:38:56", "url": "https://files.pythonhosted.org/packages/bc/de/8215834f7e42fad71a339c546aabee280106ff58f9b2bea4d9cd8fa3c021/comparator-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "086729fb5c79265b3389f5139e3b1807", "sha256": "b7d97518861c69fc8fa5f5198f6ab18839a7a45f99f98d858073c7cea3f34078" }, "downloads": -1, "filename": "comparator-0.2.1-py2.7.egg", "has_sig": false, "md5_digest": "086729fb5c79265b3389f5139e3b1807", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 39043, "upload_time": "2018-09-19T05:44:04", "url": "https://files.pythonhosted.org/packages/05/3f/41d8f9816c0c164a4fa30f0a1297aeb153b2dc2c8c4bdff6dc898ca3a5f0/comparator-0.2.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "809f2ea8aeed1f961d3fe79e1d1daf53", "sha256": "4a27132f8f1bf97214625d48422f6dd312798802b40c37bdcc0b44ac0d638a7e" }, "downloads": -1, "filename": "comparator-0.2.1-py3.6.egg", "has_sig": false, "md5_digest": "809f2ea8aeed1f961d3fe79e1d1daf53", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 39487, "upload_time": "2018-09-19T05:44:05", "url": "https://files.pythonhosted.org/packages/ce/e5/27e8e224437314edd941e96054e92a6f6c827ab4a379ea7c7878c65ab72d/comparator-0.2.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "4070b6d209967abf80b2ae091ae6ee1c", "sha256": "6b38255ec19f21555b03aaffd2b2bca1f8136252593185b78ee0a91f72803a6e" }, "downloads": -1, "filename": "comparator-0.2.1-py3.7.egg", "has_sig": false, "md5_digest": "4070b6d209967abf80b2ae091ae6ee1c", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 39516, "upload_time": "2018-09-19T05:44:06", "url": "https://files.pythonhosted.org/packages/e3/96/7f0eeb38c27c292a6f85a8c8431ded13b4506978e0b845586f9bd6d74d60/comparator-0.2.1-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "d9ada1956562f20fc7df43b62112119f", "sha256": "a9715a45693751ab6ca887cab818c3e86ed6b01a43b2027bd328ba3ca8530b1f" }, "downloads": -1, "filename": "comparator-0.2.1.tar.gz", "has_sig": false, "md5_digest": "d9ada1956562f20fc7df43b62112119f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11802, "upload_time": "2018-09-19T05:44:08", "url": "https://files.pythonhosted.org/packages/7a/b3/2b67ff1921a944acee34074a377aadc4ada5b938528a0824778bde85771c/comparator-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0a1e769e3dd021de70648a2cf327dbd7", "sha256": "8fd399cedf915005ca7d9e4f816e34483a178c321dd9107a09935c9b9b924f11" }, "downloads": -1, "filename": "comparator-0.3.0-py2.7.egg", "has_sig": false, "md5_digest": "0a1e769e3dd021de70648a2cf327dbd7", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 62520, "upload_time": "2018-10-03T18:01:25", "url": "https://files.pythonhosted.org/packages/3c/90/3750e1dae1eed3edbc119604d0bbf6760620a14ddc7b3602f70a9ff8bfc1/comparator-0.3.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9ddab05e255b752519308d688bf83159", "sha256": "09723ae5735b06308c65cbc0574d9be72756ed2097003b8e9ee4bd307879a153" }, "downloads": -1, "filename": "comparator-0.3.0-py3.6.egg", "has_sig": false, "md5_digest": "9ddab05e255b752519308d688bf83159", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 63262, "upload_time": "2018-10-03T18:01:27", "url": "https://files.pythonhosted.org/packages/d4/59/d108ea31ba84b9b339ac2de9be929be948a6f14b5a2cd3d38f7a3889a530/comparator-0.3.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "8aa3c6458447a7afd45194030f6ca97d", "sha256": "885870c30838f6a03cea34ce079d88c901a932818dedaa2de79e0afe58d2f878" }, "downloads": -1, "filename": "comparator-0.3.0-py3.7.egg", "has_sig": false, "md5_digest": "8aa3c6458447a7afd45194030f6ca97d", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 63381, "upload_time": "2018-10-03T18:01:28", "url": "https://files.pythonhosted.org/packages/d1/29/a3a0e49e363a3faa04f8a1040be36f4b1e935aac80acf80bc6d8741d45fd/comparator-0.3.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "86744eb7ccf17f7940903ffae643eb42", "sha256": "361abef76acd9a3dc177d7cddf11546b05fa4d1a7e166e0d10105796ebd1faff" }, "downloads": -1, "filename": "comparator-0.3.0.tar.gz", "has_sig": false, "md5_digest": "86744eb7ccf17f7940903ffae643eb42", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21644, "upload_time": "2018-10-03T18:01:29", "url": "https://files.pythonhosted.org/packages/31/6f/09db514dae66e83e6df9c74fb089910f0270626b75e95d9dac572a7b9743/comparator-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ad6d42456439a985d1adaadcd2099c05", "sha256": "62f93056ed1335d23f553a3b2153f6add6a11f25d423f526c2dc735c68560efc" }, "downloads": -1, "filename": "comparator-0.3.1-py2.7.egg", "has_sig": false, "md5_digest": "ad6d42456439a985d1adaadcd2099c05", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 62855, "upload_time": "2018-10-03T20:24:08", "url": "https://files.pythonhosted.org/packages/da/72/cd04be1b00397deb0531574cf5be398258f0143e4cb2ae2894ec96307ca6/comparator-0.3.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "16adae8f5aa66f1e6f9d9836e2ea15de", "sha256": "4763ee335d058e5fa9101fd5569d0eb50c26537f8440ef13816762bde9ed5e96" }, "downloads": -1, "filename": "comparator-0.3.1-py3.6.egg", "has_sig": false, "md5_digest": "16adae8f5aa66f1e6f9d9836e2ea15de", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 63569, "upload_time": "2018-10-03T20:24:10", "url": "https://files.pythonhosted.org/packages/88/41/12004813812d97d9871741957eb492a057d538b4cc192e207c37fa67f927/comparator-0.3.1-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "4a947cfe3bbc3d90b4c87decab437c21", "sha256": "4e477d7a81b0b201729e55fec4b9b9833fd9b8258ec7bca923fe73d82dc9bf0f" }, "downloads": -1, "filename": "comparator-0.3.1-py3.7.egg", "has_sig": false, "md5_digest": "4a947cfe3bbc3d90b4c87decab437c21", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 63692, "upload_time": "2018-10-03T20:24:11", "url": "https://files.pythonhosted.org/packages/4b/67/8917558defb16478b11b33d73c03aeb35463f1502b8e38ba4e5858c7ef5f/comparator-0.3.1-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "9d86936c6510745f0acadce39c073bc8", "sha256": "bae388ece481018509387118cfaa58b832a16495ffac493758f6b19c9a6bc1fa" }, "downloads": -1, "filename": "comparator-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9d86936c6510745f0acadce39c073bc8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21828, "upload_time": "2018-10-03T20:24:13", "url": "https://files.pythonhosted.org/packages/fc/d8/c8c1d362fe38fd9c60eacc5dfd470163cd250d6c4b67fb147b9a16d21e24/comparator-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "dae1fe1b84c536ed4cd9d879128b297e", "sha256": "04d4dace3190a5f1a839796960824e0d77c24c57df4224de51402c702e812d72" }, "downloads": -1, "filename": "comparator-0.3.2-py2.7.egg", "has_sig": false, "md5_digest": "dae1fe1b84c536ed4cd9d879128b297e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 62883, "upload_time": "2018-10-04T13:55:52", "url": "https://files.pythonhosted.org/packages/60/bd/253bd63bf2277227971b73feaaf2eafdb171758ae9c3a367ba3589fa5931/comparator-0.3.2-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "e2206676fb33c6391e27013b35fb1da8", "sha256": "5f13f3759ee5672205b488d2b43418197bc8a7f6e87064fe56de31d103895e66" }, "downloads": -1, "filename": "comparator-0.3.2-py3.6.egg", "has_sig": false, "md5_digest": "e2206676fb33c6391e27013b35fb1da8", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 63596, "upload_time": "2018-10-04T13:55:53", "url": "https://files.pythonhosted.org/packages/2d/da/c615a616abc8f7633932d842b3aff39a795b0613d6f8dcd8899620812a19/comparator-0.3.2-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "5d5650a5f079da88e2659134f51e6842", "sha256": "4484d48a62ea742c0b56f11712942cabcd246c3790b617c1ba24fc93ed173de5" }, "downloads": -1, "filename": "comparator-0.3.2-py3.7.egg", "has_sig": false, "md5_digest": "5d5650a5f079da88e2659134f51e6842", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 63718, "upload_time": "2018-10-04T13:55:54", "url": "https://files.pythonhosted.org/packages/82/d1/d178d5163f2c0c9920ac8f8eda5b21c7224cd27e245513048aa9d3d9baf2/comparator-0.3.2-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "e1688d8787990fab24a9f74fa48530ae", "sha256": "25db2e597e2c2b967cc682a62366fb14aa489d0f81f8e1f77ad265a306b3b960" }, "downloads": -1, "filename": "comparator-0.3.2.tar.gz", "has_sig": false, "md5_digest": "e1688d8787990fab24a9f74fa48530ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37075, "upload_time": "2018-10-04T13:55:56", "url": "https://files.pythonhosted.org/packages/0f/bd/f4c83c365c32a33159d89507074c63bf003f842e668085528663076ac5d9/comparator-0.3.2.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d69d4e941361f74022e46343ca96c14e", "sha256": "e22854c27d5cbdfb36000ae7b76c110d612b780251a351e95dfd940f84a5a06c" }, "downloads": -1, "filename": "comparator-0.4.0-py2.7.egg", "has_sig": false, "md5_digest": "d69d4e941361f74022e46343ca96c14e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 26189, "upload_time": "2019-03-09T06:49:01", "url": "https://files.pythonhosted.org/packages/1a/dd/22aeb41084dc7a6f05684712800c756db41ccd14874c7d5d49aad017247e/comparator-0.4.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9b14600734013f6358015d99645676fb", "sha256": "9c2db02a6384dc0ef69e4271f921d30829e6b0bd1d898325f6bad54401469d9f" }, "downloads": -1, "filename": "comparator-0.4.0-py3.6.egg", "has_sig": false, "md5_digest": "9b14600734013f6358015d99645676fb", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 26327, "upload_time": "2019-03-09T06:49:02", "url": "https://files.pythonhosted.org/packages/43/2f/718a97a0aab4738d3b6e44112c4997c8a38da9b72df09b4b258415ddd1f2/comparator-0.4.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "baf73303f8ce27ee20de8b9363d72f79", "sha256": "6c7f38461b4313a19d82b148a464267a92c1e743676e94676d7b6d41f7d65070" }, "downloads": -1, "filename": "comparator-0.4.0-py3.7.egg", "has_sig": false, "md5_digest": "baf73303f8ce27ee20de8b9363d72f79", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 26351, "upload_time": "2019-03-09T06:49:03", "url": "https://files.pythonhosted.org/packages/af/0c/30dbafed195e4f1ca1291d0595bbbade1cac8f959ed4693602ce91c5ccff/comparator-0.4.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "07192d6f8a2d056beb3ad42416c98994", "sha256": "2b1ba8532a07ac82c453f7471aa2b13ced91e2f3f55eca3d9180f1cde4e09521" }, "downloads": -1, "filename": "comparator-0.4.0.tar.gz", "has_sig": false, "md5_digest": "07192d6f8a2d056beb3ad42416c98994", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13735, "upload_time": "2019-03-09T06:49:05", "url": "https://files.pythonhosted.org/packages/48/ff/65fe002c2422b60324034984ff3ddda1e2033b16c30c5aedca60c9d435b6/comparator-0.4.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d69d4e941361f74022e46343ca96c14e", "sha256": "e22854c27d5cbdfb36000ae7b76c110d612b780251a351e95dfd940f84a5a06c" }, "downloads": -1, "filename": "comparator-0.4.0-py2.7.egg", "has_sig": false, "md5_digest": "d69d4e941361f74022e46343ca96c14e", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 26189, "upload_time": "2019-03-09T06:49:01", "url": "https://files.pythonhosted.org/packages/1a/dd/22aeb41084dc7a6f05684712800c756db41ccd14874c7d5d49aad017247e/comparator-0.4.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "9b14600734013f6358015d99645676fb", "sha256": "9c2db02a6384dc0ef69e4271f921d30829e6b0bd1d898325f6bad54401469d9f" }, "downloads": -1, "filename": "comparator-0.4.0-py3.6.egg", "has_sig": false, "md5_digest": "9b14600734013f6358015d99645676fb", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": null, "size": 26327, "upload_time": "2019-03-09T06:49:02", "url": "https://files.pythonhosted.org/packages/43/2f/718a97a0aab4738d3b6e44112c4997c8a38da9b72df09b4b258415ddd1f2/comparator-0.4.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "baf73303f8ce27ee20de8b9363d72f79", "sha256": "6c7f38461b4313a19d82b148a464267a92c1e743676e94676d7b6d41f7d65070" }, "downloads": -1, "filename": "comparator-0.4.0-py3.7.egg", "has_sig": false, "md5_digest": "baf73303f8ce27ee20de8b9363d72f79", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 26351, "upload_time": "2019-03-09T06:49:03", "url": "https://files.pythonhosted.org/packages/af/0c/30dbafed195e4f1ca1291d0595bbbade1cac8f959ed4693602ce91c5ccff/comparator-0.4.0-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "07192d6f8a2d056beb3ad42416c98994", "sha256": "2b1ba8532a07ac82c453f7471aa2b13ced91e2f3f55eca3d9180f1cde4e09521" }, "downloads": -1, "filename": "comparator-0.4.0.tar.gz", "has_sig": false, "md5_digest": "07192d6f8a2d056beb3ad42416c98994", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13735, "upload_time": "2019-03-09T06:49:05", "url": "https://files.pythonhosted.org/packages/48/ff/65fe002c2422b60324034984ff3ddda1e2033b16c30c5aedca60c9d435b6/comparator-0.4.0.tar.gz" } ] }