from __future__ import absolute_import
from .base import Struct
import os.path as op
import six
##
# 16.06.2005, c
[docs]
class Reader( Struct ):
"""
Reads and executes a Python file as a script with execfile(), storing its
locals. Then sets the __dict__ of a new instance of obj_class to the stored
locals.
Example:
>>> class A:
>>> pass
>>> read = Reader( '.' )
>>> instance_of_a = read( A, 'file.py' )
It is equivalent to:
>>> mod = __import__( 'file' )
>>> instance_of_a = A()
>>> instance_of_a.__dict__.update( mod.__dict__ )
The first way does not create the 'file.pyc'...
"""
##
# 16.06.2005, c
def __init__( self, directory ):
self.directory = directory
##
# 16.06.2005, c
# 17.10.2005
# 09.02.2006
def __call__( self, obj_class, name ):
filename = op.join( self.directory, name + '.py' )
aux = {}
execfile( filename, {}, aux )
obj = obj_class()
for key, val in six.iteritems(aux):
obj.__dict__[key] = val
return obj