English version below
Hallo,
so, da ich $privatdinge hinter mich gebracht habe, wird es Zeit, sich näher anzuschauen, was ich da gestern geistig erbrochen habe. Zur Erinnerung: es geht um https://peakd.com/hive-121566/@t-nil/downloadlatestpy-automatic-github-release-downloader , Quellcode (neuere Version) ist hier (https://pastebin.com/KZvjLBZU).
Kleine Zwischenmeldung: Jetbrains PyCharms, eine bekanntere IDE für Python, hat vorhin zusammen mit einem Stream in Firefox, mein etwas betagtes Notebook (2012) komplett in die Knie gezogen. Schade.
Also: gehen wir mal zusammen durch, was ich wann mache, und wieso.
- Das Loglevel wird auf Debug gesetzt. Klar, ich bin ja gerade am Entwickeln.
- Die Funktion set_working_directory() wird nur einmal aufgerufen, um das Arbeitsverzeichnis auf das Elternverzeichnis des Skripts selbst zu setzen. Wir wollen nur dort arbeiten.
- Die State File wird eine Zuordnung von Projektnamen zu installierter Versionsnummer beinhalten.
- Ich benutze das veraltete optparse-Paket, um die Parameter zu verarbeiten. Dass diese veraltet ist, habe ich zu spät gelesen. Schwamm drüber.
- Der Parser wird konfiguriert (31-34), dann ausgeführt (36), dann werden die verpflichtenden Argumente herausgezogen (38-48)
- Es wird versucht, aus dem Doppelprojektstring (zB "signalapp/Signal-Desktop") der Projektname ("Signal-Desktop") zu extrahieren. Wenn das nicht klappt (weil nicht genau ein '/' drin vorkommt), "stirbt" das Programm.
- Alternativ wird nach einer User-Option geschaut, die einen neuen Zielordnernamen setzt
- Jetzt wird geschaut, ob die State File schon existiert, sprich, ob das Programm schon einmal gelaufen ist
- Wenn ja, wird versucht, diese einzulesen. (Hier findet keine Fehlerüberprüfung statt, das Programm sollte sich also bei einer korrupten Datei einfach beenden. Da das aber nicht vorkommen soll und sowieso Nutzerintervention bedeuten würde, muss ich das nicht extra bearbeiten, so meine Rationale)
- Wenn nein, wird Python ans Herz gelegt, doch ein leeres Dictionary zu erstellen.
Hmm, leider tun mir die Hände weh, und ich habe länger als erwartet gebraucht für den Post. Morgen geht's weiter!
English version
Hello,
so, since I'm done with $privatethings, it's time to take a closer look at what I was mentally vomiting yesterday. Reminder: it's about https://peakd.com/hive-121566/@t-nil/downloadlatestpy-automatic-github-release-downloader , source code (newer version) is here (https://pastebin.com/KZvjLBZU).
Small interim news: Jetbrain's PyCharms, a better known IDE for Python, together with a stream in Firefox, completely brought my somewhat aged notebook (2012) to its knees earlier. Too bad.
So: let's go through together, what I do when, and why.
- The loglevel is set to debug. Sure, I am just developing.
- The set_working_directory() function is called only once to set the working directory to the parent directory of the script itself. We only want to work there.
- The state file will contain a mapping from project name to installed version number.
- I use the deprecated optparse package to handle the parameters. I read too late that this is deprecated. Bygones.
- The parser is configured (31-34), then executed (36), then the mandatory arguments are extracted (38-48)
- It tries to extract the project name ("signal-desktop") from the double project string (e.g. "signalapp/signal-desktop"). If this does not work (because there is not exactly one '/' in it), the program "dies".
- Alternatively look for a user option that sets a new destination folder name
- Now we check if the state file already exists, i.e. if the program has run before.
- If yes, it is tried to read it in. (There is no error checking here, so the program should just quit if the file is corrupt. But since this should not happen and would mean user intervention anyway, I don't need to handle this separately, according to my rationale).
- If no, Python is advised to create an empty Dictionary after all.
Hmm, unfortunately my hands hurt, and it took me longer than expected to write the post. Tomorrow I'll continue tomorrow!
Do you mind supporting the HiveBuzz proposal for 2022 so our team can continue its work next year?
You can do it on Peakd, ecency, or using HiveSigner.
We wish you a Merry Christmas and a Happy New Year!Dear @t-nil,