Mit dieser Library werden kleine Funktionen und Aufrufe zur Verfügung gestellt, die an verschiedenen Stellen benötigt werden. Der Anfang ist noch recht bescheiden, wird sich aber im Laufe der Zeit bestimmt zu einer Fundgrube werden.
Alle autonomen Module versehe ich mit einem Testbereich (siehe unten). Die Vorteile sind bei der Entwicklung der direkte Test durch den einfachen Aufruf. Zum Anderen sind dann direkt Anwendungsbeispiele enthalten.
Die Programmierung habe ich in der Regel übersichtlich ausgeführt. Viele Stellen können bestimmt noch optimiert werden.
Download pdvm_util.py
getNewId
Dieser Aufruf gibt eine neue UUID zurück. Es wird dazu das Modul UUID verwendet. Dieser Aufruf wird verwendet um im Model einen Default dynamisch gestalten zu können. Siehe dazu 'autentification/models.py'.
import uuid # import Modul uuid
def getNewId(): # Definition der Funktion
return str(uuid.uuid4()) # neue UUID/GUID
getStaticId(Zeichen)
Hier wird zu dem mitgegebenen Zeichen eine statische UUID zurückgegeben. Dieses wird zur fixen Festlegungen im System benötigt. Zugelassen werden nur die Zeichen die bei einer HEX - Darstellung verwendet werden können. Groß- bzw. Kleinschreibung spielt hierbei keine Rolle. Die zugelassenen Zeichen werden intern mit '__checkHexValue(Zeichen) ' geprüft.
def getStaticId(zahl): # Definition der Funktion
if __checkHexValue(zahl): # nur zugelassene Zeichen verarbeiten
t=""
z = 8
for i in range(36): # statik UUID/GUID aus zahl
if i == z:
if z < 23:
z += 5
t+="-"
else:
t+=str(zahl)
return t
else:
printMessage('error', 'pdvm_util.py', 'PDU_001',aon=str(zahl))
return getStaticId(0) # wird als Standard zurückgegeben - Format sicher stellen
printMessage(Art, Modus, Nummer, Hinweis, Sprache)
Mit der printMessage erfolgt eine formatierte und übersetzte Fehlerausgabe in der Console. In der Regel sind die Fehlerausgaben so entwickelt, dass das Programm nicht abbricht, sondern mit einem Default weiter läuft. Daher wird empfohlen, diese Fehlerausgaben in der Konsole bei der Entwicklung ständig im Auge zu bealten.
- Art
--> die Art wird als einfacher Text mitgegeben (bitte verwenden 'error', 'warning' und 'message'
- Modul
--> als Modul geben sie einfach den Name der Programmdatei mit.
- Textnummer
--> Hier wird die Fehlernummer mitgegeben. Hinter dieser ist auch die Übersetzung verborgen. Jeder Programmbereich hat hier einen eigenen Nummernbereich XXX --> Programmbereicht und nach einem Unterstrich daran 3 Stellen eine fortlaufende Nummer mit führenden Nullen.
- Hinweis --> Hier können zusätzliche Informationen mitgegeben werden, wie zum Beispiel die Werte mit denen der Fehler erkannt wurde.
- Sprache
--> Die Sprache kann, muss aber nicht mitgegeben werden, da diese aus den Settings beschafft wurde.
Hinweis:
diese printMessage() kann mit Ausnahme von pdvm_langtext in allen Bereichen verwendet werden. Dort ist jedoch eine eigene printMessage() vorhanden.
def printMessage(typ,mod,num,aon=' ',lang=st_language):
la = 70 # Breite der Ausgabe
li = '10' # Breite der 1. Spalte
# Berechnung und Ausgbe der Headline
h_line = lockedWritten(transkateone('general', 'message', lang))
h_mh = int((la - len(h_line) - 2) / 2)
h_line = ' '+h_line+' '
print(multiChar('=',h_mh)+h_line+multiChar('=',h_mh))
print(transStringOne (lang, 'label', 'number', li)+": "+num)
print(transStringOne (lang, 'label', 'typ', li)+": "+typ)
print(transStringOne (lang, 'label', 'modul', li)+": "+mod)
print(stringToLength('',str(int(li)+3))+str(transkateone('messages',num, lang)))
print(transStringOne (lang, 'label', 'note', li)+": "+str(aon))
print(multiChar("=",la,0))
__checkHexValue(Zeichen)
Hier werden die zugelassenen Zeichen einfach über eine Schleife geprüft und True/False zurückgegeben.
Der Fehlertext wird hier direkt in deutsch ausgegeben. Sobald die pdvm_datetime.py fertig gestellt ist, wird es in der aktuellen Stufe dann auch verschiedene Sprachen (deutsch / englisch) geben.
def __checkHexValue(zeich): # Prüfung zugelassener Zeichen
zeichen = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f']
if zeich in zeichen:
return True
else:
return False
lockedWritten(Wort)
Dieses kleine Teil setzt bei den mitgegebenen Wort hinter jedem Zeichen ein Leerzeichen. Damit entsteht eine gesperrte Schrift.
def lockedWritten(word):
ret = ''
for b in word:
ret = ret+b+' '
return ret
multiChar(Zeichen, Multiplikator, LF)
MultiChar() gibt eine Wiederholung des eingegebenen Zeichens (String) zurück. Der Multiplikator gibt die Anzahl der Wiederholungen an.
Mit LF kann gesteuert werden ob der zurückgegebene String vorne oder hinten einen Zeilenvorschub (linefeed) hat.
LF = 0 --> kein Zeilenvorschub
LF = 1 --> Zeilenvorschub vorne
LF = 2 --> Zeilenvorschub hinten
LF = 3 --> Zeilenvorschub vorne und hinten
def multiChar(char,multi,lf=0):
ret = char * multi
if lf == 1 or lf == 3:
ret = '\n'+ret
if lf == 2 or lf == 3:
ret = ret+'\n'
return ret
transString (Wort, Kategorie, Länge)
Übersetzte String mit Kategorie und gibt diesen übersetzten Wert mit der angegebenen Länge aus. Die Kategorie muss hierbei als Wörterbuch bereict vorliegen.
def transString (pdvmstr, pdvmkat, pdvml):
vstr = pdvmkat[pdvmstr]
ret =('{:<'+pdvml+'}').format(vstr)
return ret
transStringOne (Sprache, Kategorie, Wort, Länge)
Übersetzte das Wort aus der Kategorie und gibt das Ergebnis auf die Länge aus. Die Übersetzung erfolgt direkt aus dem Wörterbuch mit der Sprache.
def transStringOne (lang, pdvmkat, pdvmstr, pdvml):
vstr = transkateone(pdvmkat, pdvmstr, lang)
ret =('{:<'+pdvml+'}').format(vstr)
return ret
stringToLength (String, Länge)
gibt den String mit der fixen Länge zurück.
def stringToLength (pdvmstr, pdvml):
ret =('{:<'+pdvml+'}').format(pdvmstr)
return ret
p_print(ShowDetail, String)
Gibt den String zurück, wenn ShowDetail == 1 ist.
def p_print(show_detail, prt):
if show_detail == 1 : print(prt)
t_p_t(Sprache, Wort)
Übersetzt das Wort in der angebenen Sprache aus Kategorie 'proptext'.
def t_p_t(lang, word):
return transkateone('proptext', word, lang)
Testbereich
Der Testbereich ist so ausgeführt, dass er verschiedene Fallgestaltungen durchläuft und die Ergebnisse darstellt. Ausgeführt wird er nur dann, wenn die pdvm_utils.py einfach mit Python gestartet wird. Einen komplexeren Testbereich ist in pdvm_datetime.py vorhanden.
# ------------------------------------------------------------------
# Hauptprogramm - Testumgebung
# ------------------------------------------------------------------
if __name__=='__main__':
import os # Für Testbereich
try: # Console wir leer gemacht
os.system('CLS') # for Windows
except:
os.system('CLEAR') # for Unix
# Test der Funktionen, wenn
# Test der Funktion getNewId() # die Funktionsbibliothek
b=getNewId() # direkt aufgerufen wird
print("T e s t -- getNewId() -- Funktion öffentlich")
print("=============================================")
print("Neue UUID/GUID: "+b)
print("Neue UUID/GUID: "+getNewId())
# Test __checkHexValue
print("\nT e s t -- __checkHexValue() -- Funktion privat")
print("================================================")
print("Zeichen 0 "+str(__checkHexValue(0)))
print("Zeichen 9 "+str(__checkHexValue(9)))
print("Zeichen a "+str(__checkHexValue('a')))
print("Zeichen f "+str(__checkHexValue('f')))
print("Zeichen g "+str(__checkHexValue('g')))
print("Zeichen z "+str(__checkHexValue('z')))
# Test der Funktion staticId(x) (x = 0-9 oder a-f)
# dieses sind die ggf. zugelassenen statischen Ids
print("\nT e s t -- staticId() -- Funktion öffentlich")
print("=============================================")
for i in range(10):
print("Statische UUID: "+getStaticId(i))
zeichen = ['a','b','c','d','e','f']
for i in zeichen:
print("Statische UUID: "+getStaticId(i))
# Fehlerprüfung Test
print("gibt es dieses? "+getStaticId('x'))
print("gibt es dieses? "+getStaticId('12'))
print("gibt es dieses? "+getStaticId('aa'))
print("gibt es dieses? "+getStaticId('b1'))