Skip to main content

CLI to automate the development workflow.

Project description

logo

License PyPI GitHub Code Style CI Coverage

pytoil is a small, helpful CLI to help developers manage their local and remote projects with ease!

What is it?

pytoil is a handy tool that helps you stay on top of all your projects, remote or local. It's primarily aimed at python developers but you could easily use it to manage any project!

pytoil is:

  • Easy to use โœ…
  • Easy to configure โœ…
  • Safe (it won't edit your repos at all) โœ…
  • Snappy (it's asynchronous from the ground up and as much as possible is done concurrently, clone all your repos in seconds!) ๐Ÿ’จ
  • Useful! (I hope ๐Ÿ˜ƒ)

Say goodbye to janky bash scripts ๐Ÿ‘‹๐Ÿป

Background

Like many developers I suspect, I quickly became bored of typing repeated commands to manage my projects, create virtual environments, install packages, fire off cURL snippets to check if I had a certain repo etc.

So I wrote some shell functions to do some of this for me...

And these shell functions grew and grew and grew.

Until one day I saw that the file I kept these functions in was over 1000 lines of bash (a lot of printf's so it wasn't all logic but still). And 1000 lines of bash is waaaay too much!

And because I'd basically hacked it all together, it was very fragile. If a part of a function failed, it would just carry on and wreak havoc! I'd have to do rm -rf all_my_projects... I mean careful forensic investigation to fix it.

So I decided to make a robust CLI with the proper error handling and testability of python, and here it is! ๐ŸŽ‰

Installation

As pytoil is a CLI program, I'd recommend installing with pipx.

$ pipx install pytoil
---> 100%
Successfully installed pytoil

You can always fall back to pip

$ python3 -m pip install pytoil
---> 100%
Successfully installed pytoil

pytoil will install everything it needs in python to work. However, it's full feature set can only be accessed if you have the following external dependencies:

  • git
  • conda (if you work with conda environments)
  • VSCode (if you want to use pytoil to automatically open your projects for you)
  • poetry (if you want to create poetry environments)
  • flit (if you want to create flit environments)

Quickstart

pytoil is super easy to get started with.

After installation, the first time you run it it will make you a config file.

$ pytoil

No config file yet!
Making you a default one...

This will create a default config file which can be found at ~/.pytoil.toml.

Don't worry though, there's only a few options to configure! :sleeping:

After you've set your config, you're good to go! You can do things like:

See your local and remote projects

$ pytoil show local
Local Projects

Showing 3 out of 3 local projects

  Name              Created          Modified
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  project 1         13 days ago      9 days ago
  project 2         a day ago        a minute ago
  project 3         a month ago      a month ago

See which ones you have on GitHub, but not on your computer

$ pytoil show diff
Diff: Remote - Local

Showing 3 out of 3 projects

  Name             Size       Created                Modified
 โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
  remote 1         154.6 kB   a month ago            29 days ago
  remote 2         2.1 MB     1 year, 15 days ago    11 months ago
  remote 3         753.7 kB   1 year, 6 months ago   a month ago

Easily grab a project, regardless of where it is

$ pytoil checkout myproject

// Will now either open that project if local
// or clone it, then open it if not

Create a new project and virtual environment in one go

$ pytoil new myproject --venv venv

Creating project: 'myproject' at '/Users/you/projects/myproject'

Creating virtual environment for: 'myproject'

And even do this from a cookiecutter template

$ pytoil new myproject --venv venv --cookie https://github.com/some/cookie.git

Creating project: 'myproject' with cookiecutter template: 'https://github.com/some/cookie.git'

// You'll then be asked all the cookiecutter questions defined in the template
// After which pytoil will take over and create the virtual environment as normal

And loads more!

Help

Like all good CLI programs, pytoil (as well as all it's subcommands, and all their subcommands!) has a --help option to show you what to do.

$ pytoil --help

Usage: pytoil [OPTIONS] COMMAND [ARGS]...

  Helpful CLI to automate the development workflow.

  - Create and manage your local and remote projects

  - Build projects from cookiecutter templates.

  - Easily create/manage virtual environments.

  - Minimal configuration required.

Options:
  --version  Show the version and exit.
  --help     Show this message and exit.

Commands:
  checkout  Checkout an existing development project.
  config    Interact with pytoil's configuration.
  docs      Open pytoil's documentation in your browser.
  find      Quickly locate a project.
  gh        Open one of your projects on GitHub.
  info      Get useful info for a project.
  new       Create a new development project.
  pull      Pull down your remote projects.
  remove    Remove projects from your local filesystem.
  show      View your local/remote projects.

pytoil's CLI is designed such that if you don't specify any arguments, it won't do anything! just show you the --help. This is called being a 'well behaved' unix command line tool.

This is true for any subcommand of pytoil so you won't accidentally break anything if you don't specify arguments ๐ŸŽ‰

And if you get truly stuck, you can quickly open pytoil's documentation with:

$ pytoil docs

Opening pytoil's documentation in your browser...

# Now you'll be on this page in whatever your default browser is!

Check out the docs for more ๐Ÿ’ฅ

Contributing

pytoil is an open source project and, as such, welcomes contributions of all kinds ๐Ÿ˜ƒ

Your best bet is to check out the contributing guide in the docs!

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytoil-0.22.0.tar.gz (39.6 kB view details)

Uploaded Source

Built Distribution

pytoil-0.22.0-py3-none-any.whl (54.2 kB view details)

Uploaded Python 3

File details

Details for the file pytoil-0.22.0.tar.gz.

File metadata

  • Download URL: pytoil-0.22.0.tar.gz
  • Upload date:
  • Size: 39.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for pytoil-0.22.0.tar.gz
Algorithm Hash digest
SHA256 61bb0d50fda9d2e45492be5defebb10ed4d10b23e806e8bdd58617483e19594c
MD5 139561d9ac4c034df098213fd08f849b
BLAKE2b-256 5ca4bf13e839f9b9bd6844f31c0a3ba9adf5f2a8b18e1edd4a91131f6c369dd0

See more details on using hashes here.

File details

Details for the file pytoil-0.22.0-py3-none-any.whl.

File metadata

  • Download URL: pytoil-0.22.0-py3-none-any.whl
  • Upload date:
  • Size: 54.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.1 importlib_metadata/4.10.1 pkginfo/1.8.2 requests/2.27.1 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.10

File hashes

Hashes for pytoil-0.22.0-py3-none-any.whl
Algorithm Hash digest
SHA256 377e900271b56183acfded2e1693f31f44320aa91c25b01a0fa6139840e001e7
MD5 5fd3088689a411d5bd3a58ae3b435131
BLAKE2b-256 c28a8f6ef84555f13b2bff61096edfa06c9ca99bb0696d798adedaa68883a6ed

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page