{ "info": { "author": "Peter Odding", "author_email": "peter@peterodding.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "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 :: Python Modules", "Topic :: System :: Shells", "Topic :: System :: Systems Administration", "Topic :: System :: System Shells", "Topic :: Terminals", "Topic :: Utilities" ], "description": "apt-mirror-updater: Automated Debian/Ubuntu mirror selection\n============================================================\n\n.. image:: https://travis-ci.org/xolox/python-apt-mirror-updater.svg?branch=master\n :target: https://travis-ci.org/xolox/python-apt-mirror-updater\n\n.. image:: https://coveralls.io/repos/xolox/python-apt-mirror-updater/badge.svg?branch=master\n :target: https://coveralls.io/r/xolox/python-apt-mirror-updater?branch=master\n\nThe `apt-mirror-updater` package automates robust apt-get_ mirror selection for\nDebian_ and Ubuntu_ by enabling discovery of available mirrors, ranking of\navailable mirrors, automatic switching between mirrors and robust package list\nupdating (see features_). It's currently tested on Python 2.6, 2.7, 3.4, 3.5,\n3.6 and PyPy (although test coverage is still rather low, see status_).\n\n.. contents::\n :local:\n\n.. _features:\n\nFeatures\n--------\n\n**Discovery of available mirrors**\n Debian_ and Ubuntu_ mirrors are discovered automatically by querying the\n `Debian mirror list `_ or the `Ubuntu\n mirror list `_ (the applicable\n mirror list is automatically selected based on the current platform).\n\n**Ranking of available mirrors**\n Discovered mirrors are ranked by bandwidth (to pick the fastest mirror) and\n excluded if they're being updated (see `issues with mirror updates`_).\n\n**Automatic switching between mirrors**\n The main mirror configured in ``/etc/apt/sources.list`` can be changed with a\n single command. The new (to be configured) mirror can be selected\n automatically or configured explicitly by the user.\n\n**Robust package list updating**\n Several apt-get_ subcommands can fail if the current mirror is being updated\n (see `issues with mirror updates`_) and `apt-mirror-updater` tries to work\n around this by wrapping ``apt-get update`` to retry on failures and\n automatically switch to a different mirror when it looks like the current\n mirror is being updated (because I've seen such updates take more than 15\n minutes and it's not always acceptable to wait for so long, especially in\n automated solutions).\n\n.. _status:\n\nStatus\n------\n\nOn the one hand the `apt-mirror-updater` package was developed based on quite a\nfew years of experience in using apt-get_ on Debian_ and Ubuntu_ systems and\nlarge scale automation of apt-get (working on 150+ remote systems). On the\nother hand the Python package itself is relatively new: it was developed and\npublished in March 2016. As such:\n\n.. warning:: Until `apt-mirror-updater` has been rigorously tested I consider\n it a proof of concept (beta software) so if it corrupts your\n system you can't complain that you weren't warned! I've already\n tested it on a variety of Ubuntu systems but haven't found the\n time to set up a Debian virtual machine for testing. Most of the\n logic is exactly the same though. The worst that can happen\n (assuming you trust my judgement ;-) is that\n ``/etc/apt/sources.list`` is corrupted however a backup copy is\n made before any changes are applied, so I don't see how this can\n result in irreversible corruption.\n\nI'm working on an automated test suite but at the moment I'm still a bit fuzzy\non how to create representative tests for the error handling code paths (also,\nwriting a decent test suite requires a significant chunk of time :-).\n\nInstallation\n------------\n\nThe `apt-mirror-updater` package is available on PyPI_ which means installation\nshould be as simple as:\n\n.. code-block:: sh\n\n $ pip install apt-mirror-updater\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 `apt-mirror-updater` package: As the command line\nprogram ``apt-mirror-updater`` and as a Python API. For details about the\nPython API please refer to the API documentation available on `Read the Docs`_.\nThe command line interface is described below.\n\n.. contents::\n :local:\n\n.. A DRY solution to avoid duplication of the `apt-mirror-updater --help' text:\n..\n.. [[[cog\n.. from humanfriendly.usage import inject_usage\n.. inject_usage('apt_mirror_updater.cli')\n.. ]]]\n\n**Usage:** `apt-mirror-updater [OPTIONS]`\n\nThe apt-mirror-updater program automates robust apt-get mirror selection for\nDebian and Ubuntu by enabling discovery of available mirrors, ranking of\navailable mirrors, automatic switching between mirrors and robust package list\nupdating.\n\n**Supported options:**\n\n.. csv-table::\n :header: Option, Description\n :widths: 30, 70\n\n\n \"``-r``, ``--remote-host=SSH_ALIAS``\",\"Operate on a remote system instead of the local system. The ``SSH_ALIAS``\n argument gives the SSH alias of the remote host. It is assumed that the\n remote account has root privileges or password-less sudo access.\"\n \"``-f``, ``--find-current-mirror``\",\"Determine the main mirror that is currently configured in\n /etc/apt/sources.list and report its URL on standard output.\"\n \"``-b``, ``--find-best-mirror``\",\"Discover available mirrors, rank them, select the best one and report its\n URL on standard output.\"\n \"``-l``, ``--list-mirrors``\",List available (ranked) mirrors on the terminal in a human readable format.\n \"``-c``, ``--change-mirror=MIRROR_URL``\",Update /etc/apt/sources.list to use the given ``MIRROR_URL``.\n \"``-a``, ``--auto-change-mirror``\",\"Discover available mirrors, rank the mirrors by connection speed and update\n status and update /etc/apt/sources.list to use the best available mirror.\"\n \"``-u``, ``--update``, ``--update-package-lists``\",\"Update the package lists using \"\"apt-get update\"\", retrying on failure and\n automatically switch to a different mirror when it looks like the current\n mirror is being updated.\"\n \"``-x``, ``--exclude=PATTERN``\",\"Add a pattern to the mirror selection blacklist. ``PATTERN`` is expected to be\n a shell pattern (containing wild cards like \"\"?\"\" and \"\"\\*\"\") that is matched\n against the full URL of each mirror.\"\n \"``-m``, ``--max=COUNT``\",\"Don't query more than ``COUNT`` mirrors for their connection status\n (defaults to 50). If you give the number 0 no limit will be applied.\n\n Because Ubuntu mirror discovery can report more than 300 mirrors it's\n useful to limit the number of mirrors that are queried, otherwise the\n ranking of mirrors will take a long time (because over 300 connections\n need to be established).\"\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\n.. _issues with mirror updates:\n\nIssues with mirror updates\n--------------------------\n\nOver the past five years my team (`at work`_) and I have been managing a\ncluster of 150+ Ubuntu servers, initially using manual system administration\nbut over time automating ``apt-get`` for a variety of use cases (provisioning,\nsecurity updates, deployments, etc.). As we increased our automation we started\nrunning into various transient failure modes of ``apt-get``, primarily with\n``apt-get update`` but incidentally also with other subcommands.\n\nThe most frequent failure that we run into is ``apt-get update`` crapping out\nwith 'hash sum mismatch' errors (see also `Debian bug #624122`_). When this\nhappens a file called ``Archive-Update-in-Progress-*`` can sometimes be found\non the index page of the mirror that is being used (see also `Debian bug\n#110837`_). I've seen these situations last for more than 15 minutes.\n\nMy working theory about these 'hash sum mismatch' errors is that they are\ncaused by the fact that mirror updates aren't atomic, apparently causing\n``apt-get update`` to download a package list whose datafiles aren't consistent\nwith each other. If this assumption proves to be correct (and also assuming\nthat different mirrors are updated at different times :-) then the command\n``apt-mirror-updater --update-package-lists`` should work around this annoying\nfailure mode (by automatically switching to a different mirror when 'hash sum\nmismatch' errors are encountered).\n\nPublishing `apt-mirror-updater` to the world is my attempt to contribute to\nthis situation instead of complaining in bug trackers (see above) where no\nrobust and automated solution is emerging (at the time of writing). Who knows,\nmaybe some day these issues will be resolved by moving logic similar to what\nI've implemented here into ``apt-get`` itself. Of course it would also help if\nmirror updates were atomic...\n\nContact\n-------\n\nThe latest version of `apt-mirror-updater` is available on PyPI_ and GitHub_.\nThe documentation is hosted on `Read the Docs`_ and includes a changelog_. For\nbug reports please create an issue on GitHub_. If you have questions,\nsuggestions, etc. 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\n.. External references:\n.. _apt-get: https://en.wikipedia.org/wiki/Advanced_Packaging_Tool\n.. _at work: http://www.paylogic.com/\n.. _changelog: https://apt-mirror-updater.readthedocs.io/changelog.html\n.. _Debian bug #110837: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=110837\n.. _Debian bug #624122: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=624122\n.. _Debian: https://en.wikipedia.org/wiki/Debian\n.. _documentation: https://apt-mirror-updater.readthedocs.io\n.. _GitHub: https://github.com/xolox/python-apt-mirror-updater\n.. _MIT license: http://en.wikipedia.org/wiki/MIT_License\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/apt-mirror-updater\n.. _Read the Docs: https://apt-mirror-updater.readthedocs.io\n.. _Ubuntu: https://en.wikipedia.org/wiki/Ubuntu_(operating_system)\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://apt-mirror-updater.readthedocs.io", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "apt-mirror-updater", "package_url": "https://pypi.org/project/apt-mirror-updater/", "platform": "", "project_url": "https://pypi.org/project/apt-mirror-updater/", "project_urls": { "Homepage": "https://apt-mirror-updater.readthedocs.io" }, "release_url": "https://pypi.org/project/apt-mirror-updater/6.1/", "requires_dist": [ "beautifulsoup4 (>=4.4.1)", "capturer (>=2.1.1)", "coloredlogs (>=5.0)", "executor (>=21.1.1)", "humanfriendly (>=3.4.1)", "property-manager (>=1.3)", "six (>=1.10.0)", "stopit (>=1.1.1)", "flufl.enum (<4.1,>=4.0.1); python_version == \"2.6\"", "flufl.enum (>=4.0.1); python_version == \"2.6\" or python_version == \"2.7\" or python_version == \"3.0\" or python_version == \"3.1\" or python_version == \"3.2\" or python_version == \"3.3\"" ], "requires_python": "", "summary": "Automated, robust apt-get mirror selection for Debian and Ubuntu", "version": "6.1" }, "last_serial": 4395814, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "a8ed8fd91b10a7b55940f5c31aa5f1b0", "sha256": "bbc25f6ddd199776c6189eb5edd51eb2b82443c507d5e8800deae6da495471de" }, "downloads": -1, "filename": "apt-mirror-updater-0.1.1.tar.gz", "has_sig": false, "md5_digest": "a8ed8fd91b10a7b55940f5c31aa5f1b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15127, "upload_time": "2016-03-10T14:43:25", "url": "https://files.pythonhosted.org/packages/b6/6e/20ddf4181a72f89564def48b8f37d4787f5f561fec512c9a5832295a8b56/apt-mirror-updater-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "2bc84fc503fe16bf6d3c2b58e10774d1", "sha256": "15706252b1babc37bc17a3b4d5d9850ab44591f9d7b351aa0e8043566be5ff16" }, "downloads": -1, "filename": "apt_mirror_updater-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2bc84fc503fe16bf6d3c2b58e10774d1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 19871, "upload_time": "2016-06-29T12:18:34", "url": "https://files.pythonhosted.org/packages/6b/70/7dc608dfa74f2b80393150ea4487097b4e7345e806c0539aeac4e7ef3ccf/apt_mirror_updater-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ad85f48fabbf3ebcfe8dc578a4b1912", "sha256": "97f59d789fd78efbb2fa1121ae3fa9c8629b88b6ca1609f223a750b32aaed655" }, "downloads": -1, "filename": "apt-mirror-updater-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0ad85f48fabbf3ebcfe8dc578a4b1912", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15811, "upload_time": "2016-06-29T12:19:12", "url": "https://files.pythonhosted.org/packages/54/ea/5c7258a7caf7c3e191099c8f6b4fe04adb1eab57c495294aa463b7fff94b/apt-mirror-updater-0.1.2.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "a2346afd285430f7ac3c5bd7086ef825", "sha256": "20c67f9786c30ea8838a0f7f4936e3bfbb097286dd7ca7bf7b0978d955d9f723" }, "downloads": -1, "filename": "apt_mirror_updater-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a2346afd285430f7ac3c5bd7086ef825", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20126, "upload_time": "2016-06-29T12:38:40", "url": "https://files.pythonhosted.org/packages/0b/a2/de0fadfff3385073cda190180460a3bf1ffdfb31b7845f12a3668e3701f0/apt_mirror_updater-0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bbcf6998ade319e5fa43640062a7755c", "sha256": "c33ce8b6d665957d2c9ef8a4ccb2be4306e353a6243a14540836903d4cbb3833" }, "downloads": -1, "filename": "apt-mirror-updater-0.2.tar.gz", "has_sig": false, "md5_digest": "bbcf6998ade319e5fa43640062a7755c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16114, "upload_time": "2016-06-29T12:38:44", "url": "https://files.pythonhosted.org/packages/c8/68/b6778a367869debfab0aa04f8e787242b8d46b0a23c47fdd244de53906cf/apt-mirror-updater-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "9cf485e03b5ec3900fc1db44d1da122f", "sha256": "921645435fa9f0dccfc1941778cfc45d863e89929ae5b259989605af409c3d91" }, "downloads": -1, "filename": "apt_mirror_updater-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9cf485e03b5ec3900fc1db44d1da122f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20523, "upload_time": "2016-06-29T12:56:18", "url": "https://files.pythonhosted.org/packages/55/d5/2423d175e0256c931a2e2f0d97a874ce29d7680665a918f5c030aed15edc/apt_mirror_updater-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ea3e5e03b9592c7edc08b5aeaca203e3", "sha256": "188c6c125ad29bf7158ef25a411d25484f1b7dffddf07cee1753c5ee60d8307d" }, "downloads": -1, "filename": "apt-mirror-updater-0.3.tar.gz", "has_sig": false, "md5_digest": "ea3e5e03b9592c7edc08b5aeaca203e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16501, "upload_time": "2016-06-29T12:56:22", "url": "https://files.pythonhosted.org/packages/47/c5/8ad749c346949166fec6ea8117ba4084c487b259e2456333941924f6d150/apt-mirror-updater-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "62721389b73059e860755be76b4c5842", "sha256": "3ad8826cb09f8e1922f6258c1496adbdf8ea0215569bc2feab6eee0e22cc558b" }, "downloads": -1, "filename": "apt_mirror_updater-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "62721389b73059e860755be76b4c5842", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20612, "upload_time": "2016-06-29T13:03:45", "url": "https://files.pythonhosted.org/packages/b9/d0/d5057ad0941f1f58dec8cea01e9a36389966a797187ddaad2d5b5907343a/apt_mirror_updater-0.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0e804982183a78c8983e68260459573", "sha256": "1f230d9b694cb105d5b8d16616bbfeda68cbecf24c30b440057df4d381f69483" }, "downloads": -1, "filename": "apt-mirror-updater-0.3.1.tar.gz", "has_sig": false, "md5_digest": "a0e804982183a78c8983e68260459573", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16619, "upload_time": "2016-06-29T13:03:50", "url": "https://files.pythonhosted.org/packages/25/44/4cad36301ea94b25fc13df7cb15c8ca39ab4051e3f92c3ca1923141b746d/apt-mirror-updater-0.3.1.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "d927a87eda84450c677cf4008ac4e21a", "sha256": "cd60704b426d494272f8f6c03dfaaf69a873d0fb3c8ddf7d9e5825040b4c7af8" }, "downloads": -1, "filename": "apt_mirror_updater-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d927a87eda84450c677cf4008ac4e21a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27920, "upload_time": "2017-06-08T21:10:48", "url": "https://files.pythonhosted.org/packages/9f/27/4eef2cfc5a3c772b2099c8fb14614d35d97122b2023da8fe4006d005ecb2/apt_mirror_updater-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c7ae100819080c77af78baf2e616b776", "sha256": "11959375155e95d1fe055515b4e912aca24b3d0f2cdcc3be013adf573a2a86f8" }, "downloads": -1, "filename": "apt-mirror-updater-1.0.tar.gz", "has_sig": false, "md5_digest": "c7ae100819080c77af78baf2e616b776", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23715, "upload_time": "2017-06-08T21:10:49", "url": "https://files.pythonhosted.org/packages/a3/e6/4a062e105e447ef5571969e0bd508cca59e92bf58cc0d7de2a9ee7f3f069/apt-mirror-updater-1.0.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "313151c9e9057550fab19fa1e7a75d19", "sha256": "422699369f514a2d86b181d8da3410ae8f9b6bb1958332a6c02c917ccfb3ed38" }, "downloads": -1, "filename": "apt_mirror_updater-2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "313151c9e9057550fab19fa1e7a75d19", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31611, "upload_time": "2017-06-11T00:55:38", "url": "https://files.pythonhosted.org/packages/ce/9d/024d07df0abd9cc3d5e6e0fa5c3c111f22c741c9ec270bc354a11dd38e21/apt_mirror_updater-2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ffbe9b1fecc85faae5b1f0f1043811ab", "sha256": "53b8a457c7b16b02e03fd8dc24ee85f20278b250074244f30ff9c396aae0a20c" }, "downloads": -1, "filename": "apt-mirror-updater-2.0.tar.gz", "has_sig": false, "md5_digest": "ffbe9b1fecc85faae5b1f0f1043811ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27013, "upload_time": "2017-06-11T00:55:40", "url": "https://files.pythonhosted.org/packages/7c/b3/e266b39132f03612748b701808996307a1cdd3f3a1ecf33a350141e0032d/apt-mirror-updater-2.0.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "b5f120a2ba356e944c51c4eef7f4a0db", "sha256": "4c88aa270c7e7173e31da7e8caaefe357f9394ed1a38276e39a4180c53d1fa28" }, "downloads": -1, "filename": "apt_mirror_updater-2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b5f120a2ba356e944c51c4eef7f4a0db", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32162, "upload_time": "2017-06-12T19:07:32", "url": "https://files.pythonhosted.org/packages/f0/7f/001e52bc3403fda3d87eeb98e3da91eb5a7370c14525cf5d06134186c2e6/apt_mirror_updater-2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "31017435b90137484f39915b979041b3", "sha256": "2fa1a608d6c7044cfcd2b7ceda68155c9dcb47a937614ad1a73a047323e21bef" }, "downloads": -1, "filename": "apt-mirror-updater-2.1.tar.gz", "has_sig": false, "md5_digest": "31017435b90137484f39915b979041b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27569, "upload_time": "2017-06-12T19:07:34", "url": "https://files.pythonhosted.org/packages/d3/da/a37ddaf1cb2971d028b5efc0d95ccb1b6856f4a6bd8da2862db43d1e47a1/apt-mirror-updater-2.1.tar.gz" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "f5fbb5e023ddae55521937edd888252a", "sha256": "62e2cffac2083d9d2b836ae8c36e8e9ae12ca3e657d6a9bae7e886e8e632dc5a" }, "downloads": -1, "filename": "apt_mirror_updater-3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5fbb5e023ddae55521937edd888252a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32398, "upload_time": "2017-06-12T22:23:35", "url": "https://files.pythonhosted.org/packages/f8/fc/04e02d4b0e825a0cb55ea45e14435f82de62ab77529a84bf89847d31741f/apt_mirror_updater-3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b8006ad15079e4e8f8c18562ea94ee71", "sha256": "cfb5e400754726a5d6df1347f6b98caf1e102438724b4b7584161f5ce0dd1b4a" }, "downloads": -1, "filename": "apt-mirror-updater-3.0.tar.gz", "has_sig": false, "md5_digest": "b8006ad15079e4e8f8c18562ea94ee71", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27587, "upload_time": "2017-06-12T22:23:37", "url": "https://files.pythonhosted.org/packages/be/d0/400e3b97692995edfba8ab6e5362ca828b4dbc6cde378ac73f5cc403595b/apt-mirror-updater-3.0.tar.gz" } ], "3.1": [ { "comment_text": "", "digests": { "md5": "c6ce8ebb2ebc27dc23923277ae4a397d", "sha256": "fa37c0851183ee994b139e92d55715b8110b0fd613204df7e6e5941cdf7fc866" }, "downloads": -1, "filename": "apt_mirror_updater-3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c6ce8ebb2ebc27dc23923277ae4a397d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32571, "upload_time": "2017-06-12T22:53:56", "url": "https://files.pythonhosted.org/packages/f6/b3/e461bf0dd26771b5e943f8c48b4746ce700f9f2dc4426fc1157bef0b25f6/apt_mirror_updater-3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "745b123ec6cf46fff5be9ea169f4894c", "sha256": "5c75c29d67ac62e44a6ccfb204b9f5b843d0ea27a517637ef7d156b9372921c2" }, "downloads": -1, "filename": "apt-mirror-updater-3.1.tar.gz", "has_sig": false, "md5_digest": "745b123ec6cf46fff5be9ea169f4894c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27742, "upload_time": "2017-06-12T22:53:58", "url": "https://files.pythonhosted.org/packages/b0/9d/1920455ae6532109f65afa48c083ddf208823d36ee24bf4ae8a71a235624/apt-mirror-updater-3.1.tar.gz" } ], "4.0": [ { "comment_text": "", "digests": { "md5": "af50909229ad488c142740d4269c4b05", "sha256": "5a8e71aab9a14a36f551a1027175504f82316096686dbc96c7db6f273f27dc80" }, "downloads": -1, "filename": "apt_mirror_updater-4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "af50909229ad488c142740d4269c4b05", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32834, "upload_time": "2017-06-13T22:54:03", "url": "https://files.pythonhosted.org/packages/3c/34/8edbe0f23e6f9c64ed9e2efb277300ee38f4858d1fea6d223cbd812fb57b/apt_mirror_updater-4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a58f4a46c73c0325d15b9ca9538ddc63", "sha256": "5aebf287370760dca007f8ef6b1a29d36d4d26bf56130002d478424399711ab3" }, "downloads": -1, "filename": "apt-mirror-updater-4.0.tar.gz", "has_sig": false, "md5_digest": "a58f4a46c73c0325d15b9ca9538ddc63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28107, "upload_time": "2017-06-13T22:54:06", "url": "https://files.pythonhosted.org/packages/88/62/753270167bcb3f823bb4b3cfb0a1c118d49b57b696904c27c0e953a4ff1b/apt-mirror-updater-4.0.tar.gz" } ], "5.0": [ { "comment_text": "", "digests": { "md5": "f73939832829060c8df60a6ebaa752d8", "sha256": "c658945910ece3a4c2481fb35d71fbfaf56962d9cb981ccd838ff695f92a4c40" }, "downloads": -1, "filename": "apt_mirror_updater-5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f73939832829060c8df60a6ebaa752d8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35941, "upload_time": "2017-11-01T22:04:46", "url": "https://files.pythonhosted.org/packages/43/c0/adb155e89df674b9bdc269f160ea9ba838b402616c7a45b288fc8c5f7e2b/apt_mirror_updater-5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1e2c89fa74dfa8c441b2523cba5fb356", "sha256": "aeb7559db98530914e238892c74f3848cf564091dca8256b30859031ab4e4845" }, "downloads": -1, "filename": "apt-mirror-updater-5.0.tar.gz", "has_sig": false, "md5_digest": "1e2c89fa74dfa8c441b2523cba5fb356", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31177, "upload_time": "2017-11-01T22:04:48", "url": "https://files.pythonhosted.org/packages/c8/3a/1fdc69d9cc67d67fef6c38b6c1b9ef7e9ee9ea350360562d46ddd97f1917/apt-mirror-updater-5.0.tar.gz" } ], "5.0.1": [ { "comment_text": "", "digests": { "md5": "8184ecce1515077fc477ee469a7850e8", "sha256": "88aacc39b49aa677b2f2fa2975f93bf7f33c436c95faf7f68cd2c3ef6ef0c5e1" }, "downloads": -1, "filename": "apt_mirror_updater-5.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8184ecce1515077fc477ee469a7850e8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 35979, "upload_time": "2017-11-01T22:27:00", "url": "https://files.pythonhosted.org/packages/b9/dc/621976f597b7a74573be23eb6540bbc12a214d2d05297d99af6fba382f50/apt_mirror_updater-5.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8de64e4f9abd39c8f3301a070bdf2ce6", "sha256": "ebf2b9788b7c60166d31d15aadc20ac8b3bc7fc89ab2a6e82db674d2696701ec" }, "downloads": -1, "filename": "apt-mirror-updater-5.0.1.tar.gz", "has_sig": false, "md5_digest": "8de64e4f9abd39c8f3301a070bdf2ce6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31198, "upload_time": "2017-11-01T22:27:02", "url": "https://files.pythonhosted.org/packages/e9/ff/4de1213c7e92ee43cb8748e43286d449b2595f2a0c35367f130269e3c6cc/apt-mirror-updater-5.0.1.tar.gz" } ], "5.1": [ { "comment_text": "", "digests": { "md5": "4b71320f6ecd1719c8d16a1d6d312a0f", "sha256": "297e62fc478e3d14cb861719e717e4123d8caf125824a89949f2cef94719af6a" }, "downloads": -1, "filename": "apt_mirror_updater-5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b71320f6ecd1719c8d16a1d6d312a0f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32199, "upload_time": "2018-06-22T15:16:57", "url": "https://files.pythonhosted.org/packages/a5/7b/241994828f7074d9165736fd2fa5f1bbf99b102e067103002fa1462abfce/apt_mirror_updater-5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd18109226ff82703d5e9c1de4b913ac", "sha256": "d0723201fa256ad20871193455e54ca239ce4d83f782b000e602be0079867955" }, "downloads": -1, "filename": "apt-mirror-updater-5.1.tar.gz", "has_sig": false, "md5_digest": "bd18109226ff82703d5e9c1de4b913ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37712, "upload_time": "2018-06-22T15:16:59", "url": "https://files.pythonhosted.org/packages/f8/4f/b6f4f9e71b41584c887e9d36daa7241c558db8224aceaeaface282b75d85/apt-mirror-updater-5.1.tar.gz" } ], "5.2": [ { "comment_text": "", "digests": { "md5": "18f2208defc31408435ee5da543219d3", "sha256": "4350df3fe408a71777e14790ec81e12532ff2fac5eb66ce814781c042d7574c9" }, "downloads": -1, "filename": "apt_mirror_updater-5.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "18f2208defc31408435ee5da543219d3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 32913, "upload_time": "2018-10-08T11:13:43", "url": "https://files.pythonhosted.org/packages/6d/e3/25c897a886ad3382aed43ac5506d57844db2d6ab9b5d74050b03946c6971/apt_mirror_updater-5.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2e03531c002d561cc45e2d01a84c3cb4", "sha256": "87a5039b6c509115ef6ae4366e028d69b154a2fae9843ca7426a299f0c22966b" }, "downloads": -1, "filename": "apt-mirror-updater-5.2.tar.gz", "has_sig": false, "md5_digest": "2e03531c002d561cc45e2d01a84c3cb4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39517, "upload_time": "2018-10-08T11:13:45", "url": "https://files.pythonhosted.org/packages/71/49/3ea121dd9051a40236e13a94c452a6638ef969f6d831aa04892d833093b2/apt-mirror-updater-5.2.tar.gz" } ], "6.0": [ { "comment_text": "", "digests": { "md5": "d0b4ea459055ac25b9baa7bd449c98a5", "sha256": "85e7d15529a222c185559394e4e0d2b6d305e07ec5b73f97da059881b5a7579e" }, "downloads": -1, "filename": "apt_mirror_updater-6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d0b4ea459055ac25b9baa7bd449c98a5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 36981, "upload_time": "2018-10-14T02:45:31", "url": "https://files.pythonhosted.org/packages/f4/82/1e0b63cf0c22aead009580328af941972c480771167853bd10ba999b7ac4/apt_mirror_updater-6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a549723942e13a04051381c62539a811", "sha256": "a784a490712ee388b54b08d22369da1e9b34c6dd3e402ab86169c9ea86597c8b" }, "downloads": -1, "filename": "apt-mirror-updater-6.0.tar.gz", "has_sig": false, "md5_digest": "a549723942e13a04051381c62539a811", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43723, "upload_time": "2018-10-14T02:45:33", "url": "https://files.pythonhosted.org/packages/f7/d6/cc9adac2fcf47fcde431843417826119d5e45bb038d461e0b80a42875eb4/apt-mirror-updater-6.0.tar.gz" } ], "6.1": [ { "comment_text": "", "digests": { "md5": "baa37764a48ded539cbdd43cbf30efb5", "sha256": "3ff805d57acaab7c55fdca7c642046d9c3a7ad2e5a95e3ef58dc5f77b573e990" }, "downloads": -1, "filename": "apt_mirror_updater-6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "baa37764a48ded539cbdd43cbf30efb5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37658, "upload_time": "2018-10-19T21:16:46", "url": "https://files.pythonhosted.org/packages/42/f6/839261d66441bcd8711e8c9dc7a352b9399b0ac5e4ac03994808708a01f7/apt_mirror_updater-6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3029dc0ee16167311040b6a6f73bfff6", "sha256": "dc9056c4e6ddccd9ff835f12f97816b592e6d82566d4ba6665303b4f38f6a4f7" }, "downloads": -1, "filename": "apt-mirror-updater-6.1.tar.gz", "has_sig": false, "md5_digest": "3029dc0ee16167311040b6a6f73bfff6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44430, "upload_time": "2018-10-19T21:16:49", "url": "https://files.pythonhosted.org/packages/ac/58/26718c3b6ffa1079b0857ac13b5c9e3ef3b9cbc2c7ef016854881dd33493/apt-mirror-updater-6.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "baa37764a48ded539cbdd43cbf30efb5", "sha256": "3ff805d57acaab7c55fdca7c642046d9c3a7ad2e5a95e3ef58dc5f77b573e990" }, "downloads": -1, "filename": "apt_mirror_updater-6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "baa37764a48ded539cbdd43cbf30efb5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 37658, "upload_time": "2018-10-19T21:16:46", "url": "https://files.pythonhosted.org/packages/42/f6/839261d66441bcd8711e8c9dc7a352b9399b0ac5e4ac03994808708a01f7/apt_mirror_updater-6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3029dc0ee16167311040b6a6f73bfff6", "sha256": "dc9056c4e6ddccd9ff835f12f97816b592e6d82566d4ba6665303b4f38f6a4f7" }, "downloads": -1, "filename": "apt-mirror-updater-6.1.tar.gz", "has_sig": false, "md5_digest": "3029dc0ee16167311040b6a6f73bfff6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44430, "upload_time": "2018-10-19T21:16:49", "url": "https://files.pythonhosted.org/packages/ac/58/26718c3b6ffa1079b0857ac13b5c9e3ef3b9cbc2c7ef016854881dd33493/apt-mirror-updater-6.1.tar.gz" } ] }