about recursive load

Michel Perez opsbat at infomed.sld.cu
Thu Oct 30 00:22:29 EDT 2008


Hi, am very newbie in Python, but as part of a project i need to load
configuration -a settings.py file in the package dir- of my apps
recursively, something like this:

settings.load_config("project.test.app")
settings.load_config("project.test.*")
settings.load_config("project.test")
settings.load_config("*")

this allows me to load them as:

settings.project.CONFIG_PARAMETER_1      # project configuration
settings.project.test.CONFIG_PARAMETER_1 # sub project

and so on.
This it's what i've done, 

class Settings:
  def __getattr__( self,  attr):
    return self.__dict__['flags'][attr]
      
  def __setattr__(self,  attr,  value):
    self.__dict__['flags'][attr]=value
      
  def __init__(self, package = None,  parent = None):
    self.__package = package
    self.__parent = None
    self.__dict__['flags']={}

  def get_parent ( self):
    return self.__parent

  def create_config_structure( self, pkg, parent = None ):
    # ... assuming no error and all that
    if pkg.count(".") > 0:
      if parent is None:
        if not self.__dict__['flags'].has_key(pkg[:pkg.find(".")]):
          father=self.__dict__['flags'][pkg]=Settings( \
			pkg[:pkg.find(".")],self)
        else:
          father = parent
      else:
        if not parent.__dict__['flags'].has_key(pkg[:pkg.find(".")]):
          father=parent.__dict__['flags'][pkg[:pkg.find(".")]]= \
			Settings(pkg[:pkg.find(".")],  parent)
        else:
         father = parent
      self.create_config_structure( pkg [pkg.find(".")+1:],father)
    else:
      if not parent.__dict__['flags'].has_key:
        parent.__dict__['flags'][pkg]=Settings(pkg,parent)
      return parent.__dict__['flags'][pkg]
    
  def load_config ( self, pkg= None ):
    config_module_object = self.create_config_structure( pkg )

    # the loading configuration part
    try:
      if pkg is not None:
        mod = __import__( pkg + ".settings", {},{},[''])
      else:
        mod = __import__( "settings", {},{},[''])
    except:
      raise ImportError("Settings not found")     

    data={}
    for setting in dir(mod):
      if setting == setting.upper():
        data[setting]=getattr(mod, setting)  

    for key in data:
      if pkg is not None:
        setattr( config_module_object.__dict__['flags'], key, data[key])
      else:
        setattr(self.__dict__['flags'], key, data[key])

Any idea it's welcome


---------------------------------------
    Red Telematica de Salud - Cuba
    	  CNICM - Infomed



More information about the Python-list mailing list