=======================
Mario the Devpi Plumber
=======================
.. image:: https://coveralls.io/repos/blue-yonder/devpi-plumber/badge.svg?branch=master
:alt: Coverage Status
:target: https://coveralls.io/r/blue-yonder/devpi-plumber?branch=master
.. image:: https://badge.fury.io/py/devpi-plumber.svg
:alt: Latest Version
:target: https://pypi.python.org/pypi/devpi-plumber
Mario, the devpi-plumber, helps to automate and test large devpi_ installations. It offers a simple python commandline wrapper
around the devpi client binary and utilities for using devpi in a test harness. To get access to the latter, install Mario
with the extra ``test`` requirement::
pip install devpi-plumber[test]
Mario by Example:
=================
Among others, it can be used to automate the upload of packages:
.. code:: python
with DevpiClient('https://devpi.company.com', 'user', 'secret') as devpi:
devpi.use('user/testindex')
devpi.upload('path/to/package-1.0.tar.gz')
To make it easier to perform modifications on non-volatile indices, there is a context manager that temporarily toggles the volatile flag.
.. code:: python
with volatile_index(devpi, 'user/prodindex'):
devpi.remove('broken_package==0.1.0')
In order to simplify the testing of such plumbing scripts, it ships with a simple context manager for starting and stopping devpi servers in tests.
.. code:: python
def do_maintenance(devpi):
""" My plumbing script """
devpi.use('user/testindex')
# ...
users = {
'user': {'password': 'secret'},
}
indices = {
'user/prodindex': {},
'user/testindex': {'bases': 'user/prodindex'},
}
with TestServer(users, indices) as devpi:
do_maintenance(devpi)
License
=======
`New BSD`_
.. _devpi: http://doc.devpi.net/latest/
.. _New BSD: https://github.com/blue-yonder/devpi-builder/blob/master/COPYING
Raw data
{
"_id": null,
"home_page": "https://github.com/blue-yonder/devpi-plumber",
"name": "devpi-plumber",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "",
"author": "Stephan Erb",
"author_email": "stephan.erb@blue-yonder.com",
"download_url": "https://files.pythonhosted.org/packages/28/6b/6f67ece93542c2c659bfe760d5e4c3cff2754bc3238c39a5f0a26cb0a83c/devpi-plumber-0.7.0.tar.gz",
"platform": null,
"description": "=======================\nMario the Devpi Plumber\n=======================\n\n.. image:: https://coveralls.io/repos/blue-yonder/devpi-plumber/badge.svg?branch=master\n :alt: Coverage Status\n :target: https://coveralls.io/r/blue-yonder/devpi-plumber?branch=master\n.. image:: https://badge.fury.io/py/devpi-plumber.svg\n :alt: Latest Version\n :target: https://pypi.python.org/pypi/devpi-plumber\n\nMario, the devpi-plumber, helps to automate and test large devpi_ installations. It offers a simple python commandline wrapper\naround the devpi client binary and utilities for using devpi in a test harness. To get access to the latter, install Mario\nwith the extra ``test`` requirement::\n\n pip install devpi-plumber[test]\n\n\nMario by Example:\n=================\n\nAmong others, it can be used to automate the upload of packages:\n\n.. code:: python\n\n with DevpiClient('https://devpi.company.com', 'user', 'secret') as devpi:\n devpi.use('user/testindex')\n devpi.upload('path/to/package-1.0.tar.gz')\n\nTo make it easier to perform modifications on non-volatile indices, there is a context manager that temporarily toggles the volatile flag.\n\n.. code:: python\n\n with volatile_index(devpi, 'user/prodindex'):\n devpi.remove('broken_package==0.1.0')\n\nIn order to simplify the testing of such plumbing scripts, it ships with a simple context manager for starting and stopping devpi servers in tests.\n\n.. code:: python\n\n def do_maintenance(devpi):\n \"\"\" My plumbing script \"\"\"\n devpi.use('user/testindex')\n # ...\n\n users = { \n 'user': {'password': 'secret'},\n }\n indices = {\n 'user/prodindex': {},\n 'user/testindex': {'bases': 'user/prodindex'},\n }\n with TestServer(users, indices) as devpi:\n do_maintenance(devpi)\n\n\nLicense\n=======\n\n`New BSD`_\n\n\n.. _devpi: http://doc.devpi.net/latest/\n.. _New BSD: https://github.com/blue-yonder/devpi-builder/blob/master/COPYING\n",
"bugtrack_url": null,
"license": "new BSD",
"summary": "Mario, the devpi-plumber, helps to automate and test large devpi installations.",
"version": "0.7.0",
"project_urls": {
"Homepage": "https://github.com/blue-yonder/devpi-plumber"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ec049149c8773af694a1a1e18f14c801cdb13dc3023b556f9c4f48df90415e12",
"md5": "c6190a28c1d4136513e9ec4c647803f8",
"sha256": "e9aff00606aa3f4a74c53b45d734492179e33cdbae30e0c4ded2f11f2a925b0c"
},
"downloads": -1,
"filename": "devpi_plumber-0.7.0-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "c6190a28c1d4136513e9ec4c647803f8",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 7622,
"upload_time": "2023-10-04T12:48:28",
"upload_time_iso_8601": "2023-10-04T12:48:28.226526Z",
"url": "https://files.pythonhosted.org/packages/ec/04/9149c8773af694a1a1e18f14c801cdb13dc3023b556f9c4f48df90415e12/devpi_plumber-0.7.0-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "286b6f67ece93542c2c659bfe760d5e4c3cff2754bc3238c39a5f0a26cb0a83c",
"md5": "a20e8b61f3d6eaf8c411e1dee2efae74",
"sha256": "e53105c3f7ae29f74aa6ae0ab46c2c54ad29d8175e59f82950f2852b04c14996"
},
"downloads": -1,
"filename": "devpi-plumber-0.7.0.tar.gz",
"has_sig": false,
"md5_digest": "a20e8b61f3d6eaf8c411e1dee2efae74",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 182260,
"upload_time": "2023-10-04T12:48:30",
"upload_time_iso_8601": "2023-10-04T12:48:30.120235Z",
"url": "https://files.pythonhosted.org/packages/28/6b/6f67ece93542c2c659bfe760d5e4c3cff2754bc3238c39a5f0a26cb0a83c/devpi-plumber-0.7.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-04 12:48:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "blue-yonder",
"github_project": "devpi-plumber",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "aiohttp",
"specs": [
[
"==",
"3.8.5"
]
]
},
{
"name": "aiosignal",
"specs": [
[
"==",
"1.3.1"
]
]
},
{
"name": "alabaster",
"specs": [
[
"==",
"0.7.13"
]
]
},
{
"name": "argon2-cffi",
"specs": [
[
"==",
"23.1.0"
]
]
},
{
"name": "argon2-cffi-bindings",
"specs": [
[
"==",
"21.2.0"
]
]
},
{
"name": "async-timeout",
"specs": [
[
"==",
"4.0.3"
]
]
},
{
"name": "attrs",
"specs": [
[
"==",
"23.1.0"
]
]
},
{
"name": "babel",
"specs": [
[
"==",
"2.13.0"
]
]
},
{
"name": "build",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "certifi",
"specs": [
[
"==",
"2023.7.22"
]
]
},
{
"name": "cffi",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "charset-normalizer",
"specs": [
[
"==",
"3.3.0"
]
]
},
{
"name": "check-manifest",
"specs": [
[
"==",
"0.49"
]
]
},
{
"name": "coverage",
"specs": [
[
"==",
"7.3.2"
]
]
},
{
"name": "defusedxml",
"specs": [
[
"==",
"0.7.1"
]
]
},
{
"name": "devpi-client",
"specs": [
[
"==",
"6.0.5"
]
]
},
{
"name": "devpi-common",
"specs": [
[
"==",
"3.7.2"
]
]
},
{
"name": "devpi-server",
"specs": [
[
"==",
"6.9.2"
]
]
},
{
"name": "docutils",
"specs": [
[
"==",
"0.20.1"
]
]
},
{
"name": "exceptiongroup",
"specs": [
[
"==",
"1.1.3"
]
]
},
{
"name": "frozenlist",
"specs": [
[
"==",
"1.4.0"
]
]
},
{
"name": "hupper",
"specs": [
[
"==",
"1.12"
]
]
},
{
"name": "idna",
"specs": [
[
"==",
"3.4"
]
]
},
{
"name": "imagesize",
"specs": [
[
"==",
"1.4.1"
]
]
},
{
"name": "importlib-metadata",
"specs": [
[
"==",
"6.8.0"
]
]
},
{
"name": "iniconfig",
"specs": [
[
"==",
"2.0.0"
]
]
},
{
"name": "itsdangerous",
"specs": [
[
"==",
"2.1.2"
]
]
},
{
"name": "jinja2",
"specs": [
[
"==",
"3.1.2"
]
]
},
{
"name": "lazy",
"specs": [
[
"==",
"1.6"
]
]
},
{
"name": "markupsafe",
"specs": [
[
"==",
"2.1.3"
]
]
},
{
"name": "mock",
"specs": [
[
"==",
"5.1.0"
]
]
},
{
"name": "multidict",
"specs": [
[
"==",
"6.0.4"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"21.3"
]
]
},
{
"name": "passlib",
"specs": [
[
"==",
"1.7.4"
]
]
},
{
"name": "pastedeploy",
"specs": [
[
"==",
"3.0.1"
]
]
},
{
"name": "pep517",
"specs": [
[
"==",
"0.13.0"
]
]
},
{
"name": "pkginfo",
"specs": [
[
"==",
"1.9.6"
]
]
},
{
"name": "plaster",
"specs": [
[
"==",
"1.1.2"
]
]
},
{
"name": "plaster-pastedeploy",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "platformdirs",
"specs": [
[
"==",
"3.11.0"
]
]
},
{
"name": "pluggy",
"specs": [
[
"==",
"1.3.0"
]
]
},
{
"name": "py",
"specs": [
[
"==",
"1.11.0"
]
]
},
{
"name": "pycparser",
"specs": [
[
"==",
"2.21"
]
]
},
{
"name": "pygments",
"specs": [
[
"==",
"2.16.1"
]
]
},
{
"name": "pyparsing",
"specs": [
[
"==",
"3.1.1"
]
]
},
{
"name": "pyproject-hooks",
"specs": [
[
"==",
"1.0.0"
]
]
},
{
"name": "pyramid",
"specs": [
[
"==",
"2.0.2"
]
]
},
{
"name": "pytest",
"specs": [
[
"==",
"7.4.2"
]
]
},
{
"name": "pytest-cov",
"specs": [
[
"==",
"4.1.0"
]
]
},
{
"name": "python-dateutil",
"specs": [
[
"==",
"2.8.2"
]
]
},
{
"name": "pytz",
"specs": [
[
"==",
"2023.3.post1"
]
]
},
{
"name": "repoze-lru",
"specs": [
[
"==",
"0.7"
]
]
},
{
"name": "requests",
"specs": [
[
"==",
"2.31.0"
]
]
},
{
"name": "ruamel-yaml",
"specs": [
[
"==",
"0.17.35"
]
]
},
{
"name": "ruamel-yaml-clib",
"specs": [
[
"==",
"0.2.8"
]
]
},
{
"name": "setuptools-scm",
"specs": [
[
"==",
"8.0.4"
]
]
},
{
"name": "six",
"specs": [
[
"==",
"1.16.0"
]
]
},
{
"name": "snowballstemmer",
"specs": [
[
"==",
"2.2.0"
]
]
},
{
"name": "sphinx",
"specs": [
[
"==",
"7.1.2"
]
]
},
{
"name": "sphinxcontrib-applehelp",
"specs": [
[
"==",
"1.0.4"
]
]
},
{
"name": "sphinxcontrib-devhelp",
"specs": [
[
"==",
"1.0.2"
]
]
},
{
"name": "sphinxcontrib-htmlhelp",
"specs": [
[
"==",
"2.0.1"
]
]
},
{
"name": "sphinxcontrib-jsmath",
"specs": [
[
"==",
"1.0.1"
]
]
},
{
"name": "sphinxcontrib-qthelp",
"specs": [
[
"==",
"1.0.3"
]
]
},
{
"name": "sphinxcontrib-serializinghtml",
"specs": [
[
"==",
"1.1.5"
]
]
},
{
"name": "strictyaml",
"specs": [
[
"==",
"1.7.3"
]
]
},
{
"name": "tomli",
"specs": [
[
"==",
"2.0.1"
]
]
},
{
"name": "translationstring",
"specs": [
[
"==",
"1.4"
]
]
},
{
"name": "twitter-common-contextutil",
"specs": [
[
"==",
"0.3.11"
]
]
},
{
"name": "twitter-common-dirutil",
"specs": [
[
"==",
"0.3.11"
]
]
},
{
"name": "twitter-common-lang",
"specs": [
[
"==",
"0.3.11"
]
]
},
{
"name": "typing-extensions",
"specs": [
[
"==",
"4.8.0"
]
]
},
{
"name": "urllib3",
"specs": [
[
"==",
"2.0.6"
]
]
},
{
"name": "venusian",
"specs": [
[
"==",
"3.0.0"
]
]
},
{
"name": "waitress",
"specs": [
[
"==",
"2.1.2"
]
]
},
{
"name": "webob",
"specs": [
[
"==",
"1.8.7"
]
]
},
{
"name": "yarl",
"specs": [
[
"==",
"1.9.2"
]
]
},
{
"name": "zipp",
"specs": [
[
"==",
"3.17.0"
]
]
},
{
"name": "zope-deprecation",
"specs": [
[
"==",
"5.0"
]
]
},
{
"name": "zope-interface",
"specs": [
[
"==",
"6.0"
]
]
}
],
"lcname": "devpi-plumber"
}