4540lR5txt

Listing 5. Detecting and Installing Mix-ins Named after Their Classes

from MixIn import MixIn
from glob import glob
import os


def MixInDir(dir):
    ''' Installs mix-ins found in the given directory. Each mix-in is
          expected to match the name of a class in our domain classes. '''

    path = os.path.join(basePath, '*.py')
    for filename in glob(path):

          dirname, name = os.path.split(filename)
          name = os.path.splitext(name)[0]

          # Get the real class
          module = __import__(name)
          pyClass = getattr(module, name)

          # Get the mix-in class
          results = {}
          exec open(filename) in results
          mixInClass = results[name]

          # Mix it in
          MixIn(pyClass, mixInClass)