Little Helpers

Es gibt eine Menge von Tools die in Python geschrieben sind, um das Leben beim Programmieren oder generell einfacher zu machen.

Auf einem frischen System läuft bei mir erst mal das hier:

pip3 install -U \
    bpython \
    black \
    isort \
    pyflakes \
    pylint \
    pyyaml \
    restview \
    sphinx \
    watchdog

Und dann hab ich noch ein paar Aliasse, die recht praktisch sind:

.pyc und __pycache__ entfernen:

pyc() {
    find . \
        -name '*.pyc' -delete -print -o \
        -name '__pycache__' -delete -print
}

urlencode, urldecode:

urlencode() { python3 -c "from sys import argv; from urllib import parse; print(parse.quote_plus(argv[1]))" "$1"; }
urldecode() { python3 -c "from sys import argv; from urllib import parse; print(parse.unquote_plus(argv[1]))" "$1"; }

Der bekannte SimpleHTTPServer:

serve_http() { python3 -m http.server; }

Sendmail emulieren:

serve_smtp() { python3 -m smtpd -n -c DebuggingServer "localhost:${1-"2525"}"; }

Wo liegen die installierten Module?:

alias python3_libdir='python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib());"'

bpython

Interaktiver Python Interpreter, mit:

  • Syntax Highlighting!

  • Autocomplete!

  • Auto Indentation!

  • Rollback!

  • Buzzwords!

Ist sehr hilfreich!

isort

Sortiert automatisch die import-Statements. Wandert rekursiv durchs Package… Es ist sehr gut!

Ich habe ein Alias, das sich mit black versteht:

cisort () {
    isort \
        --combine-star \
        --force-sort-within-sections \
        --line-width="79" \
        --multi-line "VERTICAL_HANGING_INDENT" \
        --trailing-comma \
        --force-grid-wrap 0 \
        --use-parentheses \
        --ensure-newline-before-comments \
            "$@"
}

black

Formatiert den Quellcode so dass es eindeutig und lesbar bleibt.

Ich habe ein Alias:

cblack() {
    black \
        --skip-string-normalization \
        --line-length 79 \
            "$@"
}

pyflakes & pylint

Code checken lassen und aufräumen solange bis pylint nicht mehr meckert führt zu besserem Code!

Mein Shell-Alias dazu:

stackenblochen() {
    local msg="{C} {path}:{line}:{column} - {msg}︎
 ↪︎  {category} {module}.{obj} ({symbol} {msg_id})"
    pylint \
        --disable "C0111" \
        --msg-template="$msg" \
        --output-format="colorized" \
        "$@"
}

Je nach komplexität des Quellcodes muss man noch ein paar –disable Codes mit angeben:

  • C0111: Missing %s docstring

  • RP0001: Messages by category

  • RP0002: % errors / warnings by module

  • RP0003: Messages

  • RP0101: Statistics by type

  • RP0401: External dependencies

  • RP0402: Modules dependencies graph

  • RP0701: Raw metrics

  • RP0801: Duplication

restview

Rendert reStructuredText-Files, und zeigt diese im Browser an.

Öffnet sogar den Browser und aktualisiert selbstständig.

sphinx

Ist dazu da um Python-Quellcode mit reStructuredText zu dokumentieren. Rendert statisches html.

Kann man aber auch nur mit Text befüllen, wie auf dieser Seite geschehen: Sphinx - Deployment via Git-Hook

Zieht als Abhänigkeit noch Pygments mit rein, so erhält man den netten Shell-Befehl pygmentize. Dieser macht Syntax-Highlighting auf jeglichen Text. In der Console. Fuck Yeah!

watchdog

Der kleine Dackel steckt seine Nase zwischen alle Files auf die man ihn los lässt, und bellt bei Änderungen…

Beispiel:

Bei Änderungen an den reStructuredText (.rst)-Files im Ordner ./docs, ruft Waldi make docs auf:

watchmedo shell-command ./docs \
    --recursive \
    --ignore-directories \
    --drop \
    --patterns="*.rst" \
    --command="make docs"

Siehe auch: Sphinx - Build on Change