File: itkLazy.py

package info (click to toggle)
insighttoolkit 3.20.1%2Bgit20120521-3
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 80,652 kB
  • sloc: cpp: 458,133; ansic: 196,223; fortran: 28,000; python: 3,839; tcl: 1,811; sh: 1,184; java: 583; makefile: 430; csh: 220; perl: 193; xml: 20
file content (26 lines) | stat: -rw-r--r-- 1,026 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import types, itkBase

not_loaded = 'not loaded'

class LazyITKModule(types.ModuleType):
  """Subclass of ModuleType that implements a custom __getattribute__ method
  to allow lazy-loading of attributes from ITK sub-modules."""
  def __init__(self, name, lazy_attributes):
    types.ModuleType.__init__(self, name)
    self.__lazy_attributes = lazy_attributes
    for k in lazy_attributes:
      setattr(self, k, not_loaded)
  def __getattribute__(self, attr):
    value = types.ModuleType.__getattribute__(self, attr)
    if value is not_loaded:
      module = self.__lazy_attributes[attr]
      namespace = {}
      itkBase.LoadModule(module, namespace)
      # Load into 'namespace' first, then self.__dict__ (via setattr) to 
      # prevent the warnings about overwriting the 'NotLoaded' values already 
      # in in self.__dict__ we would get if we just passed self.__dict__ to
      # itkBase.LoadModule.
      for k, v in namespace.items():
        setattr(self, k, v)
      value = namespace[attr]
    return value