home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / checkbox / registry.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  8.0 KB  |  217 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import re
  5. from checkbox.lib.cache import cache
  6. from checkbox.component import ComponentManager
  7. from checkbox.properties import String
  8.  
  9. class Registry(object):
  10.     '''
  11.     Registry base class which should be inherited by each registry
  12.     implementation. This class basically provides methods to represent
  13.     the items in the registry as attributes. If some items cannot
  14.     be represented as attributes, if there are spaces in the name
  15.     for example, this class also provides methods to reprent them as
  16.     dictionary elements.
  17.     '''
  18.     _id = 0
  19.     user = String(required = False)
  20.     
  21.     def __init__(self):
  22.         super(Registry, self).__init__()
  23.         self.id = Registry._id
  24.         Registry._id += 1
  25.  
  26.     
  27.     def __str__(self):
  28.         raise NotImplementedError, 'this function must be overridden by subclasses'
  29.  
  30.     
  31.     def __getattr__(self, name):
  32.         return self.get(name)
  33.  
  34.     
  35.     def split(self, *args, **kwargs):
  36.         return str(self).split(*args, **kwargs)
  37.  
  38.     
  39.     def items(self):
  40.         raise NotImplementedError, 'this function must be overridden by subclasses'
  41.  
  42.     
  43.     def get(self, key, default = None):
  44.         
  45.         try:
  46.             return self.__getitem__(key)
  47.         except KeyError:
  48.             if default == None:
  49.                 NoneRegistry = NoneRegistry
  50.                 import checkbox.registries.none
  51.                 return NoneRegistry()
  52.             return default
  53.         except:
  54.             default == None
  55.  
  56.  
  57.     
  58.     def has_key(self, key):
  59.         return key in self.keys()
  60.  
  61.     
  62.     def iteritems(self):
  63.         for k, v in self.items():
  64.             yield (k, v)
  65.         
  66.  
  67.     
  68.     def iterkeys(self):
  69.         LinkRegistry = LinkRegistry
  70.         import checkbox.registries.link
  71.         for k, v in self.items():
  72.             if not isinstance(v, LinkRegistry):
  73.                 yield k
  74.                 continue
  75.         
  76.  
  77.     
  78.     def keys(self):
  79.         return list(self.iterkeys())
  80.  
  81.     
  82.     def itervalues(self):
  83.         LinkRegistry = LinkRegistry
  84.         import checkbox.registries.link
  85.         for k, v in self.items():
  86.             if not isinstance(v, LinkRegistry):
  87.                 yield v
  88.                 continue
  89.         
  90.  
  91.     
  92.     def values(self):
  93.         return list(self.itervalues())
  94.  
  95.     
  96.     def clear(self):
  97.         raise Exception, 'Cannot call clear on registry.'
  98.  
  99.     
  100.     def setdefault(self, key, default = None):
  101.         raise Exception, 'Cannot call setdefault on registry.'
  102.  
  103.     
  104.     def __cmp__(self, foreign):
  105.         local = set(self.items())
  106.         foreign = set(foreign.items())
  107.         if local == foreign:
  108.             return 0
  109.         if local < foreign:
  110.             return -1
  111.         return 1
  112.  
  113.     
  114.     def __contains__(self, key):
  115.         return key in self.keys()
  116.  
  117.     
  118.     def __len__(self):
  119.         return len(self.keys())
  120.  
  121.     
  122.     def __getitem__(self, key):
  123.         for k, v in self.items():
  124.             if k == key:
  125.                 return v
  126.         
  127.         raise KeyError
  128.  
  129.     
  130.     def __setitem__(self, key, value):
  131.         raise Exception, 'Cannot set setitem on registry.'
  132.  
  133.     
  134.     def __delitem__(self, key):
  135.         raise Exception, 'Cannot call delitem on registry.'
  136.  
  137.     
  138.     def update(self, foreign):
  139.         raise Exception, 'Cannot call update on registry.'
  140.  
  141.  
  142.  
  143. class RegistryManager(ComponentManager, Registry):
  144.     '''
  145.     Registry manager which is essentially the root of the registry
  146.     tree. The first level in this tree consists of the module names
  147.     which have been loaded from the registries configuration parameter.
  148.     '''
  149.     
  150.     def items(self):
  151.         items = []
  152.         registries = self._config.get_defaults().registries
  153.         section_names = re.split('\\s+', registries)
  154.         for section_name in section_names:
  155.             section = self.load_section(section_name)
  156.             for name in section.get_names():
  157.                 module = section.load_module(name)
  158.                 items.append((name, module))
  159.             
  160.         
  161.         return items
  162.  
  163.     items = cache(items)
  164.  
  165.  
  166. def registry_flatten(registry):
  167.     
  168.     def get_properties(properties, key, value):
  169.         if isinstance(value, Registry):
  170.             for dict_key, dict_value in value.items():
  171.                 get_properties(properties, '.'.join([
  172.                     key,
  173.                     dict_key]), dict_value)
  174.             
  175.         else:
  176.             properties[key] = value
  177.  
  178.     properties = { }
  179.     for key, value in registry.items():
  180.         get_properties(properties, key, value)
  181.     
  182.     return properties
  183.  
  184.  
  185. def registry_eval(registry, source):
  186.     
  187.     try:
  188.         return eval(source, { }, registry)
  189.     except Exception:
  190.         return False
  191.  
  192.  
  193.  
  194. def registry_eval_recursive(registry, source, mask = [
  195.     False]):
  196.     values = []
  197.     value = registry_eval(registry, source)
  198.     if type(value) in (bool, int) and value:
  199.         values.append(registry)
  200.         mask[0] = True
  201.     elif type(value) is tuple and True in value:
  202.         for i in range(len(value)):
  203.             if value[i] is True or i >= len(mask):
  204.                 mask[i:i + 1] = [
  205.                     value[i]]
  206.                 continue
  207.         
  208.         values.append(registry)
  209.     
  210.     for key, value in registry.items():
  211.         if isinstance(value, Registry):
  212.             values.extend(registry_eval_recursive(value, source, mask))
  213.             continue
  214.     
  215.     return values
  216.  
  217.