Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lib.item: add methods for list/dict manipulation #620

Merged
merged 5 commits into from
Feb 26, 2024

Conversation

Morg42
Copy link
Member

@Morg42 Morg42 commented Jan 19, 2024

Ich habe als Vorschlag und zur Diskussion mal meine Idee zum Handling von dicts und lists in Items ergänzt.

Martins Implementation ist unverändert, allerdings legt das Item je nach Typ die folgenden Item-Funktionen an:

list: append, prepend, insert, pop, extend, clear, delete, remove
dict: get, delete, clear, pop, popitem, update

delete statt del, weil del als reserviertes Wort nicht nutzbar ist.

Die Funktionen lassen sich quasi 1:1 wie die originalen list-/dict-Funktionen nutzen, z.B.

listitem.append(val)
val = listitem.pop("2:3")

dictitem.update({'foo': 'bar'})
val = dictitem.get('baz', 'sorry')

Zusätzlich können allen Funktionen die Parameter caller, source, dest mitgegeben werden.

Intern rufen die Funktionen alle __call__ auf, so dass alle notwendigen Item-Mechaniken durchlaufen werden.

Ich sehe das Problem, dass für remove, pop usw. noch weitere zusätzliche Parameter an __call__ übergeben werden müssen und die Auswertung, welche Parameter und welche nicht übergeben wurden, schnell sehr unübersichtlich und komplex wird.

Das soll keine Kritik an Martins Implementation sein und kein Ersatz, sondern eine Ergänzung (append, prepend, get rufen sogar mit "seiner" neuen Syntax __call__ auf...).

Ob wir das annehmen wollen oder nicht, wäre ggf. zu diskutieren.

Die Methoden sind alle einzeln getestet. Automatische Tests kann ich leider nicht ohne Weiteres einbauen, weil die Initialisierung der Item-Klasse nicht "normal" durchlaufen wird.

@Morg42 Morg42 added this to the Version 1.11 milestone Jan 19, 2024
@Morg42 Morg42 requested review from msinn, bmxp and onkelandy January 19, 2024 10:51
@Morg42 Morg42 self-assigned this Jan 19, 2024
@Morg42 Morg42 marked this pull request as ready for review January 21, 2024 11:20
@Morg42
Copy link
Member Author

Morg42 commented Feb 24, 2024

So, aufgrund der Thematik sich überschneidender Methoden und Item-Namen gibt es jetzt ein "Unterobjekt" item.list bzw. item.dict. Das kann wie das Item aufgerufen werden item.list() === item().

Die oben beschriebenen Methoden (list.append, dict.update usw) sind jetzt "unterhalb" der Unterobjekte, also item.list.append(...) bzw item.dict.update(...). Damit kollidieren die Methoden nicht mehr - es sei denn, es existieren Unteritems mit den Namen "list" oder "dict".

@Morg42 Morg42 merged commit 0c1f65e into smarthomeNG:develop Feb 26, 2024
5 checks passed
@Morg42 Morg42 deleted the list-dict branch February 26, 2024 06:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant