home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_1951 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.1 KB  |  125 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import __builtin__
  5. import exceptions
  6. import pdb
  7. import pprint
  8. import re
  9. import types
  10. from IPython.genutils import dir2
  11.  
  12. def create_typestr2type_dicts(dont_include_in_type2type2str = [
  13.     'lambda']):
  14.     typenamelist = []
  15.     for tname in dir(types):
  16.         if tname[-4:] == 'Type':
  17.             typenamelist.append(tname)
  18.             continue
  19.     
  20.     typestr2type = { }
  21.     type2typestr = { }
  22.     for tname in typenamelist:
  23.         name = tname[:-4].lower()
  24.         obj = getattr(types, tname)
  25.         typestr2type[name] = getattr(types, tname)
  26.         if name in dont_include_in_type2type2str:
  27.             type2typestr[obj] = name
  28.             continue
  29.     
  30.     return (typestr2type, type2typestr)
  31.  
  32. (typestr2type, type2typestr) = create_typestr2type_dicts()
  33.  
  34. def is_type(obj, typestr_or_type):
  35.     if typestr_or_type == 'all':
  36.         return True
  37.     if type(typestr_or_type) == types.TypeType:
  38.         test_type = typestr_or_type
  39.     else:
  40.         test_type = typestr2type.get(typestr_or_type, False)
  41.     if test_type:
  42.         return isinstance(obj, test_type)
  43.     return False
  44.  
  45.  
  46. def show_hidden(str, show_all = False):
  47.     if not show_all and str.startswith('__'):
  48.         pass
  49.     return not str.startswith('_')
  50.  
  51.  
  52. class NameSpace(object):
  53.     
  54.     def __init__(self, obj, name_pattern = '*', type_pattern = 'all', ignore_case = True, show_all = True):
  55.         self.show_all = show_all
  56.         self.object = obj
  57.         self.name_pattern = name_pattern
  58.         self.type_pattern = type_pattern
  59.         self.ignore_case = ignore_case
  60.         if type(obj) == types.DictType:
  61.             self._ns = obj
  62.         else:
  63.             kv = []
  64.             for key in dir2(obj):
  65.                 if isinstance(key, basestring):
  66.                     
  67.                     try:
  68.                         kv.append((key, getattr(obj, key)))
  69.                     except AttributeError:
  70.                         pass
  71.                     except:
  72.                         None<EXCEPTION MATCH>AttributeError
  73.                     
  74.  
  75.                 None<EXCEPTION MATCH>AttributeError
  76.             
  77.             self._ns = dict(kv)
  78.  
  79.     
  80.     def get_ns(self):
  81.         return self.filter(self.name_pattern, self.type_pattern)
  82.  
  83.     ns = property(get_ns)
  84.     
  85.     def get_ns_names(self):
  86.         return self.ns.keys()
  87.  
  88.     ns_names = property(get_ns_names, doc = 'List of objects in name space that match the type and name patterns.')
  89.     
  90.     def filter(self, name_pattern, type_pattern):
  91.         
  92.         def glob_filter(lista, name_pattern, hidehidden, ignore_case):
  93.             pattern = name_pattern.replace('*', '.*').replace('?', '.')
  94.             if ignore_case:
  95.                 reg = re.compile(pattern + '$', re.I)
  96.             else:
  97.                 reg = re.compile(pattern + '$')
  98.             result = _[1]
  99.             return result
  100.  
  101.         ns = self._ns
  102.         all = [ (x, ns[x]) for x in glob_filter(ns.keys(), name_pattern, self.show_all, self.ignore_case) ]
  103.         all = _[2]
  104.         all = dict(all)
  105.         return all
  106.  
  107.  
  108.  
  109. def list_namespace(namespace, type_pattern, filter, ignore_case = False, show_all = False):
  110.     pattern_list = filter.split('.')
  111.     if len(pattern_list) == 1:
  112.         ns = NameSpace(namespace, name_pattern = pattern_list[0], type_pattern = type_pattern, ignore_case = ignore_case, show_all = show_all)
  113.         return ns.ns
  114.     ns = NameSpace(namespace, name_pattern = pattern_list[0], type_pattern = 'all', ignore_case = ignore_case, show_all = show_all)
  115.     res = { }
  116.     nsdict = ns.ns
  117.     for name, obj in nsdict.iteritems():
  118.         ns = list_namespace(obj, type_pattern, '.'.join(pattern_list[1:]), ignore_case = ignore_case, show_all = show_all)
  119.         for inner_name, inner_obj in ns.iteritems():
  120.             res['%s.%s' % (name, inner_name)] = inner_obj
  121.         
  122.     
  123.     return res
  124.  
  125.