Fest-"Platte" - es gibt ja heute kaum mehr welche... - die im M.2-Format sind ja fast "verboten" schnell...
Das Programm soll als Script ohne weitere Datei ausreichen, so der Plan.
Fest-"Platte" - es gibt ja heute kaum mehr welche... - die im M.2-Format sind ja fast "verboten" schnell...
Hallo @__blackjack__,__blackjack__ hat geschrieben: ↑Mittwoch 1. Dezember 2021, 18:40 ...
@ulipy: Ich sehe nicht, dass `DEFAULT_SETTINGS` für alle Zeiten obsolet wird nach dem ersten Programmlauf. Das sind immer noch die Grundeinstellungen, die auch immer noch gebraucht werden, wenn die Einstellungsdatei mal nicht da ist, absichtlich oder wegen einem ”Unfall”. Manchmal möchte man als Benutzer, der ein Programm konfiguriert und da Probleme hat, oder aus anderen Gründen, wissen was die Grundeinstellung ist, an der man irgendwann mal etwas verändert hat.
...
Code: Alles auswählen
import json
class MyClass:
def __init__(self, name):
# use function objects to set
# defaults of key - value pairs?
self.tmp = {} # key-val container
self.demo_flag = True
self.tmp['demo_flag'] = self.demo_flag
self.any_item = 'some text'
self.tmp['any_item'] = self.any_item
with open('.\\df dfg ff _Y_TmP_mydata.json', 'w') as f:
json.dump(self.tmp, f)
def update(self, key, val):
f = open('.\\df dfg ff _Y_TmP_mydata.json', 'r')
self.tmp = json.load(f)
if key == 'demo_flag':
self.demo_flag = val
elif key == 'any_item':
self.any_item = val
else:
print('ERROR')
quit()
f.close()
f = open('.\\df dfg ff _Y_TmP_mydata.json', 'w')
json.dump(self.tmp, f)
f.close()
# create instance x of MyClass,
# named "settings"
x = MyClass('settings')
print(f'instance: {x}')
print(f'x.demo_flag: {x.demo_flag}')
key = 'demo_flag'; val = False
x.update(key, val)
print(f'x.demo_flag: {x.demo_flag}')
quit()
Das ist richtig. Für die __init__() Methode passt das nicht. Ich würde aber dennoch bei einem Docstring als Erklärung für die Klasse bleiben und entsprechend verschieben.
- genau so ist das geplantBei jedem Programstart wird geprüft, ob die Datei mit den Benutzereinstellungen vorhanden ist. Wenn nicht, wird er danach gefragt und die Datei wird neu erzeugt.
- ja, das ist eine der Krücken, die derzeit im aktuellen Code-Schnippsel steht - das kann dort "niemals nicht" verbleiben...In Python steckt man niemals zwei Anweisungen in eine Zeile, auch wenn es ; gibt, benutzt man ihn nicht.
Die json-Datei wird bei jedem Programmstart neu erstellt. Somit ist sie eigentlich überflüssig.
Genau das meinte ich.
Es gibt viele Wege zum Ziel. Ich gebe Dir mal ein Beispiel, wie es umgesetzt werden könnte:ulipy hat geschrieben: ↑Mittwoch 1. Dezember 2021, 17:05 Du gibst nun dem user beim initialen Start die Möglichkeit, keinen oder auch jeden dieser Werte an seine Bedürfnisse anzupassen (kein GUI, Kommandozeile).
Dann schreibst du das fest auf Platte.
Das, was danach von Platte gelesen wird, sind per Definition user settings.
Aus dem script wird das danach "nie mehr" benötigt oder gelesen.
Code: Alles auswählen
from configparser import ConfigParser
from pathlib import Path
SETTINGS_FILE = Path().resolve().parent / "configuration.ini"
SETTINGS_FILE_ENCODING = "utf-8"
def get_settings(settings_file):
"""
Takes a Path-instance as settings_file and
returns a dictionary with the settings.
"""
defaults = {
'del_orphaned': False,
'demo_only': False,
'hide_versions': False,
'symlinks_dirs': False,
'symlinks_files': False,
}
config = ConfigParser(defaults=defaults)
if settings_file.exists():
with open(settings_file, "r", encoding=SETTINGS_FILE_ENCODING) as fobj:
config.read_file(fobj)
defaults = dict(config.items("DEFAULT"))
else:
with open(settings_file, "w", encoding=SETTINGS_FILE_ENCODING) as fobj:
config.write(fobj)
return defaults
settings = get_settings(SETTINGS_FILE)
print(settings)
Code: Alles auswählen
defaults = {
'del_orphaned': False,
'demo_only': False,
.
.
Hier zeigt sich gut, wie schwierig sich manchmal Kommunikation über ein so eingeschränktes Medium gestaltet......
@ulipy: tmp ist selten ein sinnvoller Variablenname, und ...
...
MyClass ist ein sehr schlechter Klassenname, warum..
...
Genau, viel zu viel Freiheit! Und wenn man nicht bei rot über die Straße zu gehen möchte, muss man seine Füße festnageln.