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 \
    isort \
    pipreqs \
    pyflakes pylint \
    pyyaml \
    restview \
    Sphinx alabaster \
    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 SimpleHTTPServer; }

Sendmail emulieren:

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

Wo kommen die Module her?

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. Kann auch rekursiv durchs Package wandern, und lässt die Finger von den __init__.py Files..

Es ist sehr gut!

Auch wenn bei mir die Editor-Integration mit Sublime nie funktioniert hat, und ich wohl irgendwas mit der ~/.isort.cfg falsch mache, so dass die nie gelesen wird...

Ich habe ein Alias:

cisort () {
    isort -cs -fss -m=5 -y "$*"
}

pipreqs

Findet anhand der import-Statements alle Abhänigkeiten, und erstellt ein requirements.txt-File.

pyflakes & pylint

Code Checker, als Abhänigkeiten für das flake8 SublimeLinter Plugin.

Code 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.

Macht sogar das Browser-Fenster für einen auf, und aktualisiert die Anzeige bei Änderungen.

Sehr hilfreich beim editieren von readmes.

Sphinx & alabaster

Ist dazu da um Python-Quellcode mit reStructuredText zu dokumentieren. Rendert statisches html, alabaster ist ein Theme dazu.

Kann man aber auch nur mit Text befüllen, wie auf dieser hier 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...

Postfaktisch-fiktives 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