# Python bindings for Silver-Platter
Silver-Platter makes it possible to contribute automatable changes to source
code in a version control system
([codemods](https://github.com/jelmer/awesome-codemods)).
It automatically creates a local checkout of a remote repository,
makes user-specified changes, publishes those changes on the remote hosting
site and then creates a pull request.
In addition to that, it can also perform basic maintenance on branches
that have been proposed for merging - such as restarting them if they
have conflicts due to upstream changes.
This package contains Python bindings for silver platter.
## Usage
The core class is the ``Workspace`` context manager, which exists in two forms:
* ``silver_platter.workspace.Workspace`` (for generic projects)
* ``silver_platter.debian.Workspace`` (for Debian packages)
An example, adding a new entry to a changelog file in the ``dulwich`` Debian
package and creating a merge proposal with that change:
```python
from silver_platter.debian import Workspace
import subprocess
with Workspace.from_apt_package(package="dulwich") as ws:
subprocess.check_call(['dch', 'some change'], cwd=ws.path)
ws.commit() # Behaves like debcommit
ws.publish(mode='propose')
```
Raw data
{
"_id": null,
"home_page": null,
"name": "silver-platter",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "git bzr vcs github gitlab launchpad",
"author": null,
"author_email": "Jelmer Vernooij <jelmer@jelmer.uk>",
"download_url": "https://files.pythonhosted.org/packages/d7/05/130a76a0f816efc8160000dbf97cd2f349c7b09b4e71c8770856037b553c/silver_platter-0.5.48.tar.gz",
"platform": null,
"description": "# Python bindings for Silver-Platter\n\nSilver-Platter makes it possible to contribute automatable changes to source\ncode in a version control system\n([codemods](https://github.com/jelmer/awesome-codemods)).\n\nIt automatically creates a local checkout of a remote repository,\nmakes user-specified changes, publishes those changes on the remote hosting\nsite and then creates a pull request.\n\nIn addition to that, it can also perform basic maintenance on branches\nthat have been proposed for merging - such as restarting them if they\nhave conflicts due to upstream changes.\n\nThis package contains Python bindings for silver platter.\n\n## Usage\n\nThe core class is the ``Workspace`` context manager, which exists in two forms:\n\n* ``silver_platter.workspace.Workspace`` (for generic projects)\n* ``silver_platter.debian.Workspace`` (for Debian packages)\n\nAn example, adding a new entry to a changelog file in the ``dulwich`` Debian\npackage and creating a merge proposal with that change:\n\n```python\n\nfrom silver_platter.debian import Workspace\nimport subprocess\n\nwith Workspace.from_apt_package(package=\"dulwich\") as ws:\n subprocess.check_call(['dch', 'some change'], cwd=ws.path)\n ws.commit() # Behaves like debcommit\n ws.publish(mode='propose')\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Large scale VCS change management",
"version": "0.5.48",
"project_urls": {
"Bug Tracker": "https://github.com/jelmer/silver-platter/issues",
"GitHub": "https://github.com/jelmer/silver-platter",
"Homepage": "https://jelmer.uk/code/silver-platter",
"Repository": "https://github.com/jelmer/silver-platter"
},
"split_keywords": [
"git",
"bzr",
"vcs",
"github",
"gitlab",
"launchpad"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e8b70349fe289fc608055dd3dcb258e830dfd5e313eea2a960c4050642bbe882",
"md5": "b373a11537f0e4a1c55a4295549d9cbd",
"sha256": "257d734de3df97f2ccc4c2ae6fe971a4047d8ee8b942f258e4e1552e6cd39884"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp310-cp310-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "b373a11537f0e4a1c55a4295549d9cbd",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 2599405,
"upload_time": "2025-08-01T18:49:44",
"upload_time_iso_8601": "2025-08-01T18:49:44.226043Z",
"url": "https://files.pythonhosted.org/packages/e8/b7/0349fe289fc608055dd3dcb258e830dfd5e313eea2a960c4050642bbe882/silver_platter-0.5.48-cp310-cp310-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "736f93db7440e2a31632cd999013314e561c960a9af6140fe129cf554d4c07cf",
"md5": "1139e6e5eb784239aa97a6ee746f1e6b",
"sha256": "a61c93ec3b6b0b8c6c0e1dddd2c376e2d6a5c00c10657354f961925d85abfecf"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp310-cp310-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "1139e6e5eb784239aa97a6ee746f1e6b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 4969660,
"upload_time": "2025-08-01T18:49:46",
"upload_time_iso_8601": "2025-08-01T18:49:46.983116Z",
"url": "https://files.pythonhosted.org/packages/73/6f/93db7440e2a31632cd999013314e561c960a9af6140fe129cf554d4c07cf/silver_platter-0.5.48-cp310-cp310-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5fcad4b92a0997f010b549b5c643905efa79c54be7203ffc3caeef49e42be320",
"md5": "7f87aebcd0828895306d5409131767f2",
"sha256": "5c3526abf5de9be27065a173f8a2f49b53410841672d1504d8a6195cdb488059"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp311-cp311-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "7f87aebcd0828895306d5409131767f2",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 2598669,
"upload_time": "2025-08-01T18:49:49",
"upload_time_iso_8601": "2025-08-01T18:49:49.167347Z",
"url": "https://files.pythonhosted.org/packages/5f/ca/d4b92a0997f010b549b5c643905efa79c54be7203ffc3caeef49e42be320/silver_platter-0.5.48-cp311-cp311-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "858a2e02677530b0dbf165f79c517f40bb3480caab4be2533d4c8a5c3d694245",
"md5": "7b72cad73fdd2790d431be9f5067a999",
"sha256": "b955839923f0f937db5b7cdf148b2ccab8a7d87467859e3c07a7589aa6093189"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp311-cp311-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "7b72cad73fdd2790d431be9f5067a999",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 4970391,
"upload_time": "2025-08-01T18:49:50",
"upload_time_iso_8601": "2025-08-01T18:49:50.969590Z",
"url": "https://files.pythonhosted.org/packages/85/8a/2e02677530b0dbf165f79c517f40bb3480caab4be2533d4c8a5c3d694245/silver_platter-0.5.48-cp311-cp311-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "b26a54b615b0d7b08b67a1c67a86159e854c56fb9f23f8ad9bdef678343c755c",
"md5": "2b8fb724337cbfa9fe036f997fc1b389",
"sha256": "529eed96bb8620a0ba8012ae4d74507ca2c103e678069d194ac0c42506a13c8d"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp312-cp312-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "2b8fb724337cbfa9fe036f997fc1b389",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 2562170,
"upload_time": "2025-08-01T18:49:52",
"upload_time_iso_8601": "2025-08-01T18:49:52.699599Z",
"url": "https://files.pythonhosted.org/packages/b2/6a/54b615b0d7b08b67a1c67a86159e854c56fb9f23f8ad9bdef678343c755c/silver_platter-0.5.48-cp312-cp312-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "7a1382c7afd7ffc93495da3148f92f974dffe1b02723d84aa7b4458ef8dfac05",
"md5": "a4f0368e4c908ce21407ecacc961256b",
"sha256": "171a4f3c3460ba1aaca154d69a183c40be2684ecbd5a6126fedd09bc2688d3a7"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp312-cp312-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "a4f0368e4c908ce21407ecacc961256b",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.9",
"size": 4975973,
"upload_time": "2025-08-01T18:49:54",
"upload_time_iso_8601": "2025-08-01T18:49:54.897914Z",
"url": "https://files.pythonhosted.org/packages/7a/13/82c7afd7ffc93495da3148f92f974dffe1b02723d84aa7b4458ef8dfac05/silver_platter-0.5.48-cp312-cp312-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d4ede46d0ebd30e73ce2bb1b3e27f326be5ba38429916aac5198b719be9a3b06",
"md5": "313f7ca73d79a0ad7559e96b9ee0367b",
"sha256": "ec40ef6bb4f82af80b2892f0e3bef7bd21cd3871fa75c5e8963a56718bb7be9f"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp313-cp313-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "313f7ca73d79a0ad7559e96b9ee0367b",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 2561796,
"upload_time": "2025-08-01T18:49:56",
"upload_time_iso_8601": "2025-08-01T18:49:56.788622Z",
"url": "https://files.pythonhosted.org/packages/d4/ed/e46d0ebd30e73ce2bb1b3e27f326be5ba38429916aac5198b719be9a3b06/silver_platter-0.5.48-cp313-cp313-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f93063061903ce70fb8ab9e8dfc3bdc337a7ef89b5df6b8838667fbf3ff89cdd",
"md5": "e9e1217df583257b23c58347bb0ca625",
"sha256": "f23d1764326afc94b8482041f459bfde8e924e4f9d80cfcfef01b416b1967921"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp313-cp313-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "e9e1217df583257b23c58347bb0ca625",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.9",
"size": 4975351,
"upload_time": "2025-08-01T18:49:58",
"upload_time_iso_8601": "2025-08-01T18:49:58.880472Z",
"url": "https://files.pythonhosted.org/packages/f9/30/63061903ce70fb8ab9e8dfc3bdc337a7ef89b5df6b8838667fbf3ff89cdd/silver_platter-0.5.48-cp313-cp313-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a10861d06448c898c37ef74cf18f3174f796ba7f9b70fc1e95c12e0e06771e01",
"md5": "5604a0ba486d3396dd95dd38a75a2ec3",
"sha256": "6524f5ecb81f72376424ea8f110c3178cae166ffd124def7dad6bf5b6e71e26e"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp314-cp314-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "5604a0ba486d3396dd95dd38a75a2ec3",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 2589051,
"upload_time": "2025-08-01T18:50:00",
"upload_time_iso_8601": "2025-08-01T18:50:00.974421Z",
"url": "https://files.pythonhosted.org/packages/a1/08/61d06448c898c37ef74cf18f3174f796ba7f9b70fc1e95c12e0e06771e01/silver_platter-0.5.48-cp314-cp314-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5061d38790e8578862b34fe87730ddfdb933e75667b849183c5aa356afcaaed0",
"md5": "4c04750891cd20954353e8d1be4f9af4",
"sha256": "08f685a1cdc461ac4ef7ce23ed09f5aaa8d222fa43bd4f7f3b7b482161066d3f"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp314-cp314-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "4c04750891cd20954353e8d1be4f9af4",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 4975140,
"upload_time": "2025-08-01T18:50:03",
"upload_time_iso_8601": "2025-08-01T18:50:03.134004Z",
"url": "https://files.pythonhosted.org/packages/50/61/d38790e8578862b34fe87730ddfdb933e75667b849183c5aa356afcaaed0/silver_platter-0.5.48-cp314-cp314-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f52ac00cbae6e4038d0eaef21c871a73ff62524949b2799203b6e8f95ce0fa32",
"md5": "f5626cfc539fbe7b59fe7bb8cf87572a",
"sha256": "b9a15ed5843bcd5305baa7b4948df438a2947a74b70f443a873eaa4b28c250fc"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp314-cp314t-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "f5626cfc539fbe7b59fe7bb8cf87572a",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 2583209,
"upload_time": "2025-08-01T18:50:05",
"upload_time_iso_8601": "2025-08-01T18:50:05.188846Z",
"url": "https://files.pythonhosted.org/packages/f5/2a/c00cbae6e4038d0eaef21c871a73ff62524949b2799203b6e8f95ce0fa32/silver_platter-0.5.48-cp314-cp314t-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "916b0d482827f2f418a47945b729a87e20f2ec057845306708f3021e87f052b3",
"md5": "0e4bd3a98184b7628cbf08917f0853b7",
"sha256": "a92449750be8c45e6e8ed39161ca8dcb8fcfb7c6c1efdb4c1d3c68e22448c5aa"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp314-cp314t-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "0e4bd3a98184b7628cbf08917f0853b7",
"packagetype": "bdist_wheel",
"python_version": "cp314",
"requires_python": ">=3.9",
"size": 4971371,
"upload_time": "2025-08-01T18:50:07",
"upload_time_iso_8601": "2025-08-01T18:50:07.018595Z",
"url": "https://files.pythonhosted.org/packages/91/6b/0d482827f2f418a47945b729a87e20f2ec057845306708f3021e87f052b3/silver_platter-0.5.48-cp314-cp314t-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "41fe31f329b4cfe1c38f2400374e675cc12bd7cfdf75aadc5938cb498f2db408",
"md5": "5573a68e2df7b71ace000a2c3865d85b",
"sha256": "ef829863d9ad60801143dd2221554bb0c33bb212f121c975b472d11d10d081c2"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp39-cp39-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "5573a68e2df7b71ace000a2c3865d85b",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 2600578,
"upload_time": "2025-08-01T18:50:08",
"upload_time_iso_8601": "2025-08-01T18:50:08.744007Z",
"url": "https://files.pythonhosted.org/packages/41/fe/31f329b4cfe1c38f2400374e675cc12bd7cfdf75aadc5938cb498f2db408/silver_platter-0.5.48-cp39-cp39-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "53cb636aa974f21c8f7f826c5c94ac97ded08d41f243621bf624d898eb22d668",
"md5": "718ef84631fa33701b4dae7dde2392cb",
"sha256": "7f043de982a2886d36741c32353c5a053ce2779b1e45c9e826689aff95d12c2a"
},
"downloads": -1,
"filename": "silver_platter-0.5.48-cp39-cp39-manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "718ef84631fa33701b4dae7dde2392cb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 4971487,
"upload_time": "2025-08-01T18:50:10",
"upload_time_iso_8601": "2025-08-01T18:50:10.396127Z",
"url": "https://files.pythonhosted.org/packages/53/cb/636aa974f21c8f7f826c5c94ac97ded08d41f243621bf624d898eb22d668/silver_platter-0.5.48-cp39-cp39-manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d705130a76a0f816efc8160000dbf97cd2f349c7b09b4e71c8770856037b553c",
"md5": "c1c5b93125fee555c55440b18f28d159",
"sha256": "94d8d2b152376a3605b615a3dc0060507de5c2e7830796ad1e975ec56e221441"
},
"downloads": -1,
"filename": "silver_platter-0.5.48.tar.gz",
"has_sig": false,
"md5_digest": "c1c5b93125fee555c55440b18f28d159",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 15352,
"upload_time": "2025-08-01T18:50:11",
"upload_time_iso_8601": "2025-08-01T18:50:11.793646Z",
"url": "https://files.pythonhosted.org/packages/d7/05/130a76a0f816efc8160000dbf97cd2f349c7b09b4e71c8770856037b553c/silver_platter-0.5.48.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-01 18:50:11",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "jelmer",
"github_project": "silver-platter",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "silver-platter"
}