2015-10-20 2 views
0

У меня есть файл постоянных переменных, которые мне нужно запросить, и я не уверен, как это сделать. У меня есть запрос базы данных, который возвращает имена пользователей, и мне нужно найти соответствующее имя пользователя в файле постоянных переменных.Python - Получение атрибутов из файла констант

файл выглядит следующим образом:

SALES_MANAGER_01 = {"user_name": "BO01", "password": "password", "attend_password": "BO001", 
        "csm_password": "SM001", "employee_num": "BOSM001"} 

Существует только куча пользователей, как показано выше. Моя функция выглядит следующим образом:

@attr("user_test") 
def test_get_user_for_login(self): 
    application_code = 'BO' 
    user_from_view = self.select_user_for_login(application_code=application_code) 
    users = [d['USER'] for d in user_from_view] 
    user_with_ent = choice(users) 
    user_wo_ent = user_with_ent[-4:] 
    password = "" 
    global_users = dir(gum) 
    for item in global_users: 
     if user_wo_ent not in item.__getattr__("user_name"): 
      user_with_ent = choice(users) 
      user_wo_ent = user_with_ent[-4:] 
     else: 
      password = item.__getattr__("password") 
    print(user_wo_ent, password) 

global_users = dir(gum) мой файл констант. Поэтому я знаю, что делаю что-то неправильно, так как получаю ошибку атрибута AttributeError: 'str' object has no attribute '__getattr__', я просто не уверен, как это решить.

ответ

0

Вы должны перевернуть свой цикл, как хотите сравнить каждый item с вашим соответствием. Кроме того, у вас есть словарь, поэтому используйте его, чтобы сделать тяжелый подъем.

Вам нужно добавить импорт

import re 
from ast import literal_eval 

Я изменил dir(gum) немного, чтобы быть эта функция.

def get_global_users(filename): 
    gusers = {} # create a global users dict 
    p_key = re.compile(ur'\b\w*\b') # regex to get first part, e.g.. SALES_MANAGER_01 
    p_value = re.compile(ur'\{.*\}') # regex to grab everything in {} 
    with (open(filename)) as f: # open the file and work through it 
     for line in f: # for each line 
      gum_key = p_key.match(line) # pull out the key 
      gum_value = p_value.search(line) # pull out the value 
      ''' Here is the real action. update a dictionary 
      with the match of gum_key and with match of gum_value''' 
      gusers[gum_key.group()] = literal_eval(gum_value.group()) 
    return(gusers) # return the dictionary 

Нижняя часть существующего кода заменяется на это.

global_users = get_global_users(gum) # assign return to global_users 
for key, value in global_users.iteritems(): # walk through all key, value pairs 
    if value['user_name'] != user_wo_ent: 
     user_with_ent = choice(users) 
     user_wo_ent = user_with_ent[-4:] 
    else: 
     password = value['password'] 
+0

Спасибо, теперь я получаю 'TypeError: строковые индексы должны быть целыми числами', так как строка' dir (gum) 'возвращает только имена констант, а не значения. – DarthOpto

+0

Спасибо @ShawnMehan, похоже, это сработает. Могу ли я поместить файл .py через 'get_global_users'? Я получаю эту ошибку: 'TypeError: недопустимый файл: ' – DarthOpto

+0

DarthOpto, ваш вопрос продолжает морфировать. Вам либо нужно задать новый вопрос, либо изменить его. Если я ответил на ваш первоначальный вопрос, отметьте это как принято. –

0

Так очень простой ответ был получить dir констант файла затем разбор над ним, как так:

global_users = dir(gum) 
for item in global_users: 
    o = gum.__dict__[item] 
    if type(o) is not dict: 
     continue 
    if gum.__dict__[item].get("user_name") == user_wo_ent: 
     print(user_wo_ent, o.get("password")) 
    else: 
     print("User was not in global_user_mappings") 
0

я смог найти ответ, выполнив следующие действия:

def get_user_for_login(application_code='BO'): 
user_from_view = BaseServiceTest().select_user_for_login(application_code=application_code) 
users = [d['USER'] for d in user_from_view] 
user_with_ent = choice(users) 
user_wo_ent = user_with_ent[4:] 
global_users = dir(gum) 
user_dict = {'user_name': '', 'password': ''} 
for item in global_users: 
    o = gum.__dict__[item] 
    if type(o) is not dict: 
     continue 
    if user_wo_ent == o.get("user_name"): 
     user_dict['user_name'] = user_wo_ent 
     user_dict['password'] = o.get("password") 
return user_dict 
Смежные вопросы