{ "info": { "author": "Jacob Alheid", "author_email": "shakefu@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "pyconfig - Python-based singleton configuration\n===============================================\n\nThis module provides python based configuration that is stored in a singleton\nobject to ensure consistency across your project.\n\n.. contents::\n :depth: 2\n :local:\n\nCommand Line\n------------\n\nPyconfig has a command line utility that lets you inspect your project to find\nall the configuration keys defined.\n\n::\n\n $ pyconfig -h\n usage: pyconfig [-h] [-f F | -m M] [-v] [-l] [-a | -k] [-n] [-s] [-c]\n\n Helper for working with pyconfigs\n\n optional arguments:\n -h, --help show this help message and exit\n -f F, --filename F parse an individual file or directory\n -m M, --module M parse a package or module, recursively looking inside it\n -v, --view-call show the actual pyconfig call made (default: show namespace)\n -l, --load-configs query the currently set value for each key found\n -a, --all show keys which don't have defaults set\n -k, --only-keys show a list of discovered keys without values\n -n, --natural-sort sort by filename and line (default: alphabetical by key)\n -s, --source show source annotations (implies --natural-sort)\n -c, --color toggle output colors (default: True)\n\n**Example output**\n\n.. code-block:: bash\n\n $ pyconfig --file .\n humbledb.allow_explicit_request = True\n humbledb.auto_start_request = True\n humbledb.connection_pool = 300\n humbledb.tz_aware = True\n humbledb.use_greenlets = False\n humbledb.write_concern = 1\n\n $ pyconfig --view-call --file .\n pyconfig.get('humbledb.allow_explicit_request', True)\n pyconfig.setting('humbledb.auto_start_request', True)\n pyconfig.setting('humbledb.connection_pool', 300)\n pyconfig.setting('humbledb.tz_aware', True)\n pyconfig.setting('humbledb.use_greenlets', False)\n pyconfig.setting('humbledb.write_concern', 1)\n\n $ pyconfig --source --file .\n # ./humbledb/mongo.py, line 98\n humbledb.allow_explicit_request = True\n # ./humbledb/mongo.py, line 178\n humbledb.connection_pool = 300\n # ./humbledb/mongo.py, line 181\n humbledb.auto_start_request = True\n # ./humbledb/mongo.py, line 185\n humbledb.use_greenlets = False\n # ./humbledb/mongo.py, line 188\n humbledb.tz_aware = True\n # ./humbledb/mongo.py, line 191\n humbledb.write_concern = 1\n\n\nEtcd\n----\n\n*Version added: 3.0.0*\n\nPyconfig has read-only support for configurations stored in etcd. The preferred\nmethod for configuring Pyconfig to work with etcd is via ENV variables, since\nthey must be set as early as possible. It is also possible to use the Python\nAPI to make Pyconfig work with etcd.\n\nPyconfig uses a directory namespace to store its dot notation configuration key\nnames. By default, that namespace is ``/config/``.\n\nAt a minimum, ``PYCONFIG_ETCD_HOSTS`` must be set to get Pyconfig to try to\nread a configuration from etcd using the default settings.\n\nYou can set a value with `etcdctl` like:\n\n.. code-block:: bash\n\n $ # The etcdctl command is provided by etcd and not part of pyconfig\n $ etcdctl set /pyconfig/example/my.setting \"from etcd\"\n\nAnd configure Pyconfig to connect and use that setting:\n\n.. code-block:: bash\n\n $ export PYCONFIG_ETCD_PREFIX=\"/pyconfig/example/\"\n $ export PYCONFIG_ETCD_HOSTS=\"127.0.0.1:2379\"\n $ python\n >>> import pyconfig\n >>> pyconfig.get('my.setting')\n 'from etcd'\n\nBecause of Pyconfig's singleton nature, only one configuration can be accessed\nat a time in this way.\n\n**Environment variables:**\n\n* ``PYCONFIG_ETCD_PREFIX`` - The namespace to prefix settings with (default:\n ``'/config/'``)\n* ``PYCONFIG_ETCD_HOSTS`` - A comma separated list of hosts, like\n ``10.0.0.1:2379,10.0.0.2:2379``\n* ``PYCONFIG_ETCD_CACERT`` - CA cert file to use for SSL\n* ``PYCONFIG_ETCD_CERT`` - Client cert file to use for SSL client authentication\n* ``PYCONFIG_ETCD_KEY`` - Client private key file to use for SSL client auth\n* ``PYCONFIG_ETCD_WATCH`` - If this is set to a truthy value (a non-empty\n string), then pyconfig will keep the local configuration synchronized with\n etcd (*Version added: 3.1.0*)\n* ``PYCONFIG_ETCD_PROTOCOL`` - Set this to force HTTPS connections even if not\n using certificates. This should be a string of the form `https` or `http`.\n (*Version added: 3.2.0*)\n* ``PYCONFIG_ETCD_AUTH`` - Set this use Basic Authentication with requests.\n This should be a string of the format `username:password`. (*Version added:\n 3.2.0*)\n\n**Inheritance:**\n\nIf you want to create a configuration that inherits from an existing\nconfiguration, Pyconfig will look for a special key, which by default is set to\n``config.inherit``. If this exists and is set to an etcd namespace, that\nconfiguration will be used as the base for the current config.\n\nA typical use case would be a Test environment configuration which is derived\nfrom a Development config. Below is a barebones example of how that might be\nset up using `etcdctl` and Pyconfig.\n\n.. code-block:: bash\n\n $ # Create the development settings\n $ etcdctl set /config/app/dev/my.name example\n $ etcdctl set /config/app/dev/my.hostname localhost\n $ etcdctl set /config/app/dev/my.api.key abcdef0123456789\n $ # Create the test settings\n $ etcdctl set /config/app/test/my.hostname test.example.com\n $ # Tell it to inherit from the development settings\n $ etcdctl set /config/app/test/config.inherit /config/app/dev/\n $ # Configure Pyconfig to use the test configuration\n $ export PYCONFIG_ETCD_PREFIX=\"/config/app/test/\"\n $ export PYCONFIG_ETCD_HOSTS=\"127.0.0.1:2379\"\n $ python\n >>> import pyconfig\n >>> pyconfig.get('my.hostname')\n 'test.example.com'\n >>> pyconfig.get('my.name')\n 'example'\n\n\nCode Examples\n-------------\n\nThe most basic usage allows you to get, retrieve and modify values. Pyconfig's\nsingleton provides convenient accessor methods for these actions:\n\n*Version changed: 3.0.0*\n\nAs of version 3.0.0, keys are not case sensitive by default.\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> pyconfig.get('my.setting', 'default')\n 'default'\n >>> pyconfig.set('my.setting', 'new')\n >>> pyconfig.get('my.setting', 'default')\n 'new'\n >>> pyconfig.reload(clear=True)\n >>> pyconfig.get('my.setting', 'default')\n 'default'\n\nYou can also opt-out of default values:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> pyconfig.get('my.setting', allow_default=False)\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"pyconfig/__init__.py\", line 275, in get\n return Config().get(name, default, allow_default=allow_default)\n File \"pyconfig/__init__.py\", line 234, in get\n return self.settings[name]\n LookupError: No setting \"my.setting\"\n\nPyconfig also provides shortcuts for giving classes property descriptors which\nmap to the current setting stored in the singleton:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> class MyClass(object):\n ... my_setting = pyconfig.setting('my.setting', 'default')\n ...\n >>> MyClass.my_setting\n 'default'\n >>> MyClass().my_setting\n 'default'\n >>> pyconfig.set('my.setting', \"Hello World!\")\n >>> MyClass.my_setting\n 'Hello World!'\n >>> MyClass().my_setting\n 'Hello World!'\n >>> pyconfig.reload(clear=True)\n >>> MyClass.my_setting\n 'default'\n\nThe `Setting` class also supports preventing default values. When set this way,\nall reads on the attribute will prevent the use of defaults:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> class MyClass(object):\n ... my_setting = pyconfig.setting('my.setting', allow_default=False)\n ...\n >>> MyClass.my_setting\n Traceback (most recent call last):\n File \"\", line 1, in \n File \"pyconfig/__init__.py\", line 84, in __get__\n allow_default=self.allow_default)\n File \"pyconfig/__init__.py\", line 232, in get\n raise LookupError('No setting \"{}\"'.format(name))\n LookupError: No setting \"my.setting\"\n >>> pyconfig.set('my.setting', 'new_value')\n >>> MyClass.my_setting\n 'value'\n\nPyconfig allows you to override settings via a python configuration file, that\ndefines its configuration keys as a module namespace. By default, Pyconfig will\nlook on your ``PYTHONPATH`` for a module named ``localconfig``, and if it exists, it\nwill use this module namespace to update all configuration settings:\n\n.. code-block:: python\n\n # __file__ = \"$PYTHONPATH/localconfig.py\"\n from pyconfig import Namespace\n\n # Namespace objects allow you to use attribute assignment to create setting\n # key names\n my = Namespace()\n my.setting = 'from_localconfig'\n # Namespace objects implicitly return new nested Namespaces when accessing\n # attributes that don't exist\n my.nested.setting = 'also_from_localconfig'\n\nWith a ``localconfig`` on the ``PYTHONPATH``, it will be loaded before any settings\nare read:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> pyconfig.get('my.setting')\n 'from_localconfig'\n >>> pyconfig.get('my.nested.setting')\n 'also_from_localconfig'\n\nPyconfig also allows you to create distutils plugins that are automatically\nloaded. An example ``setup.py``:\n\n.. code-block:: python\n\n # __file__ = setup.py\n from setuptools import setup\n\n setup(\n name='pytest',\n version='0.1.0-dev',\n py_modules=['myconfig', 'anyconfig'],\n entry_points={\n # The \"my\" in \"my =\" indicates a base namespace to use for\n # the contained configuration. If you do not wish a base\n # namespace, use \"any\"\n 'pyconfig':[\n 'my = myconfig',\n 'any = anyconfig',\n ],\n },\n )\n\nAn example distutils plugin configuration file:\n\n.. code-block:: python\n\n # __file__ = myconfig.py\n from pyconfig import Namespace\n\n def some_callable():\n print \"This callable was called.\"\n print \"You can execute any arbitrary code.\"\n\n setting = 'from_plugin'\n nested = Namespace()\n nested.setting = 'also_from_plugin'\n\nAnother example configuration file, without a base namespace:\n\n.. code-block:: python\n\n # __file__ = anyconfig.py\n from pyconfig import Namespace\n other = Namespace()\n other.setting = 'anyconfig_value'\n\nShowing the plugin-specified settings:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> pyconfig.get('my.setting', 'default')\n This callable was called.\n You can execute any arbitrary code.\n 'from_plugin'\n >>> pyconfig.get('my.nested.setting', 'default')\n 'also_from_plugin'\n >>> pyconfig.get('other.setting', 'default')\n 'anyconfig_value'\n\nMore fancy stuff:\n\n.. code-block:: python\n\n >>> # Reloading changes re-calls functions...\n >>> pyconfig.reload()\n This callable was called.\n You can execute any arbitrary code.\n >>> # This can be used to inject arbitrary code by changing a\n >>> # localconfig.py or plugin and reloading a config... especially\n >>> # when pyconfig.reload() is attached to a signal\n >>> import signal\n >>> signal.signal(signal.SIGUSR1, pyconfig.reload)\n\nPyconfig provides a ``@reload_hook`` decorator that allows you to register\nfunctions or methods to be called when the configuration is reloaded:\n\n.. code-block:: python\n\n >>> import pyconfig\n >>> @pyconfig.reload_hook\n ... def reload():\n ... print \"Do something here.\"\n ...\n >>> pyconfig.reload()\n Do something here.\n\n**Warning**: It should not be used to register large numbers of functions (e.g.\nregistering a bound method in a class's ``__init__`` method), since there is no\nway to un-register a hook and it will cause a memory leak, since a bound method\nmaintains a strong reference to the bound instance.\n\n**Note**: Because the reload hooks are called without arguments, it will not\nwork with unbound methods or classmethods.\n\n\nChanges\n-------\n\nThis section contains descriptions of changes in each new version.\n\n3.2.0\n^^^^^\n\n* Adds `PYCONFIG_ETCD_PROTOCOL` and `PYCONFIG_ETCD_AUTH`.\n\n *Released August 17, 2017.*\n\n3.1.1\n^^^^^\n\n* Documentation fixes that makes rendering work on PyPI and GitHub again.\n\n *Released June 16, 2016.*\n\n3.1.0\n^^^^^\n\n* Adds the ability to watch etcd for changes to values. This can be enabled by\n setting the environment variable ``PYCONFIG_ETCD_WATCH=true``.\n\n *Released June 3, 2016.*\n\n3.0.2\n^^^^^\n\n* Fixes an issue when using Python 3 compatibility in Python 2.7 and PyOpenSSL.\n\n *Released September 28, 2015.*\n\n3.0.1\n^^^^^\n\n* Changes the default inherit depth to 2, which is more useful than 1.\n\n3.0.0\n^^^^^\n\n* Adds support for loading configurations from etcd, with inheritance.\n* Use ``pytool.lang.Namespace`` instead of alternate implementation.\n* Drops support for Python 2.6 and 3.2.\n* Pyconfig setting keys are now case insensitive by default (Use\n ``pyconfig.set('pyconfig.case_sensitive', True)`` to change the behavior)\n* Adds new ``clear()`` method for wiping out the cached configuration.\n\nOlder Versions\n^^^^^^^^^^^^^^\n\n2.2.1\n\"\"\"\"\"\n\n* The command line tool will now attempt to handle source files which specify a\n non-ascii encoding gracefully.\n\n2.2.0\n\"\"\"\"\"\n\n* Add ``allow_default`` keyword option to ``get()`` and ``setting()``. Thanks\n to `yarbelk `_!\n\n2.1.5\n\"\"\"\"\"\n\n* Fix regression where ``localconfig.py`` wasn't being loaded on Python 2.7 due\n to a logic flow error. Whoops!\n\n2.1.4\n\"\"\"\"\"\n\n* Broke Python 2.6 in 2.1.1, fixed again.\n\n2.1.2-2.1.3\n\"\"\"\"\"\"\"\"\"\"\"\n\n* Package clean up and fixing README to work on PyPI again.\n\n2.1.1\n\"\"\"\"\"\n\n* Fix bug that would break on Python 2.6 and 2.7 when using a localconfig.py.\n\n2.1.0\n\"\"\"\"\"\n\n* Pyconfig now works on Python 3, thanks to\n `hfalcic `_!\n\n2.0.0\n\"\"\"\"\"\n* Pyconfig now has the ability to show you what config keys are defined in a\n directory.\n\n1.2.0\n\"\"\"\"\"\n\n* No longer uses Python 2.7 ``format()``. Should work on 2.6 and maybe earlier.\n\n1.1.2\n\"\"\"\"\"\n\n* Move version string into ``pyconfig.__version__``\n\n1.1.1\n\"\"\"\"\"\n\n* Fix bug with setup.py that prevented installation\n\n1.1.0\n\"\"\"\"\"\n\n* Allow for implicitly nesting Namespaces when accessing attributes that are\n undefined\n\nContributors\n------------\n\n* `shakefu `_ - Creator and maintainer\n* `hfalcic `_ - Python 3 compatability\n* `yarbelk `_ - ``allow_default`` option\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/shakefu/pyconfig", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyconfig", "package_url": "https://pypi.org/project/pyconfig/", "platform": "", "project_url": "https://pypi.org/project/pyconfig/", "project_urls": { "Homepage": "http://github.com/shakefu/pyconfig" }, "release_url": "https://pypi.org/project/pyconfig/3.2.3/", "requires_dist": null, "requires_python": "", "summary": "Python-based singleton configuration", "version": "3.2.3" }, "last_serial": 4127924, "releases": { "1.2.0": [ { "comment_text": "", "digests": { "md5": "3db489bdd43f30e7df582797e9c57898", "sha256": "6abc0a13299959337f815779a49dc49def10315377a725eb2ee53e933bef858c" }, "downloads": -1, "filename": "pyconfig-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3db489bdd43f30e7df582797e9c57898", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5827, "upload_time": "2013-05-03T22:36:04", "url": "https://files.pythonhosted.org/packages/94/fa/e9c55310164ba5c8f8397a6b1ea3b1160e883d005528e8dcf06f34c62234/pyconfig-1.2.0.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "44250b7a5649e0790b37da6e60699d7f", "sha256": "55ae395eaad1043000f10ee0aee9be42b13d841727534aa1438aa0224562893a" }, "downloads": -1, "filename": "pyconfig-2.0.0.tar.gz", "has_sig": false, "md5_digest": "44250b7a5649e0790b37da6e60699d7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12675, "upload_time": "2014-02-05T22:07:33", "url": "https://files.pythonhosted.org/packages/e0/7b/a8d4c45c128f1bc360177708bfacb9b267fafe3fbee99e894db95abc0686/pyconfig-2.0.0.tar.gz" } ], "2.1.0": [ { "comment_text": "", "digests": { "md5": "e62febf4a329c06ff9bacaf867d4c600", "sha256": "ef0c20a922ca10ba62fc703c4e4eb62abb63be924beb59fd1547cda876dc03ba" }, "downloads": -1, "filename": "pyconfig-2.1.0.tar.gz", "has_sig": false, "md5_digest": "e62febf4a329c06ff9bacaf867d4c600", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14138, "upload_time": "2014-07-11T22:15:37", "url": "https://files.pythonhosted.org/packages/3f/52/96c9890ddc758c305daaffd232757d78e2afd1d6031e6830f2f9bdf349c5/pyconfig-2.1.0.tar.gz" } ], "2.1.1": [ { "comment_text": "", "digests": { "md5": "c833235052920283dd19baaaa325d76f", "sha256": "bdd40371ebfa4dc45be6c1b1ccc17616d5e13549dbde4c2afeaf59ad7828d9fa" }, "downloads": -1, "filename": "pyconfig-2.1.1.tar.gz", "has_sig": false, "md5_digest": "c833235052920283dd19baaaa325d76f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14425, "upload_time": "2014-09-08T21:57:19", "url": "https://files.pythonhosted.org/packages/94/cc/4094797cef933d32521dc05ccbf30d05b441416d3d3381df96acfe5c18d3/pyconfig-2.1.1.tar.gz" } ], "2.1.2": [ { "comment_text": "", "digests": { "md5": "2e18fe0adbbd9aaac042935953579e1d", "sha256": "8f6418b6afd50569fe0e6b3ec538a478f7143a9c502af6b9afed11e14c7c2fd6" }, "downloads": -1, "filename": "pyconfig-2.1.2.tar.gz", "has_sig": false, "md5_digest": "2e18fe0adbbd9aaac042935953579e1d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11326, "upload_time": "2014-09-08T22:02:34", "url": "https://files.pythonhosted.org/packages/ee/8f/1c7e2ec53916c8ea8855e530865daf9b8a1340ba08bb351f7d5956c93c2e/pyconfig-2.1.2.tar.gz" } ], "2.1.3": [ { "comment_text": "", "digests": { "md5": "65c337b9c347d7f20d64a59af55778ae", "sha256": "f3bbdb1c9e35c37c660515d65b86c4a644ef370519a7d92ba97578607fc1e0e9" }, "downloads": -1, "filename": "pyconfig-2.1.3.tar.gz", "has_sig": false, "md5_digest": "65c337b9c347d7f20d64a59af55778ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11303, "upload_time": "2014-09-08T22:37:07", "url": "https://files.pythonhosted.org/packages/c3/2d/fc3dbd42fd0fecf9d72643f9504270013dedcd06b92889ebf84e2023fcc2/pyconfig-2.1.3.tar.gz" } ], "2.1.4": [ { "comment_text": "", "digests": { "md5": "5671627f8a0f183b28ed8a4f393831bd", "sha256": "a3ac0af623ac824b55481668b33835944cfa20211843815dc7f226ec59c9ddec" }, "downloads": -1, "filename": "pyconfig-2.1.4.tar.gz", "has_sig": false, "md5_digest": "5671627f8a0f183b28ed8a4f393831bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11379, "upload_time": "2014-09-08T23:02:51", "url": "https://files.pythonhosted.org/packages/c7/ce/d23b87054db9b338ffaae339f3ee97b06b2fdec04e0840804023c9ae9ec1/pyconfig-2.1.4.tar.gz" } ], "2.1.5": [ { "comment_text": "", "digests": { "md5": "e59b9ee57607ff669cabf0b8a986d7f4", "sha256": "222f48a44c53b1ad1819b65a448b5208f4a03e65106838fd31dca4391230791b" }, "downloads": -1, "filename": "pyconfig-2.1.5.tar.gz", "has_sig": false, "md5_digest": "e59b9ee57607ff669cabf0b8a986d7f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11463, "upload_time": "2014-09-11T17:41:32", "url": "https://files.pythonhosted.org/packages/08/fd/c0af743b9445b47b1b2dc6e77e9152ca83b122c47b546af0954d817226e0/pyconfig-2.1.5.tar.gz" } ], "2.2.0": [ { "comment_text": "", "digests": { "md5": "e84defbc27e2529a4dc6bcc93c235a9e", "sha256": "fdb1bdb19e3fda8b0709f53d8c87b0969ca986b988a2a454c02ce2aa0d97e512" }, "downloads": -1, "filename": "pyconfig-2.2.0.tar.gz", "has_sig": false, "md5_digest": "e84defbc27e2529a4dc6bcc93c235a9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12237, "upload_time": "2014-10-10T18:57:19", "url": "https://files.pythonhosted.org/packages/e9/ad/6bdfc444ac681038ba7d19042b1dbb543baf099611a9ed51b8aca90dce5b/pyconfig-2.2.0.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "8b159237d89c668e565fd24bde5cf96c", "sha256": "771dbc41d5c6a650bdac61a482322c7ab06e992288b32e545aa33248952a12c3" }, "downloads": -1, "filename": "pyconfig-2.2.1.tar.gz", "has_sig": false, "md5_digest": "8b159237d89c668e565fd24bde5cf96c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12717, "upload_time": "2014-10-15T17:47:59", "url": "https://files.pythonhosted.org/packages/0e/01/256b3ef1f5a8cb63be43cf8ba4c5722af3f382216a509611424dfbf329c7/pyconfig-2.2.1.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "cc87a78407972346bcf4721c2c6c1f0f", "sha256": "3f54a7b1b633f456de041147382577d0ee20cf62a0c06fd5a134aa9a1ed7bfba" }, "downloads": -1, "filename": "pyconfig-3.0.0.tar.gz", "has_sig": false, "md5_digest": "cc87a78407972346bcf4721c2c6c1f0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21264, "upload_time": "2015-09-17T23:00:13", "url": "https://files.pythonhosted.org/packages/04/74/324ac30da6a1b9573bfb2f50ba8c93b30648481b3bdf4ad9f6cdda66c174/pyconfig-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "80b3dc19542abf92bff2f28bf26a9e32", "sha256": "2846c2ad72c4361ddf6783e96b60c06fbe81fd7a6ae82f627dc82fb03a1bbd94" }, "downloads": -1, "filename": "pyconfig-3.0.1.tar.gz", "has_sig": false, "md5_digest": "80b3dc19542abf92bff2f28bf26a9e32", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21369, "upload_time": "2015-09-18T19:45:26", "url": "https://files.pythonhosted.org/packages/87/7f/2f261b2ec9448453581d01631a042576f495baad0149d473986a8f89866a/pyconfig-3.0.1.tar.gz" } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "0a2d31d70bbba09b9820600b17cb7522", "sha256": "36ae292e599c42b747bc58fa51a5e6744dbe84a9dbc20c5a14c07e5aa61fde28" }, "downloads": -1, "filename": "pyconfig-3.0.2.tar.gz", "has_sig": false, "md5_digest": "0a2d31d70bbba09b9820600b17cb7522", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21508, "upload_time": "2015-09-29T01:27:25", "url": "https://files.pythonhosted.org/packages/d1/24/b38f72f2f50b7672c277eb1a798ea51a5fab1a5fae30ad136322b403a127/pyconfig-3.0.2.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "d6538340f9040034aaa0e172eeee09c7", "sha256": "ee7cdb0b958aded732704af3125ba767d3ee24067d102fc5067de6b931df7e9f" }, "downloads": -1, "filename": "pyconfig-3.1.0.tar.gz", "has_sig": false, "md5_digest": "d6538340f9040034aaa0e172eeee09c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22775, "upload_time": "2016-06-03T22:51:11", "url": "https://files.pythonhosted.org/packages/e9/69/89265c15b057e2e3df3192e2e2110fc85ea5eac0a91f70fcd8163c976aa2/pyconfig-3.1.0.tar.gz" } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "ca017e9ef5b725f7ed6c080a5264027d", "sha256": "d49f14869f17695967c26f796b2c36d505cb813df8745c01b9d11427e40c2ba9" }, "downloads": -1, "filename": "pyconfig-3.1.1.tar.gz", "has_sig": false, "md5_digest": "ca017e9ef5b725f7ed6c080a5264027d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22778, "upload_time": "2016-06-16T20:07:03", "url": "https://files.pythonhosted.org/packages/09/37/78af8b4c37b5b8d8dce5eeba058b0b264675c63a8baeb9a41244c9d86cd5/pyconfig-3.1.1.tar.gz" } ], "3.2.0": [ { "comment_text": "", "digests": { "md5": "7d8db938544276864009062c955bee14", "sha256": "3ff772c093f115f815e519aac2f9f2f0e8f98094b92fc91d02ab6bd901004d45" }, "downloads": -1, "filename": "pyconfig-3.2.0.tar.gz", "has_sig": false, "md5_digest": "7d8db938544276864009062c955bee14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23635, "upload_time": "2017-08-17T22:58:39", "url": "https://files.pythonhosted.org/packages/03/e7/b1a673d087b4a3b1b75e3aa53b194632d5ad38a21fcdc542d7033ecad7c4/pyconfig-3.2.0.tar.gz" } ], "3.2.1": [ { "comment_text": "", "digests": { "md5": "a4f55dec485d1b7a287911c85e12e3a6", "sha256": "dd8cf99ff7cfeafaf93093623879a1f53fd5bc0a59648bf3ffed898b15e4995b" }, "downloads": -1, "filename": "pyconfig-3.2.1.tar.gz", "has_sig": false, "md5_digest": "a4f55dec485d1b7a287911c85e12e3a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23916, "upload_time": "2017-08-18T04:43:08", "url": "https://files.pythonhosted.org/packages/2d/4b/920acc77efabf0c06baafc5f09b71b668f3c1fe1716275885c88acb35472/pyconfig-3.2.1.tar.gz" } ], "3.2.2": [ { "comment_text": "", "digests": { "md5": "ab5b6f516d09f938503b1d7759dc8771", "sha256": "d9e9d5c261356b452f83b68cdddbba899948e3a39fac5cdababa948d170cdfab" }, "downloads": -1, "filename": "pyconfig-3.2.2.tar.gz", "has_sig": false, "md5_digest": "ab5b6f516d09f938503b1d7759dc8771", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23916, "upload_time": "2017-08-18T06:12:41", "url": "https://files.pythonhosted.org/packages/69/c5/699f761c81dac0559de5fa2e544481dc89a4176e27f7d5ef5e83f821bbc2/pyconfig-3.2.2.tar.gz" } ], "3.2.3": [ { "comment_text": "", "digests": { "md5": "85481b2eec488e628a918173e69a5eae", "sha256": "797e250a2042927069a19085641bbbe7d975dff2b28dffd68116a0d0239d9c75" }, "downloads": -1, "filename": "pyconfig-3.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "85481b2eec488e628a918173e69a5eae", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 17209, "upload_time": "2018-08-02T09:40:53", "url": "https://files.pythonhosted.org/packages/94/3a/e64558856c92d4689e20c3e914069f089801eb45b0862e04fbf3f300275f/pyconfig-3.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8000d37a2e5bf58320f2c8ca2a9fd289", "sha256": "89c7580a3111f0b3ab9fe0cac630b9297a7aeedbb4c7eb55e90320bfb90ac649" }, "downloads": -1, "filename": "pyconfig-3.2.3.tar.gz", "has_sig": false, "md5_digest": "8000d37a2e5bf58320f2c8ca2a9fd289", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23915, "upload_time": "2017-08-18T06:26:03", "url": "https://files.pythonhosted.org/packages/50/70/8735b55844a482e65daf82827275d3d5867b77fb6413c99061c984dba226/pyconfig-3.2.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "85481b2eec488e628a918173e69a5eae", "sha256": "797e250a2042927069a19085641bbbe7d975dff2b28dffd68116a0d0239d9c75" }, "downloads": -1, "filename": "pyconfig-3.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "85481b2eec488e628a918173e69a5eae", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 17209, "upload_time": "2018-08-02T09:40:53", "url": "https://files.pythonhosted.org/packages/94/3a/e64558856c92d4689e20c3e914069f089801eb45b0862e04fbf3f300275f/pyconfig-3.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8000d37a2e5bf58320f2c8ca2a9fd289", "sha256": "89c7580a3111f0b3ab9fe0cac630b9297a7aeedbb4c7eb55e90320bfb90ac649" }, "downloads": -1, "filename": "pyconfig-3.2.3.tar.gz", "has_sig": false, "md5_digest": "8000d37a2e5bf58320f2c8ca2a9fd289", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23915, "upload_time": "2017-08-18T06:26:03", "url": "https://files.pythonhosted.org/packages/50/70/8735b55844a482e65daf82827275d3d5867b77fb6413c99061c984dba226/pyconfig-3.2.3.tar.gz" } ] }