Seite 1 von 1

Uppercase im Dictinary

Verfasst: Donnerstag 29. Oktober 2009, 14:41
von hardez
Hallo Leute,
ich bin ziemlich neu in der Welt von Python und auch in diesem Forum.
Ich schriebe gerade an einer Webanwendung, mit der man Objecte in einer Active Directory (LDAP) anlegen/verändern kann.
Soweit klappt auch alles mehr oder weniger.

Mein Problem ist nun folgendes. Auf der HTML Seite wird eingegeben welcher User in welcher OU angelegt werden soll.

Soll ein User in einer bestimmten (für Admins reservierten OU) angelegt werden, soll eine Fehlermeldung kommen, dass das nicht erlaubt ist.

So mementan fange ich das mit einer langen "if" Anweisung ab.
Das klappt aber auch nur solange wie einer "normal" schriebt.

Schreibt aber nun jemand "OU: aDmInS" würde mein Script nicht reagieren.
Am besten fängt man sowas aber natürlich ab indem man den String einfach in upper- oder lowercase wandelt.

Python sagt mir nun aber das das nicht möglich sei, da es kein String ist.

Also mein Code sieht so aus:

Code: Alles auswählen

entries=cgi.FieldStorage()
if entries:
    if entries.has_key("usranlegen"):        
        try:
            user={'first':entries['vorname'].value,'last':entries['nachname'].value,'klasse':entries['OU'].value}
            if user['OU'] == 'ADMINS' or user['klasse'] == 'Admins' or user['klasse'] == 'admins':
                print 'Das ist nicht erlaubt'
            else:
                location='LDAP://OU='+user['OU']+',OU=User,DC=meine,DC=domain,DC=de'
Wie kriege ich es nun hin das ich den Inhalt des Dict Feldes 'OU' in upper- oder lowercase bekomme?

Hab auch shcon probiert

Code: Alles auswählen

a=str(user['OU'])
a.uppercase
aber auch das hat nicht geklappt.

Ist mit sicherheit total einfach, ich komm aber nicht drauf!

Verfasst: Donnerstag 29. Oktober 2009, 14:47
von numerix

Code: Alles auswählen

>>> "Hallo".upper()
'HALLO'

Verfasst: Donnerstag 29. Oktober 2009, 14:47
von Hyperion
"hat nicht geklappt" und "sagt mir, das ist kein String" sind ja klasse - aber was hat nicht geklappt und was ist es denn dann? Das wären wohl wichtige Infos ;-)

Sobald Du einen String hast, speicherst Du eben value.lower() in Deinem dict!

Re: Uppercase im Dictinary

Verfasst: Donnerstag 29. Oktober 2009, 15:12
von /me
hardez hat geschrieben: Schreibt aber nun jemand "OU: aDmInS" würde mein Script nicht reagieren.
Am besten fängt man sowas aber natürlich ab indem man den String einfach in upper- oder lowercase wandelt.

Python sagt mir nun aber das das nicht möglich sei, da es kein String ist.

Also mein Code sieht so aus:

Code: Alles auswählen

entries=cgi.FieldStorage()
if entries:
    if entries.has_key("usranlegen"):        
        try:
            user={'first':entries['vorname'].value,'last':entries['nachname'].value,'klasse':entries['OU'].value}
            if user['OU'] == 'ADMINS' or user['klasse'] == 'Admins' or user['klasse'] == 'admins':
                print 'Das ist nicht erlaubt'
            else:
                location='LDAP://OU='+user['OU']+',OU=User,DC=meine,DC=domain,DC=de'
Woher bitte soll user['OU'] kommen? Schau mal, wie du das Dictionary eigentlich definierst.

Re: Uppercase im Dictinary

Verfasst: Donnerstag 29. Oktober 2009, 15:16
von Hyperion
/me hat geschrieben: Woher bitte soll user['OU'] kommen? Schau mal, wie du das Dictionary eigentlich definierst.
Stimmt - aber dann hat er uns eine Exception vorenthalten ;-)

Generell ist so eine händische Authetifizierungs- und Autorisierungslösung natürlich fraglich. Es gibt doch viele nette Libs dafür...

Re: Uppercase im Dictinary

Verfasst: Donnerstag 29. Oktober 2009, 16:03
von DasIch
Hyperion hat geschrieben:Es gibt doch viele nette Libs dafür...
Solange man WSGI verwendet ;)

Verfasst: Donnerstag 29. Oktober 2009, 18:37
von hardez
@numerix Wie gesagt habe ich das bereits probiert
@alle anderen Die Website sendet per <form action="script.py" method="POST"> die Daten an mein Script.
Dieses wird per

Code: Alles auswählen

cgi.FieldStorage()
an eine Variable übergeben (ist also automatisch ein Dict und ich kann da nix vorher konvertieren).
So nun muss ich einen irgendwie ein Feld aus dem Dict in einen Uppercase String umwandeln.
Ich habe aber keine Ahnung wie!

Den Rest hab ich bereits im ersten Post geschrieben...

Verfasst: Donnerstag 29. Oktober 2009, 18:41
von Hyperion
@Dich noch einmal:
Hyperion hat geschrieben:"hat nicht geklappt" und "sagt mir, das ist kein String" sind ja klasse - aber was hat nicht geklappt und was ist es denn dann? Das wären wohl wichtige Infos ;-)

Sobald Du einen String hast, speicherst Du eben value.lower() in Deinem dict!

Verfasst: Donnerstag 29. Oktober 2009, 18:49
von hardez
Ok ich hab grade festgestellt das ich einen Fehler hatte.
Der fehler der kam war das str() kein uppercase kennt...
Is logisch heißt ja auch .upper

Gut wenn ich nun aber user['OU'].upper eingebe kommt:

<built-in method upper of str object at 0xb76b7c20>

mehr nicht.

Verfasst: Donnerstag 29. Oktober 2009, 18:52
von Hyperion
hardez hat geschrieben:Ok ich hab grade festgestellt das ich einen Fehler hatte.
Der fehler der kam war das str() kein uppercase kennt...
str() ist eine Funktion, die ein String Objekt zurückliefert; d.h. auf der Rückgabe kannst Du sehr wohl ein upper() aufrufen!

Auch wenn der Code an sich unsinnig ist:

Code: Alles auswählen

In [17]: str("Hallo").upper()
Out[17]: 'HALLO'
Gut wenn ich nun aber user['OU'].upper eingebe kommt:

<built-in method upper of str object at 0xb76b7c20>

mehr nicht.
Ist ja auch klar!

Code: Alles auswählen

In [13]: "Test".upper
Out[13]: <built-in method upper of str object at 0x26aadb0>

In [14]: "Test".upper()
Out[14]: 'TEST'
"upper" ist die Methode des Strings; mit upper() rufst Du diese auf.

Verfasst: Donnerstag 29. Oktober 2009, 18:54
von hardez
argh ich sollte einfach mal ne Pause einlegen, dann kommt man auf sowas evtl auch von allein -.-

Vielen dank!

Verfasst: Donnerstag 29. Oktober 2009, 18:59
von numerix
hardez hat geschrieben:@numerix Wie gesagt habe ich das bereits probiert
Hattest du eben nicht. :wink:
Wenn du DAS schon probiert hättest, hätte ich es nicht gepostet.

Verfasst: Donnerstag 29. Oktober 2009, 19:05
von hardez
@numerix
das war Reflex weil normalerweise so ein Post immer von jemandem kommt der den Text garnicht gelesen hat sondern erstma sagen möchte wie es allgemein geht... sorry...