Skip to main content

Turns a Github repo into a pastebin.

Project description

tests black PyPI version PyPI - Downloads

shbin turns a Github repo into a pastebin.

It's a tiny command-line tool we've built at Shiphero that lets you easily upload code snippets, notebooks, images, or any other file to a Github repository that acts as your internal pastebin, and returns the URL to share it with your team. If possible, this URL is automatically copied to the clipboard.

Why?

You want to share code snippets, images, notebooks, etc. with your team, probably privately. Gist is great, but it has some limitations:

  • The content may be secret but it is not private: if you have the url you have the access (and to err is human).
  • The ownership of the shared content is in the user's namespace, not the organization's. What happens if the user leaves the organization?
  • You can't find some secret content shared by a teammate if the URL is lost. Only the person who created it can find it, and even that isn't easy if the content doesn't have a good name and description.
  • Content organization is difficult: you can upload multiple files to a gist, but you can't create folders.
  • The default gist interface does not allow you to "paste" an image (you can paste it as part of a comment, but not as part of the gist content itself). Sharing screenshots is a common use case on computers.

Using a full repository has all the advantages of Gist (rich content rendering like markdown or ipynb, every change is a git commit, etc.) without these limitations.

The only downside of a plain repository is that it is not as easy as "paste" the content, even when editing through the Github interface. But shbin solves that.

Usage

# upload or update a file
$ shbin demo.py

# upload with a commit description
$ shbin demo.py -m "my cool demo script"         

# Upload any content in clipboard, discovering its format. e.g.
# a screenshot. The name will be random but the extension will be
# based on the format detected.
$ shbin -x          

# upload the content in the clipboard with a given filename
$ shbin -x -f my_snippet.md 

# upload from stdin
$ echo "some content" | shbin -

# download a given file (inside the namespace)
$ shbin dl my_snippet.md     

# update the content of a file that already exists
$ shbin my_snippet.md

# from clipboard with a given name to a directory in your user directory
$ shbin -x -f the_coolest_thing.py -d coolest_things/python

# upload several files in a directory
$ shbin *.ipynb *.csv -d notebooks/project -m "my new work"   

# Reformat the URL to link to Github pages.
$ shbin demo.py -p

$ shbin -h   # show full options

How it works

It uses Github API to create or update files in the given repo. So there is no need to have the target repository fully cloned locally.

Install

The recommended way is to use pipx

pipx install shbin 

Alternatively, install directly with pip.

pip install --user shbin

To install the latest development version from the repository:

pip install --user https://github.com/Shiphero/shbin/archive/refs/heads/main.zip

OSX

shbin depends on python-magic. This can be installed as follows.

  • When using Homebrew:
brew install libmagic
  • When using macports:
port install file

Setup

Create a new fine-grained personal token on Github restricted to your "pastebin" repository (under your user or your organization's ownership), with read and write permissions on "Contents".

image

  • Then set the environment variables in your preferred place:

    export SHBIN_GITHUB_TOKEN="<your personal token>"
    export SHBIN_REPO="<user_or_org>/<repo>"   # example "Shiphero/pastebin"   
    
  • By default shbin assigns a top-level folder to separate the content uploaded by each user. This can be changed using the SHBIN_NAMESPACE environment variable or the --namespace argument from the command line. For example:

    • export SHBIN_NAMESPACE="" # no namespace
    • export SHBIN_NAMESPACE="pastebin_folder" # the full pastebin is inside pastebin_folder/"
    • export SHBIN_NAMESPACE="pastebin_folder/{user}" # mix of both: each user has its own subfolder inside pastebin_folder/
  • [optional] To interact with the clipboard, we use the library pyclip. This may require some additional system dependencies depending your operating system. See these notes.

    If you want to disable the automatic copying of the URL to the clipboard you can set the environment variable SHBIN_COPY_URL=false (or "0" or "no").

    This is useful in some Linux distributions that use Wayland as the call via wl-copy that pyclip uses in such environment can be slow.

Nice video courtesy of tuterm, asciinema and svg-term-cli

PRs are welcome!

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

shbin-0.3.0.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

shbin-0.3.0-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file shbin-0.3.0.tar.gz.

File metadata

  • Download URL: shbin-0.3.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for shbin-0.3.0.tar.gz
Algorithm Hash digest
SHA256 4d8fb804e4e30c68e5569aeafe6661a70674a0861cde7296bc26ed05b88bc3e0
MD5 6e7a5b258d4e48795dbaf2be8b85cf20
BLAKE2b-256 c7f680411913bc948f27782d7edf95be00ac13c46f47b4788bee2287983670cd

See more details on using hashes here.

File details

Details for the file shbin-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: shbin-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.1 CPython/3.11.3

File hashes

Hashes for shbin-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 64dd0d43148226de278d42ed5fa1b14007587930a96dbe60d6f226a84ef17669
MD5 4c58b3625b99d0ad9a9cb9104ae37563
BLAKE2b-256 7267ee976327b90329e64b098e34ae7fafa763a020c113eb023c531b12048eee

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