{ "info": { "author": "Quora, Inc.", "author_email": "asynq@quora.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "*****\nqcore\n*****\n.. image:: https://travis-ci.org/quora/qcore.svg?branch=master\n :target: https://travis-ci.org/quora/qcore\n\n``qcore`` is a library of common utility functions used at Quora. It is used to\nabstract out common functionality for other Quora libraries like `asynq `_.\n\nIts component modules are discussed below. See the docstrings in the code\nitself for more detail.\n\nqcore.asserts\n-------------\n\nWhen a normal Python assert fails, it only indicates that there was a failure,\nnot what the bad values were that caused the assert to fail. This module\nprovides rich assertion helpers that automatically produce better error\nmessages. For example:\n\n.. code-block:: python\n\n >>> from qcore.asserts import assert_eq\n >>> assert 5 == 2 * 2\n Traceback (most recent call last):\n File \"\", line 1, in \n AssertionError\n >>> assert_eq(5, 2 * 2)\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"qcore/asserts.py\", line 82, in assert_eq\n assert expected == actual, _assert_fail_message(message, expected, actual, '!=', extra)\n AssertionError: 5 != 4\n\nSimilar methods are provided by the standard library's ``unittest`` package,\nbut those are tied to the ``TestCase`` class instead of being standalone\nfunctions.\n\nqcore.caching\n-------------\n\nThis provides helpers for caching data. Some examples include:\n\n.. code-block:: python\n\n from qcore.caching import cached_per_instance, lazy_constant\n\n @lazy_constant\n def some_function():\n # this will only be executed the first time some_function() is called;\n # afterwards it will be cached\n return expensive_computation()\n\n class SomeClass(object):\n @cached_per_instance()\n def some_method(self, a, b):\n # for any instance of SomeClass, this will only be executed once\n return expensive_computation(a, b)\n\nqcore.debug\n-----------\n\nThis module provides some helpers useful for debugging Python. Among others, it\nincludes the ``@qcore.debug.trace()`` decorator, which can be used to trace\nevery time a function is called.\n\nqcore.decorators\n----------------\n\nThis module provides an abstraction for class-based decorators that supports\ntransparently decorating functions, methods, classmethods, and staticmethods\nwhile also providing the option to add additional custom attributes. For\nexample, it could be used to provide a caching decorator that adds a ``.dirty``\nattribute to decorated functions to dirty their cache:\n\n.. code-block:: python\n\n from qcore.decorators import DecoratorBase, DecoratorBinder, decorate\n\n class CacheDecoratorBinder(DecoratorBinder):\n def dirty(self, *args):\n if self.instance is None:\n return self.decorator.dirty(*args)\n else:\n return self.decorator.dirty(self.instance, *args)\n\n class CacheDecorator(DecoratorBase):\n binder_cls = CacheDecoratorBinder\n\n def __init__(self, *args):\n super(CacheDecorator, self).__init__(*args)\n self._cache = {}\n\n def dirty(self, *args):\n try:\n del self._cache[args]\n except KeyError:\n pass\n\n def __call__(self, *args):\n try:\n return self._cache[args]\n except KeyError:\n value = self.fn(*args)\n self._cache[args] = value\n return value\n\n cached = decorate(CacheDecorator)\n\nqcore.enum\n----------\n\nThis module provides an abstraction for defining enums. You can define an enum\nas follows:\n\n.. code-block:: python\n\n from qcore.enum import Enum\n\n class Color(Enum):\n red = 1\n green = 2\n blue = 3\n\nqcore.errors\n------------\n\nThis module provides some commonly useful exception classes and helpers for\nreraising exceptions from a different place.\n\nqcore.events\n------------\n\nThis provides an abstraction for registering events and running callbacks.\nExample usage:\n\n.. code-block:: python\n\n >>> from qcore.events import EventHook\n >>> event = EventHook()\n >>> def callback():\n ... print('callback called')\n ...\n >>> event.subscribe(callback)\n >>> event.trigger()\n callback called\n\nqcore.helpers\n-------------\n\nThis provides a number of small helper functions.\n\nqcore.inspectable_class\n-----------------------\n\nThis provides a base class that automatically provides hashing, equality\nchecks, and a readable ``repr()`` result. Example usage:\n\n.. code-block:: python\n\n >>> from qcore.inspectable_class import InspectableClass\n >>> class Pair(InspectableClass):\n ... def __init__(self, a, b):\n ... self.a = a\n ... self.b = b\n ...\n >>> Pair(1, 2)\n Pair(a=1, b=2)\n >>> Pair(1, 2) == Pair(1, 2)\n True\n\nqcore.inspection\n----------------\n\nThis provides functionality similar to the standard ``inspect`` module. Among\nothers, it includes the ``get_original_fn`` function, which extracts the\nunderlying function from a ``qcore.decorators``-decorated object.\n\nqcore.microtime\n---------------\n\nThis includes helpers for dealing with time, represented as an integer number\nof microseconds since the Unix epoch.\n\nqcore.testing\n-------------\n\nThis provides helpers to use in unit tests. Among others, it provides an\n``Anything`` object that compares equal to any other Python object.\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/quora/qcore", "keywords": "quora core common utility", "license": "Apache Software License", "maintainer": "", "maintainer_email": "", "name": "qcore", "package_url": "https://pypi.org/project/qcore/", "platform": "", "project_url": "https://pypi.org/project/qcore/", "project_urls": { "Homepage": "https://github.com/quora/qcore" }, "release_url": "https://pypi.org/project/qcore/0.5.1/", "requires_dist": [ "Cython", "inspect2", "setuptools", "six" ], "requires_python": "", "summary": "Quora's core utility library", "version": "0.5.1" }, "last_serial": 4155000, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "518d125d3730d35b439a42d6cb6e5cd8", "sha256": "393910affce89ddcad75e2cca567847b34302671e604be54e25ba502e3c390e2" }, "downloads": -1, "filename": "qcore-0.2.0.tar.gz", "has_sig": false, "md5_digest": "518d125d3730d35b439a42d6cb6e5cd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 370317, "upload_time": "2016-09-16T19:14:08", "url": "https://files.pythonhosted.org/packages/8b/ce/02f38e14597091fed0d8ac0d4974a5bde468687e5fffceba6b004ccbff3d/qcore-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "f51cf7da5bf770c5f34f1fa2143339f5", "sha256": "a6cdd69ccc4aec62960860d59c7fb5cd38eda8c64f4d8162d51c1549447fbe82" }, "downloads": -1, "filename": "qcore-0.2.1.tar.gz", "has_sig": false, "md5_digest": "f51cf7da5bf770c5f34f1fa2143339f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 375606, "upload_time": "2016-10-07T23:46:04", "url": "https://files.pythonhosted.org/packages/68/41/20f5c172dbaf6a6a5c56b48bd8e34a5869c13b43c7490cf611e1944c7a28/qcore-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "fd3ac236f9d5b254c8637d66ddc5c997", "sha256": "38ba2e9dfdef573a579ca9712dad89276f2e241c0d5148ba3a199546c49e27cd" }, "downloads": -1, "filename": "qcore-0.3.0.tar.gz", "has_sig": false, "md5_digest": "fd3ac236f9d5b254c8637d66ddc5c997", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 407529, "upload_time": "2017-01-11T00:37:27", "url": "https://files.pythonhosted.org/packages/46/36/d1e964c34ebdc4ff57b548346ed8fe070cd77dd4a21fd337e249c1c6af1a/qcore-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d397bbed08603e411c469080838fb38f", "sha256": "1f2fde43126af24ca3c75b9f3d38abb9a5f15d96886de1fbdaf3a451ae06dfee" }, "downloads": -1, "filename": "qcore-0.4.0.tar.gz", "has_sig": false, "md5_digest": "d397bbed08603e411c469080838fb38f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 378168, "upload_time": "2017-07-07T20:52:34", "url": "https://files.pythonhosted.org/packages/8e/06/ac3928214155717be13e48a3814ea34ed0f2ac02fdb8035481acc2d2471d/qcore-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "726e37a83d6cfacab54e64611feccc92", "sha256": "768d4a2d181eb214582acbbe361b5916281615cface9c21f9b66ff20f1fa8cc1" }, "downloads": -1, "filename": "qcore-0.4.1.tar.gz", "has_sig": false, "md5_digest": "726e37a83d6cfacab54e64611feccc92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 492916, "upload_time": "2017-12-08T04:09:35", "url": "https://files.pythonhosted.org/packages/4b/d8/213cbf5b91f3eaecf1ef39c0297e00318ce8c5fd511d207146108ec9b7a0/qcore-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "4fc938202ee48e29ec93a16408f3cbaf", "sha256": "308824f1f016643ef6b019ff981be7a8050ba12592a1e2d497c8d8099a7f3acf" }, "downloads": -1, "filename": "qcore-0.4.2.tar.gz", "has_sig": false, "md5_digest": "4fc938202ee48e29ec93a16408f3cbaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27302, "upload_time": "2017-12-12T23:56:29", "url": "https://files.pythonhosted.org/packages/f3/09/3b295ec32e8e41e8704d798a48505474d0d6dc1a2f57c60a9c8f7cd1ea11/qcore-0.4.2.tar.gz" } ], "0.4.4": [ { "comment_text": "", "digests": { "md5": "efa7a766d4936dd7dbe2e0abbb1cb928", "sha256": "5a7b5dfba6271dd93c7465c3e3e1d9e0050293f2541a069976382932ef6d2533" }, "downloads": -1, "filename": "qcore-0.4.4.tar.gz", "has_sig": false, "md5_digest": "efa7a766d4936dd7dbe2e0abbb1cb928", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31377, "upload_time": "2018-07-11T03:52:20", "url": "https://files.pythonhosted.org/packages/9a/58/a97c10e47fbbd6d6962f9e873638ca64e5857af9b9eb7d134a97a13dd34f/qcore-0.4.4.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "bb916663a10e29c02bed4c0a2a0d0230", "sha256": "ab6b911417e1f93f2db3c2df531140dc20e76e07217684cd187f007883224b43" }, "downloads": -1, "filename": "qcore-0.5.0-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "bb916663a10e29c02bed4c0a2a0d0230", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 1481170, "upload_time": "2018-08-09T19:17:39", "url": "https://files.pythonhosted.org/packages/9b/21/01fedb9bd4abce135ea585b146591e5e7bb6ffcdc254ed96a48b5d375f12/qcore-0.5.0-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "08385c4a4e47fde37742595e4ddc3d99", "sha256": "01ac4f9bd190d1ff277fca3098d26141afb93ebd8133e106c7c0578bf8d29d4a" }, "downloads": -1, "filename": "qcore-0.5.0-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "08385c4a4e47fde37742595e4ddc3d99", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 1653318, "upload_time": "2018-08-09T19:18:33", "url": "https://files.pythonhosted.org/packages/e0/2f/4de17921ba1d35b88c46508ae13353679c77c4c1e541af6824b3227a7988/qcore-0.5.0-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "4c8ae3bcf610787de1bfab0bdbad2874", "sha256": "1afe623fe28edc8fdd7edc9ac410cfe3a655d5fb34b2f7ac94e55333afab5177" }, "downloads": -1, "filename": "qcore-0.5.0-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "4c8ae3bcf610787de1bfab0bdbad2874", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1612967, "upload_time": "2018-08-09T19:18:15", "url": "https://files.pythonhosted.org/packages/6f/8e/f28f330768850211a2ff79ff31c97cf812f53bf0bb14ccce889abdd53308/qcore-0.5.0-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "5da679a79f78837c9c4ba8b2f7f1a4e2", "sha256": "c9d84b0ad66c902411bf91979ad5bb4b59d386e41ee2250de9349131e8dd7892" }, "downloads": -1, "filename": "qcore-0.5.0-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "5da679a79f78837c9c4ba8b2f7f1a4e2", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1667108, "upload_time": "2018-08-09T19:17:56", "url": "https://files.pythonhosted.org/packages/e3/91/519cef5ea3f1a189f152d0333f96d2a6c44bebe803d8e3ad20451e25d3a2/qcore-0.5.0-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "27275931b4dc314ee27112edefd14449", "sha256": "693444b7374f4ff7c7230154a282f26b487a8314c3a36dfaa550c29e925bd7a6" }, "downloads": -1, "filename": "qcore-0.5.0-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "27275931b4dc314ee27112edefd14449", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1653234, "upload_time": "2018-08-09T19:18:26", "url": "https://files.pythonhosted.org/packages/e5/96/385211e67876569cad91464a5e52d527725261e724d9f4ae93b8e2981c1a/qcore-0.5.0-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "c4cfbae9c7a93d2483a9c46c7e9d02ce", "sha256": "2cc2392e8184df6d99218f67615b15cedc09de89cf6dedc19e6f2799a0d09a3c" }, "downloads": -1, "filename": "qcore-0.5.0.tar.gz", "has_sig": false, "md5_digest": "c4cfbae9c7a93d2483a9c46c7e9d02ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33494, "upload_time": "2018-08-09T19:18:28", "url": "https://files.pythonhosted.org/packages/df/e5/8b4bc1b4cc85c1c93bb8941044519154e2a3a9908858d2408854013db41f/qcore-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "ff2c84d79145b49f95ecddaab7e36377", "sha256": "ce59c653a29b509c78ed430963f2047f3e862e2a2f2355ef71d044156d6b6254" }, "downloads": -1, "filename": "qcore-0.5.1-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "ff2c84d79145b49f95ecddaab7e36377", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 1487315, "upload_time": "2018-08-10T01:31:08", "url": "https://files.pythonhosted.org/packages/0a/6c/b6d6edfbffe34178ca4a8f155cf00ae4cb31bc68b4ad85011c05c6b5ce90/qcore-0.5.1-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "77039b6ad4c4b932171743c2c77e3e5b", "sha256": "3f0dd9beebc146b7e0e107e719398e35a0c0c7528738eab3afe3c435835a813e" }, "downloads": -1, "filename": "qcore-0.5.1-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "77039b6ad4c4b932171743c2c77e3e5b", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 1657729, "upload_time": "2018-08-10T01:31:31", "url": "https://files.pythonhosted.org/packages/4b/bd/2a760b95bc2b76dbc6044363f7c34be51866d64fbd3cebb2246f2acf2631/qcore-0.5.1-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fa00bc8ff735d034358233fc7da1f984", "sha256": "815c7f123e3e9235ad14c594a770f97bb19c0cd66e4151f276b6e9c685e0bdb6" }, "downloads": -1, "filename": "qcore-0.5.1-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "fa00bc8ff735d034358233fc7da1f984", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1617605, "upload_time": "2018-08-10T01:32:23", "url": "https://files.pythonhosted.org/packages/5d/64/cd7b9f6d2bac630e97c8070d4ccf7fa2ca3fe8117a6d2e851c3753762b29/qcore-0.5.1-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f924fc5a25bf02872db07c0d70f288a6", "sha256": "71779f5d656fb31ffb46f5ca3949f616ce3de8ba609353eaccc55b96e3602bdf" }, "downloads": -1, "filename": "qcore-0.5.1-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "f924fc5a25bf02872db07c0d70f288a6", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1671478, "upload_time": "2018-08-10T01:33:26", "url": "https://files.pythonhosted.org/packages/f6/ca/89fe1df826cf8accf495d48587b383e88cdcadb4a708771d495110bf377a/qcore-0.5.1-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "8d52c73f1850c58f17e06f06b32b260e", "sha256": "c50dc67aa271b5b979b0487497a8765b1d86115a18df158b5a7f2be5fd153b23" }, "downloads": -1, "filename": "qcore-0.5.1-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "8d52c73f1850c58f17e06f06b32b260e", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1658824, "upload_time": "2018-08-10T01:34:12", "url": "https://files.pythonhosted.org/packages/e7/f6/efd50673bce897590cb3ba99d83e1dd3138e7289637e082b6603c9389975/qcore-0.5.1-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f66b4a1c49823f8f4b53180bd60bcb6c", "sha256": "e5226f29b1607f0036d62b510c32747fa9cd266f89c09c864ac121eb6274387c" }, "downloads": -1, "filename": "qcore-0.5.1.tar.gz", "has_sig": false, "md5_digest": "f66b4a1c49823f8f4b53180bd60bcb6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33620, "upload_time": "2018-08-10T01:34:14", "url": "https://files.pythonhosted.org/packages/ea/52/4265b5a86638f6a2f80aa1ea689b90ce803634ed2b881ca661141e58374e/qcore-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ff2c84d79145b49f95ecddaab7e36377", "sha256": "ce59c653a29b509c78ed430963f2047f3e862e2a2f2355ef71d044156d6b6254" }, "downloads": -1, "filename": "qcore-0.5.1-cp27-cp27m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "ff2c84d79145b49f95ecddaab7e36377", "packagetype": "bdist_wheel", "python_version": "cp27", "requires_python": null, "size": 1487315, "upload_time": "2018-08-10T01:31:08", "url": "https://files.pythonhosted.org/packages/0a/6c/b6d6edfbffe34178ca4a8f155cf00ae4cb31bc68b4ad85011c05c6b5ce90/qcore-0.5.1-cp27-cp27m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "77039b6ad4c4b932171743c2c77e3e5b", "sha256": "3f0dd9beebc146b7e0e107e719398e35a0c0c7528738eab3afe3c435835a813e" }, "downloads": -1, "filename": "qcore-0.5.1-cp34-cp34m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "77039b6ad4c4b932171743c2c77e3e5b", "packagetype": "bdist_wheel", "python_version": "cp34", "requires_python": null, "size": 1657729, "upload_time": "2018-08-10T01:31:31", "url": "https://files.pythonhosted.org/packages/4b/bd/2a760b95bc2b76dbc6044363f7c34be51866d64fbd3cebb2246f2acf2631/qcore-0.5.1-cp34-cp34m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "fa00bc8ff735d034358233fc7da1f984", "sha256": "815c7f123e3e9235ad14c594a770f97bb19c0cd66e4151f276b6e9c685e0bdb6" }, "downloads": -1, "filename": "qcore-0.5.1-cp35-cp35m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "fa00bc8ff735d034358233fc7da1f984", "packagetype": "bdist_wheel", "python_version": "cp35", "requires_python": null, "size": 1617605, "upload_time": "2018-08-10T01:32:23", "url": "https://files.pythonhosted.org/packages/5d/64/cd7b9f6d2bac630e97c8070d4ccf7fa2ca3fe8117a6d2e851c3753762b29/qcore-0.5.1-cp35-cp35m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f924fc5a25bf02872db07c0d70f288a6", "sha256": "71779f5d656fb31ffb46f5ca3949f616ce3de8ba609353eaccc55b96e3602bdf" }, "downloads": -1, "filename": "qcore-0.5.1-cp36-cp36m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "f924fc5a25bf02872db07c0d70f288a6", "packagetype": "bdist_wheel", "python_version": "cp36", "requires_python": null, "size": 1671478, "upload_time": "2018-08-10T01:33:26", "url": "https://files.pythonhosted.org/packages/f6/ca/89fe1df826cf8accf495d48587b383e88cdcadb4a708771d495110bf377a/qcore-0.5.1-cp36-cp36m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "8d52c73f1850c58f17e06f06b32b260e", "sha256": "c50dc67aa271b5b979b0487497a8765b1d86115a18df158b5a7f2be5fd153b23" }, "downloads": -1, "filename": "qcore-0.5.1-cp37-cp37m-manylinux1_x86_64.whl", "has_sig": false, "md5_digest": "8d52c73f1850c58f17e06f06b32b260e", "packagetype": "bdist_wheel", "python_version": "cp37", "requires_python": null, "size": 1658824, "upload_time": "2018-08-10T01:34:12", "url": "https://files.pythonhosted.org/packages/e7/f6/efd50673bce897590cb3ba99d83e1dd3138e7289637e082b6603c9389975/qcore-0.5.1-cp37-cp37m-manylinux1_x86_64.whl" }, { "comment_text": "", "digests": { "md5": "f66b4a1c49823f8f4b53180bd60bcb6c", "sha256": "e5226f29b1607f0036d62b510c32747fa9cd266f89c09c864ac121eb6274387c" }, "downloads": -1, "filename": "qcore-0.5.1.tar.gz", "has_sig": false, "md5_digest": "f66b4a1c49823f8f4b53180bd60bcb6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33620, "upload_time": "2018-08-10T01:34:14", "url": "https://files.pythonhosted.org/packages/ea/52/4265b5a86638f6a2f80aa1ea689b90ce803634ed2b881ca661141e58374e/qcore-0.5.1.tar.gz" } ] }