axe
			  Янв. 26, 2010 13:36:44
		 	 
			
				Есть некоторые сущности, с которыми должны быть связаны функции проверки. Функции должны быть написаны на Python (т.к. будут запускаться в Python), содержимое функций должно храниться в базе, вместе с соответствующими сущностями.
Мне надо придумать способ, как эти функции хранить, создавать и отлаживать.
eval при попытке создания функции через def ругается.
			
		 
		
			
			  regall
			  Янв. 26, 2010 13:56:24
		 	 
			
				Первая мысль - сделать классы-проверщики и хранить их с помощью pickle.
P.S.
Для этого можно также посмотреть в коде фреймворка Zope2, там где-то используется хранение участков кода для последующего выполнения.
P.P.S.
А eval ругается потому что он не умеет, и нужно использовать exec. Хотя я, к примеру, такие аццкие хаки не люблю…
			
		 
		
			
			  Андрей Светлов
			  Янв. 26, 2010 14:19:58
		 	 
			
				PEP 302. Хранить - хоть в текстовом питоновском виде. Организовав кеш получившихся codeobject для скорости, если нужно (как питон делает с .py -> .pyc)
Отлаживать - еще проще. На время отладки подставлять файлы на диске, а в production эту дыру отключать.
			
		 
		
			
			  ZZZ
			  Янв. 26, 2010 14:30:13
		 	 
			
				Был тут один… 
Зачёса…
Пишет “симулятор всего”, пытаясь запихать весь игромех (вместе логикой, конечно) в реляцию.
Смотреть тут: 
http://www.elite-games.ru/conference/viewtopic.php?t=43530P.S. Только мозг от этого “креатива” не сломайте.
			
 
		
			
			  regall
			  Янв. 26, 2010 14:45:57
		 	 
			
				А, это тот который на нашем форуме агитировал с ним делать вселенную будущего? =)) ыыы
			
		 
		
			
			  ZZZ
			  Янв. 26, 2010 15:06:49
		 	 
			
				Ага… Редкий человек… Гений! Никто не понимает, того, что он хочет сделать! Даже Он сам.  :-D
			
		 
		
			
			  axe
			  Янв. 26, 2010 15:22:23
		 	 
			
				Андрей, я пробую читать по инету про PEP302, но пока не могу разобраться. Есть и ограничения в знании английского, и до Вашего уровня в python мне очень далеко. Если можно, ответьте чуть более подробно?
Видимо, надо копать в сторону модуля imp?
ZZZ, по ссылке посмотрел первые три страницы. По-моему, к теме не очень относится. Просмотреть все 58 страниц обсуждения не могу, т.к. ограничение трафика на рабочем месте. Может быть вечером взгляну.
			
		 
		
			
			  bw
			  Янв. 26, 2010 15:39:19
		 	 
			
				> eval при попытке создания функции через def ругается.
> и нужно использовать exec
__builtins__.compile(…) ?
Можно хранить (и при необходимости выполнять) и байт-код, но нужно следить за версией Python (в какой был этот код создан и в какой сейчас будет интерпретироваться). Я так поступал в детстве.
p.s. Хотя я не понял что требуется, наугад сказал :-).
..bw
			
		 
		
			
			  axe
			  Янв. 26, 2010 16:36:39
		 	 
			
				получается следующее:
BODY = """
class m(object):
    z = []
    def __init__(self):
        pass
def hello():
    print "hello"
"""
exec(compile(BODY, "<string>", "exec"))
hello()
print dir(m())
 
		
			
			  axe
			  Янв. 26, 2010 16:48:55
		 	 
			
				видимо и без compile всё работает:
exec("""
def hello():
    print "hello"
""")
hello()