Warm tip: This article is reproduced from stackoverflow.com, please click
function ldap python-3.x

Python ldap3 print entries based on variable

发布于 2020-04-03 23:44:01

I am new to Python, stupid question ahead

I need to compare the entries from a MySQL database with ldap. I created a dictionary to hold the corresponding values, when I try to loop through the dictionary and pass them to ldap3 entries to show the results it takes the variable as literal.

for x in values_dict:
    value2=values_dict[x]
    try:
        ldap_conn.entries[0].value2
    except Exception as error:
        print(error)
    else:
        print(value2)

attribute 'value2' not found

If I replace value2 with 'sn' or any of the other attributes I have pulled it works fine. I have also played around with exec() but this returns nothing.

for x in values_dict:
    value2=values_dict[x]
    test1='ldap_conn.entries[0].{}'.format(value2)
    try:
        result1=exec(test1)
    except Exception as error:
        print(error)
    else:
        print(result1)
None

Any ideas?

EDIT 1 : As requested here are the values for values_dict. As stated previously the loop does parse these correctly, ldap does return the attributes, but when I try to use a variable to lookup the attributes from entries the variable is taken literally.

values_dict = {
        "First_Name": "givenname",
        "Middle_Name": "middlename",
        "Last_Name": "sn",
        "Preferred_Name": "extensionattribute2",
        "Work_Location": "physicaldeliveryofficename",
        "Work_City": "l",
        "Work_State": "st",
        "Work_Postal": "postalcode",
        "Work_Email": "mail"
        }
Questioner
TurboAAA
Viewed
69
larsks 2020-01-31 20:44

The syntax somevariable.someattr, which you are using here:

ldap_conn.entries[0].value2

Always means "access an attribute named someattr of somevariable". It's always interpreted as a literal string. If you need to dynamically access an attribute, use the getattr function:

getattr(ldap_conn.entries[0], value2)

You're not currently assigning that that result anywhere, so you probably want something like:

result1 = getattr(ldap_conn.entries[0], value2)