{ "info": { "author": "Peter Odding", "author_email": "peter@peterodding.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Topic :: Utilities" ], "description": "update-dotdee: Generic modular configuration file manager\n=========================================================\n\n.. image:: https://travis-ci.org/xolox/python-update-dotdee.svg?branch=master\n :target: https://travis-ci.org/xolox/python-update-dotdee\n\n.. image:: https://coveralls.io/repos/xolox/python-update-dotdee/badge.svg?branch=master\n :target: https://coveralls.io/r/xolox/python-update-dotdee?branch=master\n\nThe update-dotdee program makes it easy to manage configuration files with\nmodular contents in the style of Debian_ and dotdee_. The program takes the\npathname of a configuration file and updates that file based on the contents of\nthe files in the directory with the same name as the file but ending in ``.d``.\nIt's currently tested on cPython 2.6, 2.7, 3.4, 3.5, 3.6 and PyPy (2.7).\n\n.. contents::\n :local:\n\nInstallation\n------------\n\nThe `update-dotdee` package is available on PyPI_ which means installation\nshould be as simple as:\n\n.. code-block:: sh\n\n $ pip install update-dotdee\n\nThere's actually a multitude of ways to install Python packages (e.g. the `per\nuser site-packages directory`_, `virtual environments`_ or just installing\nsystem wide) and I have no intention of getting into that discussion here, so\nif this intimidates you then read up on your options before returning to these\ninstructions ;-).\n\nUsage\n-----\n\nThere are two ways to use the update-dotdee package: As the command line\nprogram ``update-dotdee`` and as a Python API. For details about the Python API\nplease refer to the API documentation available on `Read the Docs`_. The\ncommand line interface is described below.\n\n.. contents::\n :local:\n\n.. A DRY solution to avoid duplication of the `update-dotdee --help' text:\n..\n.. [[[cog\n.. from humanfriendly.usage import inject_usage\n.. inject_usage('update_dotdee.cli')\n.. ]]]\n\n**Usage:** `update-dotdee FILENAME`\n\nGenerate a (configuration) file based on the contents of the files in the\ndirectory with the same name as FILENAME but ending in '.d'.\n\nIf FILENAME exists but the corresponding directory does not exist yet, the\ndirectory is created and FILENAME is moved into the directory so that its\nexisting contents are preserved.\n\n**Supported options:**\n\n.. csv-table::\n :header: Option, Description\n :widths: 30, 70\n\n\n \"``-f``, ``--force``\",\"Update FILENAME even if it contains local modifications,\n instead of aborting with an error message.\"\n \"``-u``, ``--use-sudo``\",\"Enable the use of \"\"sudo\"\" to update configuration files that are not\n readable and/or writable for the current user (or the user logged\n in to a remote system over SSH).\"\n \"``-r``, ``--remote-host=SSH_ALIAS``\",\"Operate on a remote system instead of the local system. The\n ``SSH_ALIAS`` argument gives the SSH alias of the remote host.\"\n \"``-v``, ``--verbose``\",Increase logging verbosity (can be repeated).\n \"``-q``, ``--quiet``\",Decrease logging verbosity (can be repeated).\n \"``-h``, ``--help``\",Show this message and exit.\n\n.. [[[end]]]\n\nExample\n-------\n\nThe `/etc/hosts`_ file is a simple example of a configuration file that can be\nmanaged using update-dotdee. Individual files in the ``/etc/hosts.d`` directory\ncontain snippets that are added to the configuration file on each run. For\nexample::\n\n peter@macbook> sudo update-dotdee /etc/hosts\n 2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/1-local\n 2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/2-work\n 2013-07-06 19:32:03 macbook INFO Reading file: /etc/hosts.d/3-ipv6\n 2013-07-06 20:59:24 macbook INFO Checking for local changes to /etc/hosts\n 2013-07-06 19:32:03 macbook INFO Writing file: /etc/hosts\n\nHow it works\n------------\n\nSome notes about how update-dotdee works:\n\n- If the given file exists but the corresponding directory does not exist yet,\n the directory is created and the file is moved into the directory (and\n renamed to ``local``) so that its existing contents are preserved.\n\n- If the generated file has been modified since the last run, update-dotdee\n will refuse to overwrite its contents (unless you use the ``-f`` or\n ``--force`` option).\n\n- The files in the ``.d`` directory are concatenated in the natural sorting\n order of the filenames (as implemented by the naturalsort_ package).\n\n- Executable files in the ``.d`` directory are executed and their standard\n output is incorporated into the generated contents (since version 4.0).\n\nUse cases\n---------\n\nHere are some example use cases for update-dotdee:\n\n**SSH client configuration**\n The update-dotdee program was created in 2013 to provide modular SSH client\n configurations. It was used to generate the ``~/.ssh/config`` file from the\n contents of the files in the ``~/.ssh/config.d`` directory. This functionality\n was needed because I developed an SSH client configuration generator based on\n a database of server metadata and I was looking for a way to update the user's\n ``~/.ssh/config`` without trashing the existing (carefully handcrafted)\n contents.\n\n**System wide configuration files**\n Linux system configuration files like `/etc/crypttab`_, `/etc/fstab`_ and\n `/etc/hosts`_ lack modularity and manipulating them using command line tools\n like awk_ and sed_ can be fragile and/or become unwieldy :-). However if you\n can get your configuration sources (for example Ansible playbooks, Debian\n packages and manual configuration) to agree on the use of update-dotdee then\n you have an elegant, robust and predictable alternative.\n\nRead only alternative\n---------------------\n\nSometimes the use of update-dotdee or a similar mechanism is the only way to\nget multiple configuration sources to cooperate, but it is a bit of a\nheavyweight solution. For the Python packages that I've published I wanted a\nmore lightweight alternative that simply searches for and loads ``*.ini``\nconfiguration files. This is why ConfigLoader_ was added in release 5.0.\n\nContact\n-------\n\nThe latest version of update-dotdee is available on PyPI_ and GitHub_. For bug\nreports please create an issue on GitHub_. If you have questions, suggestions,\netc. feel free to send me an e-mail at `peter@peterodding.com`_.\n\nLicense\n-------\n\nThis software is licensed under the `MIT license`_.\n\n\u00a9 2018 Peter Odding.\n\n.. External references:\n.. _/etc/crypttab: https://manpages.debian.org/crypttab\n.. _/etc/fstab: https://manpages.debian.org/fstab\n.. _/etc/hosts: https://manpages.debian.org/hosts\n.. _awk: https://manpages.debian.org/awk\n.. _ConfigLoader: http://update-dotdee.readthedocs.io/en/latest/#update_dotdee.ConfigLoader\n.. _Debian: http://www.debian.org/\n.. _dotdee: http://blog.dustinkirkland.com/2011/04/dotdee-modern-proposal-for-improving.html\n.. _GitHub: https://github.com/xolox/python-update-dotdee\n.. _MIT license: http://en.wikipedia.org/wiki/MIT_License\n.. _naturalsort: https://pypi.python.org/pypi/naturalsort\n.. _per user site-packages directory: https://www.python.org/dev/peps/pep-0370/\n.. _peter@peterodding.com: peter@peterodding.com\n.. _PyPI: https://pypi.python.org/pypi/update-dotdee\n.. _Read the Docs: https://update-dotdee.readthedocs.io/\n.. _sed: https://manpages.debian.org/sed\n.. _virtual environments: http://docs.python-guide.org/en/latest/dev/virtualenvs/\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/xolox/python-update-dotdee", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "update-dotdee", "package_url": "https://pypi.org/project/update-dotdee/", "platform": "", "project_url": "https://pypi.org/project/update-dotdee/", "project_urls": { "Homepage": "https://github.com/xolox/python-update-dotdee" }, "release_url": "https://pypi.org/project/update-dotdee/5.0/", "requires_dist": [ "coloredlogs (>=7.0)", "executor (>=19.1)", "humanfriendly (>=4.9)", "naturalsort (>=1.5.1)", "property-manager (>=2.2)", "six (>=1.10.0)" ], "requires_python": "", "summary": "Generic modular configuration file manager", "version": "5.0" }, "last_serial": 3715468, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "9bbbbf9413ea07f5b402ea58d20138cf", "sha256": "fb36d8b7a49e51fe889368e541d0f62f952a8ad27cb1a61fafe488ab1249aeb4" }, "downloads": -1, "filename": "update-dotdee-1.0.tar.gz", "has_sig": false, "md5_digest": "9bbbbf9413ea07f5b402ea58d20138cf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4846, "upload_time": "2013-07-06T19:06:46", "url": "https://files.pythonhosted.org/packages/10/5e/ef507aca7d0ab08190060e7aace6d4439f65dfb65637d28e0f5df19449cb/update-dotdee-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "4a509068e1acc116d9bb8d8c6639d470", "sha256": "555376e096b2c0d65b46e0f98f62b65deb877a7b664a1aa70b25295116110758" }, "downloads": -1, "filename": "update-dotdee-1.0.1.tar.gz", "has_sig": false, "md5_digest": "4a509068e1acc116d9bb8d8c6639d470", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4788, "upload_time": "2013-07-07T11:45:17", "url": "https://files.pythonhosted.org/packages/36/54/eb26ff7e3b8c223b314ce43479d7534b38457ff0dc31554c3730e5e95e1d/update-dotdee-1.0.1.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "e3b03145ca88b63b35ce2bf1c7401c20", "sha256": "0b1a4e0702cbee534b6c6c52054beb87cc0d71f2456590b3330aaec33be278ca" }, "downloads": -1, "filename": "update-dotdee-1.0.10.tar.gz", "has_sig": false, "md5_digest": "e3b03145ca88b63b35ce2bf1c7401c20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5358, "upload_time": "2014-05-06T12:13:12", "url": "https://files.pythonhosted.org/packages/e1/9c/dce0de618d48a843299f5c9d8cad498aa056a1f739e8012cd15a1600b12d/update-dotdee-1.0.10.tar.gz" } ], "1.0.2": [], "1.0.3": [], "1.0.4": [ { "comment_text": "", "digests": { "md5": "8be19541e43c27627acffe77963c6a5b", "sha256": "deacd80c47e8989cb7cde0269366f7062be9cb38d05fdfd7b800b0f4032ac11f" }, "downloads": -1, "filename": "update-dotdee-1.0.4.tar.gz", "has_sig": false, "md5_digest": "8be19541e43c27627acffe77963c6a5b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4993, "upload_time": "2013-07-14T22:07:37", "url": "https://files.pythonhosted.org/packages/ac/f6/6bd9560d0b9b7e40a162894c1dff7270a510f3c088ec8648b3f94aeaa126/update-dotdee-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "9cfb9f13dbd4243ac3b3cf570a6db906", "sha256": "9f00da7d62a53d4b6031060a8381eaa2d4792963bd73558f637c639d89b0c920" }, "downloads": -1, "filename": "update-dotdee-1.0.5.tar.gz", "has_sig": false, "md5_digest": "9cfb9f13dbd4243ac3b3cf570a6db906", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4997, "upload_time": "2013-07-16T15:30:51", "url": "https://files.pythonhosted.org/packages/96/68/f0c093db2b5c4d7f99f692331afe905471883a14f00d89b8b93f4da416b3/update-dotdee-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "7edecdcacb63643730dd9b3e3ec36e67", "sha256": "899f1492c498dc6605cbb51c14f3f961620fe1f7d0c95098286f96096bc84643" }, "downloads": -1, "filename": "update-dotdee-1.0.6.tar.gz", "has_sig": false, "md5_digest": "7edecdcacb63643730dd9b3e3ec36e67", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5308, "upload_time": "2013-07-20T22:53:37", "url": "https://files.pythonhosted.org/packages/d9/33/631bed83b63b8d3f5c4de0293795a05b9c76db5a29c7c3839d808688fb14/update-dotdee-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "c02c46274f76a2a43a3cde665203ff47", "sha256": "ccf4df4184d1392e69f4694f087fd5227d23e5158039ff04c482f0d0b79d1072" }, "downloads": -1, "filename": "update-dotdee-1.0.7.tar.gz", "has_sig": false, "md5_digest": "c02c46274f76a2a43a3cde665203ff47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5285, "upload_time": "2013-08-06T12:18:06", "url": "https://files.pythonhosted.org/packages/67/7a/2910739a61e453d9ff08b4fa26973b15f7fd56e61b4c6d433c738dcafc13/update-dotdee-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "52eff5ba2d8a9657be91e68a64cc4304", "sha256": "8dfa1a39a36f44e4ae7f7f2c8a11fda315f981c3aa8bd2be902b7f3f5a5b6e1c" }, "downloads": -1, "filename": "update-dotdee-1.0.8.tar.gz", "has_sig": false, "md5_digest": "52eff5ba2d8a9657be91e68a64cc4304", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5264, "upload_time": "2013-08-06T12:26:57", "url": "https://files.pythonhosted.org/packages/38/63/3260ba470e48e64ec1cd39abfdd1f702dcb8811a7e389af03972e58e2849/update-dotdee-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "4d37b7dcb207b96c68317fcd2cdef194", "sha256": "28104ca68b390462150153d3e57711c634fdcd328b282f3bc55b4828e1e5713b" }, "downloads": -1, "filename": "update-dotdee-1.0.9.tar.gz", "has_sig": false, "md5_digest": "4d37b7dcb207b96c68317fcd2cdef194", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5293, "upload_time": "2013-09-07T22:02:32", "url": "https://files.pythonhosted.org/packages/b6/1e/ff28b7c83e813845a96398e31361deba78792f8b5fc60c391e30acf96c6e/update-dotdee-1.0.9.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "d9c749627e0ec6e539dc71edf0ea5b82", "sha256": "1c1f3f6e12db7f6fa023a3ad50847265dcf1bda655e93cc60f859cafad7d97df" }, "downloads": -1, "filename": "update_dotdee-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d9c749627e0ec6e539dc71edf0ea5b82", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6712, "upload_time": "2017-07-12T17:46:57", "url": "https://files.pythonhosted.org/packages/bc/bb/c9ad9a02add912f6dd127c63e048da68efc333e92e01e0beb28fa8bb0479/update_dotdee-1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "273f92070c2876f93fd605b2dbf839bd", "sha256": "df8cb6ffe1962318250e35473d382df08989c291fdfa3f61250891d9543a2b58" }, "downloads": -1, "filename": "update-dotdee-1.1.tar.gz", "has_sig": false, "md5_digest": "273f92070c2876f93fd605b2dbf839bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5317, "upload_time": "2017-07-12T17:46:58", "url": "https://files.pythonhosted.org/packages/14/4c/fdd3ab9e1efed02694092ecc06f2cfb51aff1abbd2feb1ea5fbd78e27209/update-dotdee-1.1.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "da1a4397d8714b8722bb1291697f8ac6", "sha256": "9905623ea2a8f6dee73d7bbbac3cc3d49e7ec3ef5d955380f039a5c4296e9f83" }, "downloads": -1, "filename": "update_dotdee-2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "da1a4397d8714b8722bb1291697f8ac6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12407, "upload_time": "2017-07-12T22:02:03", "url": "https://files.pythonhosted.org/packages/57/d1/0aba67d1df5a73c575f0f71b909b272b24b791b4d888933ab3273b1d4a23/update_dotdee-2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfaf522ddf9f5081022a8b31b690675c", "sha256": "d5f888e747e0193db80ec36ac2f6ccd8d8d06e5a3f6ed12fd23e155157580d68" }, "downloads": -1, "filename": "update-dotdee-2.0.tar.gz", "has_sig": false, "md5_digest": "bfaf522ddf9f5081022a8b31b690675c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9001, "upload_time": "2017-07-12T22:02:05", "url": "https://files.pythonhosted.org/packages/4e/8f/3980217766eed3dfe1d79f92f56257d64c07ef565cd002e2abb814a70762/update-dotdee-2.0.tar.gz" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "c6849922980f83c67baead81fa26679e", "sha256": "d44e8a666193452be45e9c1b15843741d2eb34e9bd56f1028f7113745c25ec26" }, "downloads": -1, "filename": "update_dotdee-3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6849922980f83c67baead81fa26679e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13129, "upload_time": "2017-07-12T22:43:15", "url": "https://files.pythonhosted.org/packages/ba/74/fdb259bf108e0a0c72aaa9fc478f0611400249cd3b36394606dd019695b0/update_dotdee-3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "08c3271e2b803faa53f48c48d6f3933a", "sha256": "25640636db89e361f2f5bd2e44304c1db079da1db3e24bc6bdfe01fa31a1c651" }, "downloads": -1, "filename": "update-dotdee-3.0.tar.gz", "has_sig": false, "md5_digest": "08c3271e2b803faa53f48c48d6f3933a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9562, "upload_time": "2017-07-12T22:43:18", "url": "https://files.pythonhosted.org/packages/6e/64/1206ce22870d84959c999242372e27ae546fdc52c8a0d6e4b99d57ac5325/update-dotdee-3.0.tar.gz" } ], "4.0": [ { "comment_text": "", "digests": { "md5": "5b88c4f13aee2b7531ef96c3a2759fd2", "sha256": "d5d3c933378c8b9b8ef673eee917a7879e57eca3bcc0de392bbee60623feb6bf" }, "downloads": -1, "filename": "update_dotdee-4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "5b88c4f13aee2b7531ef96c3a2759fd2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13767, "upload_time": "2018-03-25T13:56:52", "url": "https://files.pythonhosted.org/packages/cb/8d/cb87488953676413f50c3b2ebf6e8be781ed3940efb7b52e36cc1ddbe78c/update_dotdee-4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4e96384bb5674f90f55e26e33fd94d3", "sha256": "1508b6fa7be8bcaac9deeb1c3a501af9a97478c0991a04d86b551b05a3c791cd" }, "downloads": -1, "filename": "update-dotdee-4.0.tar.gz", "has_sig": false, "md5_digest": "c4e96384bb5674f90f55e26e33fd94d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11741, "upload_time": "2018-03-25T13:56:53", "url": "https://files.pythonhosted.org/packages/e5/ce/bb35a53cee2ec858833c8f5c99761c3346ebd1a377f876272bfe342ff1e9/update-dotdee-4.0.tar.gz" } ], "5.0": [ { "comment_text": "", "digests": { "md5": "7e8ebed505f1d5f61815ab18612429f5", "sha256": "b0b2e0d13847d1adf84d415849dd2d98ea92b5f4432af90ce16aac31de4cab4f" }, "downloads": -1, "filename": "update_dotdee-5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e8ebed505f1d5f61815ab18612429f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17790, "upload_time": "2018-03-28T23:21:37", "url": "https://files.pythonhosted.org/packages/b8/d2/2784de11083ddc5048bfee3d6159a1a9ca5a753ec16e6cd6243d22733155/update_dotdee-5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "900cbe8b27642ef5965122741be1f527", "sha256": "7316afa9f63fb52cfcae17d10747a975df086fb82400bb310f1fe9f6a141e433" }, "downloads": -1, "filename": "update-dotdee-5.0.tar.gz", "has_sig": false, "md5_digest": "900cbe8b27642ef5965122741be1f527", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15507, "upload_time": "2018-03-28T23:21:38", "url": "https://files.pythonhosted.org/packages/82/bf/a8a8cd589367f19c16b243856d1a778d9f61b9280bdf124925723ebb5581/update-dotdee-5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7e8ebed505f1d5f61815ab18612429f5", "sha256": "b0b2e0d13847d1adf84d415849dd2d98ea92b5f4432af90ce16aac31de4cab4f" }, "downloads": -1, "filename": "update_dotdee-5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7e8ebed505f1d5f61815ab18612429f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17790, "upload_time": "2018-03-28T23:21:37", "url": "https://files.pythonhosted.org/packages/b8/d2/2784de11083ddc5048bfee3d6159a1a9ca5a753ec16e6cd6243d22733155/update_dotdee-5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "900cbe8b27642ef5965122741be1f527", "sha256": "7316afa9f63fb52cfcae17d10747a975df086fb82400bb310f1fe9f6a141e433" }, "downloads": -1, "filename": "update-dotdee-5.0.tar.gz", "has_sig": false, "md5_digest": "900cbe8b27642ef5965122741be1f527", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15507, "upload_time": "2018-03-28T23:21:38", "url": "https://files.pythonhosted.org/packages/82/bf/a8a8cd589367f19c16b243856d1a778d9f61b9280bdf124925723ebb5581/update-dotdee-5.0.tar.gz" } ] }