[ TAG 249 ][26.12.2021] -Erfolgreich -IAP-20210601-20210722 -RPRCSL_20211219_0030
In der heutigen Worksession habe ich mir vorgenommen, die [COPY]-Methoden im [RPRCSL_20211219_0030] umzusetzen.
Gestern habe ich die Methode [STATE_00_ITEM_COPY(...)] fertig gestellt. Das Prinzip funktioniert eigentlich ganz einfach. Nehmen wir ein Element mit der Bezeichnung [ppid]. Wenn [ppid] als Attribut nicht vorhanden ist, wird der Wert aus der [RPRCSL]-Liste geholt. Ist das Element in der [RPRCSL]-Liste nicht vorhanden, so wird eine exception ausgelöst und das [ppid](als Beispiel) mit None gesetzt.
Dieses Prinzip wurde entwickelt um die [RPRCSL]-Listenelemente zu verwalten. Weil wir bei den Python-Manager-Modul mit der Eigenschaft konfrontiert werden, dass einzelne Elemente nicht verändert werden können. Somit werden die Elemente, die nicht verändert wurden einfach kopiert. Weil jede Veränderung der Elemente dazu führt, dass die gesamte Liste neu gesetzt werden muss.
Wenn wir zum Beispiel nur die Elemente des [STATE_00] verändern möchten, werden vom Modul alle anderen Elemente zwischen gespeichert und neu gesetzt.
- STATE_00_ITEM_COPY(...)
- STATE_10_ITEM_COPY(...)
- STATE_19_ITEM_COPY(...)
- STATE_20_ITEM_COPY(...)
- LOGGER_00_ITEM_COPY(...)
- ALOG_ITEM_COPY(...)
[26.12.2021][1650] Ich finde auf der einen Seite den Aufbau sehr interessant, weil diese Methoden dazu verwendet werden können um die Struktur anzulegen. Wenn ein Element in der Liste fehlt, wird zwar eine Fehlermeldung ausgegeben, dass der Kopiervorgang dieses Elementes fehlgeschlagen ist. Jedoch wird aber das Fehlende Element im zwischen gespeicherten Dictionary mit einen None angelegt.
Das ist die Struktur, die aufgebaut wird.
rprcsl: {
19492: {
'state_00': {
'pid': None,
'ppid': None,
'status': None,
't0': None,
't1': None,
't2': None
},
'state_10': {
'pid': None,
'ppid': None,
'status': None,
't0': None,
't1': None,
't2': None
},
'state_19': {
'pid': None,
'ppid': None,
'status': None,
't0': None,
't1': None,
't2': None,
'dt0': None,
'dt1': None,
'dt2': None
},
'state_20': {
'pid': None,
'ppid': None,
'status': None,
't0': None,
't1': None,
't2': None,
'dt0': None,
'dt1': None,
'dt2': None
},
'logger_00': {
'idnt': None,
'pth': None,
'str_idnt': None,
'prj_idnt': None,
'p11_spi': None
},
'alog': {
'idnt': None,
'pth': None,
'str_idnt': None,
'prj_idnt': None,
'p11_spi': None
}
}
}[26.12.2021][2150] Ich habe heute die Methode UPDATE_ITEM(...) mit allen benötigten Komponenten fertig gestellt.
def UPDATE_ITEM(RPRCSL=None,
pid=None,
STATE_00=None,
STATE_10=None,
STATE_19=None,
STATE_20=None,
LOGGER_00=None,
ALOG=None
):
rprcsl = dict()
if STATE_00 is not None:
rprcsl.update(STATE_00)
else:
rprcsl.update(STATE_00_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
if STATE_10 is not None:
rprcsl.update(STATE_10)
else:
rprcsl.update(STATE_10_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
if STATE_19 is not None:
rprcsl.update(STATE_19)
else:
rprcsl.update(STATE_19_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
if STATE_20 is not None:
rprcsl.update(STATE_20)
else:
rprcsl.update(STATE_20_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
if LOGGER_00 is not None:
rprcsl.update(LOGGER_00)
else:
rprcsl.update(LOGGER_00_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
if ALOG is not None:
rprcsl.update(ALOG)
else:
rprcsl.update(ALOG_ITEM_COPY(RPRCSL=RPRCSL, pid=pid))
RPRCSL[pid] = rprcsl
Die Methode eignet sich auch zum Anlegen der RPRCSL-Struktur. Jedoch finde ich es besser, wenn man das vermeidet. Diese Komponente wurden so designt, dass diese Methode diese Aufgabe übernehmen kann.
Jedoch habe ich für das Anlegen der Struktur die Methode [CREATE_NEW_EMPTY_ITEM(...)] angelegt. Diese Methode hat ausschließlich nur die Aufgabe eine leere Struktur mit Platzhaltern anzulegen.
Die Situation, dass ein Element fehlt in der RPRCSL-Struktur sollte vermieden weden.
Der nächste Schritt für die kommenden Worksessions ist die Entwicklung der [ITEM]-Methoden.
def STATE_00_ITEM(RPRCSL=None, pid=None, ppid=None, status=None):
t0 = time.time()
t1 = datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S")
t2 = time.time_ns()
state_00 = STATE_00_ITEM_COPY(RPRCSL=RPRCSL,
pid=pid,
ppid=ppid,
status=status,
t0=t0,
t1=t1,
t2=t2
)
UPDATE_ITEM(RPRCSL=RPRCSL, pid=pid, STATE_00=state_00)
Hochachtungsvoll
Artem Kraft
Kommentare
Kommentar veröffentlichen