Danke für die hilfreichen Komentare!
Hier die für mich wichtigsten Stichwörter:
Nur zwei *args?
ja, die größten "Kopfschmerzen" bzw. "Bauchweh" lag auch auf meiner Seite bei der Verwendung von nur zwei *args!
Zuerst waren das drei, dann zwei, jetzt sind es wieder drei.
Das Motto "weniger ist besser" war ganz klar über das Ziel hinausgeschossen...
Nur eine Funktion / ein Objekt?
Ja, dabei wird es wohl bis auf Weiteres bleiben, vermute ich.
Der in diesem Fall m. E. letztlich überwiegende Vorteil ist der "Schutz" gegen Vergessslichkeit, "Schlamperei", Sucherei etc.
Lesbarkeit der Verzeweigungen:
Ja, durch die Verwendung von drei args ist das jetzt VIEL "schöner" umzusetzen, in mehrfacher Hinsicht ....
@__blackjack__
das Thema codecs ist leider ein SEHR tiefes, wie so viele andere auch...
Ich bin ausgegangen davon, dass Python3 (liegt heirr zu Grunde) utf-8 als default verwendet.
Auf die Möglichkeit, dass externe Module (hier json) dies anders sehen könnten, war ich bisher nicht gekommen
- dies könnte jedoch der Fall sein - keine Ahnung..
An die Runde:
Wie verhält sich denn dieses?
Falls json diesen Python3-default berücksichtigt, wird für jeden vorkommenden Fall automatisch utf-8 verwendet - falls nicht, ist dieser natürlich in jedem Fall anzugeben
So sieht das jetzt aus:
Code: Alles auswählen
import os
import json
# Meta-Bemerkungen (in deutscher Sprache) entfallen ab dem pre-release.
# Sie dienen bis dahin lediglich Kommentaren, welche zum leichteren Verständnis von "Merkwürdigkeiten" im Code dienen
# !access settings via this function only please!
def rw_settings(*args):
"""
Read / write settings
If no settings-file is found, use defaults
*args:
accepted are from 1 to 3 arguments
args[0]:
is defining the access-mode
valid args[0]:
- 'read_default_data'
NO write operation is permitted
- 'ro' (read only)
return a dict-value
EXCEPTION:
in case no file for settings-data is found on disc,
defaults initially are written to file
- 'rw' (read write)
case a, no (optional) third arg is available:
return a value
case b, a third arg is available:
update a key-value and
return this value
args[1]:
- represents a key only
args[2]:
- represents a value only
Access samples:
# sind hier noch veeeeeerkehrt angegeben .........................
Read:
rw_settings('ro', read_default_data')
rw_settings('_symlinks_dirs')
Write:
rw_settings('_symlinks_dirs', 'True')
"""
# no. of arguments: two or three only
if 1 < len(args) > 3:
# Implementation des error-handling ist temporär !!!
print('!ERROR! !ERROR! !ERROR!')
print('expected 1 or 2 args only, received:', len(args))
quit()
# Angabe des Arbeitsverzeichnisses und des Dateinamens ist temporär !!!
# set path for settings-file
data_path = '.\\dummy_f_dfg_ff__Y_TmP_mydata.json'
# defaults for settings data
data = {
'_del_orphaned': False, # if true: del orphaned versions
'_demo_only': False, # if true: demo only
'_hide_versions': False, # if true: hide
'_symlinks_dirs': False, # if false: ignore
'_symlinks_files': False, # if false: ignore
# 'scan_all_subdirs', # visibility of subdirs for power-user
}
if args[0] == 'read_default_data':
# return default dict
return data
elif args[0] == 'ro':
# EXCEPTION:
# in case no file is existing, create one, using default data
if not os.path.exists(data_path):
with open(data_path, 'w') as f:
json.dump(data, f)
# read settings from file
with open(data_path, 'r') as f:
data = json.load(f)
return data[args[1]]
elif args[0] == 'rw':
# a third arg is expected
# update key-value
data[args[1]] = args[2]
# write updated data to disc
with open(data_path, 'w') as f:
json.dump(data, f)
return data[args[1]]
else:
print('!ERROR! !ERROR! !ERROR!')
print('unknown arg received:', args[0])
quit()
print("rw_settings('read_default_data'):")
print(rw_settings('read_default_data'))
print("rw_settings('ro', '_demo_only'):")
print(rw_settings('ro', '_demo_only'))
print("rw_settings('rw', '_demo_only', 'True'):")
print(rw_settings('rw', '_demo_only', 'True'))
Könnte das nach den Änderungen erst mal so stehen bleiben?