{"id":15450453,"url":"https://github.com/prokopto-dev/fabric-plus","last_synced_at":"2025-04-19T23:10:01.831Z","repository":{"id":240096603,"uuid":"801664791","full_name":"prokopto-dev/fabric-plus","owner":"prokopto-dev","description":"Enhanced, drop-in Fabric Connection-object wrapper with features not yet implemented in the base.","archived":false,"fork":false,"pushed_at":"2024-06-20T17:07:55.000Z","size":1614,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-19T23:09:53.027Z","etag":null,"topics":["bastion","fabric","filetransfer","jumphost","paramiko","python","python3","scp","ssh"],"latest_commit_sha":null,"homepage":"https://fabricplus.prokopto.dev/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prokopto-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.html","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-16T17:12:00.000Z","updated_at":"2024-06-20T17:07:59.000Z","dependencies_parsed_at":"2024-05-28T18:15:17.406Z","dependency_job_id":"b2f6fd3e-5759-48a8-97c9-6d1234e66061","html_url":"https://github.com/prokopto-dev/fabric-plus","commit_stats":null,"previous_names":["prokopto-dev/fabric-scp","prokopto-dev/fabric-plus"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prokopto-dev%2Ffabric-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prokopto-dev%2Ffabric-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prokopto-dev%2Ffabric-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prokopto-dev%2Ffabric-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prokopto-dev","download_url":"https://codeload.github.com/prokopto-dev/fabric-plus/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249826722,"owners_count":21330676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bastion","fabric","filetransfer","jumphost","paramiko","python","python3","scp","ssh"],"created_at":"2024-10-01T21:05:27.847Z","updated_at":"2025-04-19T23:10:01.815Z","avatar_url":"https://github.com/prokopto-dev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![PyPI - Version](https://img.shields.io/pypi/v/fabricplus)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fabricplus)\n![PyPI - License](https://img.shields.io/pypi/l/fabricplus)\n![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/prokopto-dev/fabric-plus/testing.yml?logo=github\u0026label=testing)\n\n# FabricPlus\n\nA drop-in expansion of features in the Fabric library.\n\nAs of version `0.1.0`, those include:\n\n- Jumphost connectivity support\n  - `jump_run` command to run commands from the intermediate jumphost\n- SCP Transfer support (including via a jumphost)\n- `su` command support\n\nSee the API documentation on the [FabricPlus Website](https://fabricplus.prokopto.dev/) for more information, as well as \"Getting Started\" guide.\n\nSee [`fabric`](https://github.com/fabric/fabric) for more details on the base `fabric` library, if interested in the underlying behaviors. Some have been changed: see Important Changes and the documentation for more information.\n\n## Note On Changelogs\n\n### v1.0.1\n\n- Bugfix: `su` command had an invalid argument when processing subcommands. Fixed.\n\n## Installation\n\n### pip (via PyPI)\n\nAs of version `0.1.0`, FabricPlus is available via `pip` and is on the Python Package Index.\n\nTo install, simply install `fabricplus`.\n\n```bash\npip install fabricplus\n```\n\n### Building From Source\n\nYou can also build `fabricplus` from source, especially if you want features or updates released outside of a tagged release on `PyPI`.\n\nTo do so, you'll need `poetry`, and an environment with a version of Python greater than or equal to `3.8`.\n\n#### Step 1: Install Poetry\n\nTo install `poetry`, simply run:\n\n```bash\npip install poetry\n```\n\nFor more information on `poetry`, see the [Poetry Website](https://python-poetry.org/).\n\n#### Step 2: Clone Repo and Run `poetry build`\n\nOnce you have that installed, clone the repo, then run `poetry build` from the root directory:\n\n```bash\n# Clone\ngit clone https://github.com/prokopto-dev/fabric-plus\n# Move into fabric-plus\ncd fabric-plus\n# Run poetry build\npoetry build\n# install with pip the newly build wheel file (file name may vary)\npip install dist/fabricplus-0.1.0-py3-none-any.whl\n```\n\n## Quick-Start\n\nThe following is all the basic *new* features in one small block.\n\n```python3\n# importing as Connection\nfrom fabricplus.connection import ConnectionPlus as Connection\n\n# Creating a basic connection\nconn_1: Connection = Connection(\"host1.example.com\")\n\n# Creating a jumphost connection, and then a host connection via that jumphost\njumphost_1: Connection = Connection(\"jumphost.example.com\")\nconn_via_jh: Connection = Connection(\"host2.example.com\", jump_target=jumphost_1)\n\n# Creating a host that uses SCP for transfers by default\nconn_2: Connection = Connection(\"host3.example.com\", scp=True)\n\n# Running a get via SCP on the host1/conn_1, which doesn't use SCP by default\nconn_1.get(\"/path/to/some/remote/file\", scp=True)\n\n# Running a command as some other user via su\nconn_1.su(\"date\", user=\"someotheruser\", password=\"someuserspasswd\")\n```\n\nLicense Addendum\n----------------\n- [`scp.py`](https://github.com/jbardin/scp.py) is used by import under the LGPL v2.1 license, and this notice is in accordance with that license.\n- [`paramiko-jump`](https://github.com/andrewschenck/paramiko-jump) used under Apache License 2.0, see `fabricplus/paramiko_modifications/client.py` for license details.\n- [`fabric`](https://github.com/fabric/fabric) is used, and falls under a BSD-2-Clause license, which doesn't restrict its use as an imported library, but is noted here anyways.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprokopto-dev%2Ffabric-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprokopto-dev%2Ffabric-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprokopto-dev%2Ffabric-plus/lists"}