Хорошо. Я знаю, что это не совсем ответ, но, возможно, записка для людей, которые смотрят на это так, как я. Я хотел выполнить конкретный код для разных пользователей / клиентов, но также хотел избежать exec / eval. Сначала я искал сохранение кода в базе данных для каждого пользователя и делал это.
В итоге я создал файлы в файловой системе в папке «customer_filters» и использовал модуль «imp», если ни один фильтр не применяется для этого клиента, он просто переносится на
import imp
def get_customer_module(customerName='default', name='filter'):
lm = None
try:
module_name = customerName+"_"+name;
m = imp.find_module(module_name, ['customer_filters'])
lm = imp.load_module(module_name, m[0], m[1], m[2])
except:
''
#ignore, if no module is found,
return lm
m = get_customer_module(customerName, "filter")
if m is not None:
m.apply_address_filter(myobj)
, поэтому customerName = "jj" выполнит apply_address_filter из файла customer_filters \ jj_filter.py