Start Umbau

Anleitung zum Umbau und Aktualisierung eines Python-Projektes.

Ausgangspunkt ist ein Programm zur Auswertung von Logdateien, welches nicht mehr auf den neuesten Stand ist. Es ist für die Python-Version 2.7 geschrieben, inzwischen ist die Hauptversion 3.x erreicht, was der aktuelle Standard ist. Dieses Problem haben viele Python-Projekte und es ist eine gute Übung, durch den Umbau die Änderungen im Vergleich von Alt zu Neu kennenzulernen.

Das Original findet sich unter folgender Adresse:

https://pypi.org/project/alstat/

Die Überarbeitung von Quellcode nennt sich auch: Refaktorierung.

Projekt anlegen

Wie üblich, wird in einer isolierten virutellen Umgebung begonnen:

python -m venv logstatistik
cd logstatistik
source ./bin/activate

Download

  • Download mit Git
git clone https://github.com/Lispython/alstat.git
  • Alternativ: download als tar.gz von hier

    Download: alstat-0.0.7.tar.gz

Developer-Mode

Für die Weiterentwicklung, die auch ins Repository zurückfließen sollen muss in den Entwicklermodus gewechselt werden. Damit verhält sich der Ordner wie ein installiertes Python-Paket.

cd alstat
python setup.py develop

Hier begegnet uns schon die ersten Fehler die korrigiert werden müssen, weil sich mit Python 3 die Syntax ein wenig geändert hat:

Fehlerausgabe Nummer 1:

   (logstatistik) TinShip:alstat peter$ python setup.py develop
File "setup.py", line 30
  except Exception, e:
              ^
SyntaxError: invalid syntax

Neu und geändert:

try:
 readme_content = open(os.path.join(os.path.abspath(
     os.path.dirname(__file__)), "README.rst")).read()
 except Exception as e:
     print(e)
     readme_content = __doc__

Fehlerausgabe Nummer 2:

Print ist nun eine Funktion und verlangt Klammern.

python setup.py develop
File "setup.py", line 70
print "Audit requires PyFlakes installed in your system."""
                                                     ^
SyntaxError: Missing parentheses in call to 'print'.
Did you mean print("Audit requires PyFlakes installed in your system.""")?

Neu und geändert:

Gleichzeitig bekommen wir einen Hinweis, dass es eine Abhängigkeit zum Paket pyflakes gibt, also ist ein pip install pyflakes notwendig.

def run(self):
     try:
     import pyflakes.scripts.pyflakes as flakes
     except ImportError:
     print("Audit requires PyFlakes installed in your system.""")
     sys.exit(-1)

Funktioneren die Kommandos noch?

Im Testordner müsse ein paar Logdateien platziert sein (ein anderer Ordner mit Log-Dateien tut’s auch):

tree
.
├── __init__.py
└── logs
     ├── access.nginx.1.log
     └── nginx_logfile.log

Aufruf-Varianten

alstat --help
alstat -d /tests/logs -p "*log" -f "base" http_method status http_referer