Helper to run Bash commands with python
Project description
Bulot
Helper to run Bash commands with python
Table of Contents
Installation
pip install bulot
Examples
Concept
from bulot import Shell
# Create a shell
sh = Shell()
sh | "ls" | print
# Create another shell independant from the first one
sh2 = Shell()
sh2.cd("..")
print(sh2.cwd())
# remove alias for ls
del sh2.aliases["ls"]
files = sh2 | "ls"
# without the alias, will print ls without color
print(files)
import json
from pprint import pprint
from bulot import Pipe
def jprint(data):
print(json.dumps(data, indent=4, default=repr))
data = sh << list(__builtins__.keys())[:10]
assert len(data.stdout) == 10
assert isinstance(data, Pipe)
data | print
data | pprint
data | jprint
Classes
import re
from bulot import xargs
from bulot.utils import stdout
from glob import glob
def extract_classes(stdin: str) -> list:
"""Returns classes' name"""
def extract_name(class_line):
return re.sub(r"class (\w+).*:", r"\1", class_line)
return [extract_name(line) for line in stdin.splitlines() if line.startswith("class")]
classes = sh << glob("bulot/*.py") | xargs - "cat {}" | "\n".join | extract_classes
assert "Shell" in classes.stdout
sh | "ls *.py" can't expand * because subprocess.run has shell=False then we must use glob
see https://docs.python.org/3/library/subprocess.html#security-considerations
Git
from bulot import Pipe, shell
from bulot.utils import stdout
class Git(Shell):
def __or__(self, cmd: RunPipeCmd) -> "Pipe":
if isinstance(cmd, str):
cmd = f"git {cmd}"
return super().__or__(cmd)
git = Git()
CREATE_BRANCH = False
BRANCH_NAME = "plop"
branch_init = git | "branch --show-current" | stdout
# Save current changes
nb_stash_before = git | "stash list" | str.splitlines | len | stdout
git | "stash"
nb_stash_after = git | "stash list" | str.splitlines | len | stdout
is_stashed = nb_stash_before != nb_stash_after
# Update main branch
if branch_init != "main":
git | "chechout main"
git | "pull"
# Create new branch
checkout = git | f"checkout -b {BRANCH_NAME}"
if checkout.return_code == 128:
git | f"checkout {BRANCH_NAME}"
# Modify
sh.fake = True
FILE = "bulot/__init__.py"
sh << "\nraise RuntimeError('Oups')" >> FILE
sh.fake = False
git.fake = True
git | f"add {FILE}"
git | "commit -m 'Add error'"
git.fake = False
# push changes
branch_exist_on_remote = git | f"ls-remote --exit-code --heads origin {BRANCH_NAME}"
git.fake = True
if branch_exist_on_remote.return_code == 2:
git | "push --set-upstream origin {BRANCH_NAME}"
else:
git | "push"
git.fake = False
# restore previous state
git | f"checkout {branch_init}"
if is_stashed:
git | "stash pop"
# Historic
git_commands = [command.value for command in git.historic]
assert "git branch --show-current" in git_commands
print(git_commands)
# to print all stdout
# print([command.stdout for command in git.historic])
assert git.historic[0].stdout == branch_init
assert any(command.fake for command in git.historic)
License
Bulot is distributed under the terms of the Apache-2.0 license.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bulot-0.0.1.tar.gz.
File metadata
- Download URL: bulot-0.0.1.tar.gz
- Upload date:
- Size: 13.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.23.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6dfc885b387a19f4c131e64a15cc7443fa81091084075ab55515a44f9c823f02
|
|
| MD5 |
33e10d9ef30307184a0a3117a687e1d5
|
|
| BLAKE2b-256 |
3c9c799aadb52eee5804b4e9e55b4d887b8b04f3ec138772d006e78c0a948e2e
|
File details
Details for the file bulot-0.0.1-py3-none-any.whl.
File metadata
- Download URL: bulot-0.0.1-py3-none-any.whl
- Upload date:
- Size: 13.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.23.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4d6360eed9eaa0222a5ec5feaaeac674c5f774a676c67396895e4e80e614ca6
|
|
| MD5 |
c19773ddd7b7884c837d49a6c4a1af57
|
|
| BLAKE2b-256 |
f019f799ed2058d73a6160dc3d08606c086afabf972caea72f49874ab858ba03
|