2017-03-01 1 views
0

J'ai créé la fonction de python pour rechercher à travers un objet ldap comme ci-dessous:Comment convertir un objet ldap en entier dans une fonction python?

def my_search(l, baseDN, searchScope=ldap.SCOPE_ONELEVEL, searchFilter="objectClass=*", retrieveAttributes=None): 
    logger.console("Reachedhere") 
    try: 
     logger.console("Reachedhereinsidetry\n") 
     ldap_result_id =  l.search_s(baseDN,searchScope,searchFilter,retrieveAttributes) 
     logger.console("Gotresult\n") 

J'invoquons ce mot-clé maintenant dans un Testcase Robot comme si:

*** Settings *** 
Documentation  This testsuite checks the LDAP functionalities of DB nodes. 
Resource   ../../COMMON/Libraries/SDL-DB-COMMON-LIB.txt 
Library   ../../COMMON/Libraries/pythonldap.py 

*** Test Cases *** 
Perform Ldap Operations 
    ${ldapObj} ldapopen ${DB_1_EXT_APP_IP} 
    Log to Console ${ldapObj} 
    ${SearchReturn} my_search ${ldapObj} "uid=5000000,ds=CRIBER,o=D,dc=CN" ldap.SCOPE_ONELEVEL "objectClass=*" None 

Quand je lance ce comité technique, il me jette une erreur dans la recherche comme ceci:

TypeError: an integer is required 

l'erreur est sans aucun doute dans « ldap_result_id = l.search_s (baseDN, SearchScope, Filtre de recherche, récupérer Attributes) "ligne, puisque je suis capable d'imprimer les commentaires précédents.

Quel est le problème ici?

Le problème ici est le niveau d'étendue qui ne peut pas être passé comme ci-dessus de Robot. Les changements que j'ai été:

def my_search(l, baseDN, searchScopeLevel, searchFilter="objectClass=*", retrieveAttributes=None): 
try: 
    if searchScopeLevel == 'ONE': 
     searchScope=ldap.SCOPE_ONELEVEL 
    elif searchScopeLevel == 'BASE': 
     searchScope=ldap.SCOPE_BASE 
    elif searchScopeLevel == 'SUB': 
     searchScope=ldap.SCOPE_SUBTREE 
    ldap_result_id = l.search(baseDN,searchScope,searchFilter,retrieveAttributes) 

Robot TC Changements:

*** Test Cases *** 
Perform Ldap Operations 
    ${ldapObj} ldapopen ${DB_1_EXT_APP_IP} 
    ${SearchReturn} my_search ${ldapObj}  uid=205000000,ds=CRIBER,o=DEFT,dc=C ONE objectClass=* 

Et le problème est résolu. :)

+0

Veuillez donner quelques détails, à tout le moins où jette-t-il l'erreur - deviner, dans le mot-clé my_search. Va tirer une réponse avec les problèmes évidents en raison de la limite de char ici, mais avec ce niveau de détail, c'est une conjecture sauvage. – Todor

Répondre

1

En supposant que l'exception est levée dans la méthode my_search - par défaut les arguments des méthodes dans RF sont castés en chaîne. Ainsi cet appel:

${SearchReturn} my_search ${ldapObj} "uid=2620105000000,ds=SUBSCRIBER,o=DEFAULT,dc=C-NTDB" ldap.SCOPE_ONELEVEL "objectClass=*" None 

a un certain nombre de questions:

  • l'argument baseDN aura une valeur réelle "uid=2620105000000,ds=SUBSCRIBER,o=DEFAULT,dc=C-NTDB" - à savoir avec les guillemets inclus, donc probablement pas ce que vous visez pour; retirez-les
  • même pour la searchFilter - supprimer les citations dans l'appel
  • le searchScope, ce qui est probablement votre problème, recevra la valeur ldap.SCOPE_ONELEVEL - une chaîne avec ce contenu. C'est probablement une constante définie dans votre module LDAP; le pari le plus sûr que cela fonctionnera est de fournir la valeur entière de ce que les constants sont donnés dans le format ${1}, mais ce n'est guère soutenable. Peut-être vous pourriez l'exporter et les autres constantes dans la bibliothèque COMMON/Libraries/pythonldap.py, et l'utiliser dans les cas de test
  • enfin, l'argument retrieveAttributes recevra la chaîne littérale "None", pas le type de données None que vous voulez probablement; pour l'obtenir, utilisez cette variable intégrée RF - ${None}

HTH, et encore - fournir plus de détails pour recevoir des réponses sur place.

+0

Merci @Todor. Le problème était dans ldap.SCOPE_ONELEVEL. Je ne peux pas passer cela directement à partir de Robot testcase. Il jette cette erreur. Donc ce que j'ai fait, c'est que j'ai passé un ONE de Robot TC, puis j'ai modifié la fonction python pour choisir ldap.SCOPE_ONELEVEL. Mise à jour dans le message original. – Arpitha

+0

C'est une solution viable, génial :) – Todor