Changeset 113
- Timestamp:
- 04/18/02 15:59:08 (7 years ago)
- Files:
-
- trunk/RBFoundation/RBFoundation/SmartSelect.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/XMLSkinner.py (modified) (6 diffs)
- trunk/RBSkinning/RBSkinning/__init__.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/xmlPython/PySkinObject.py (modified) (2 diffs)
- trunk/RBSkinning/RBSkinning/xmlPython/evaluate.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/xmlPython/inline.py (modified) (2 diffs)
- trunk/RBSkinning/RBSkinning/xmlPython/obj_variable.py (modified) (1 diff)
- trunk/RBSkinning/RBSkinning/xmlPython/script.py (modified) (1 diff)
- trunk/RBSkinning/support/scripts/ShowSkin.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBFoundation/RBFoundation/SmartSelect.py
r102 r113 57 57 """Base class for waiting upon a set of select.select able objects""" 58 58 59 ProcessState = "Initial", None 60 59 61 def Process(self, timeout=None): 60 62 """Uses select.select to wait on several file (proxy) handles in an object-oriented way.""" 63 if not self: 64 self.ProcessState = "Idle", None 65 return 0 66 67 self.ProcessState = "Waiting", None 61 68 lstSelected = select.select(self.ReadList, self.WriteList, self.ErrorList, timeout) 62 69 63 for each in lstSelected[0]: each._ProcessRead() 64 for each in lstSelected[1]: each._ProcessWrite() 65 for each in lstSelected[2]: each._ProcessError() 70 for each in lstSelected[0]: 71 self.ProcessState = "Read", each 72 each._ProcessRead() 73 for each in lstSelected[1]: 74 self.ProcessState = "Write", each 75 each._ProcessWrite() 76 for each in lstSelected[2]: 77 self.ProcessState = "Error", each 78 each._ProcessError() 66 79 80 self.ProcessState = "Complete", None 67 81 return (lstSelected[0] or lstSelected[1] or lstSelected[2]) and 1 or 0 68 82 trunk/RBSkinning/RBSkinning/XMLSkinner.py
r100 r113 56 56 _CachedElementFactories = {} 57 57 58 def __init__(self, mapSupportedSkinNamespaces={}): 58 def __init__(self, mapSupportedSkinNamespaces={}, rootPath=''): 59 self.rootPath = rootPath 59 60 XMLBuilder.__init__(self) 60 61 self.SkinNamespaces = self.DefaultSkinNamespaces.copy() … … 75 76 self._CachedElementFactories[(strModule, strClass)] = result 76 77 return result 78 79 def _PreParse(self): 80 parser = ParserCreate('ASCII', self._seperator) 81 parser.returns_unicode = 0 82 parser.StartElementHandler = BindCallable(self._start_element) 83 parser.EndElementHandler = BindCallable(self._end_element) 84 parser.CharacterDataHandler = BindCallable(self._char_data) 85 return parser 86 87 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 88 89 def SkinXML(self, xml, contextIn=None, **kwAddedContext): 90 rootPath = self.rootPath or os.getcwd() 91 self._elements, self._LastCompleteElement = [], None 92 parser= self._PreParse() 93 self.context = SkinContext.SkinContext(contextIn) 94 self.context.__skinner__ = weakref.ref(self) 95 self.context.__root__ = rootPath 96 self.context.__dict__.update(kwAddedContext) 97 98 parser.Parse(xml) 99 100 self.context = None 101 result, self._LastCompleteElement = self._LastCompleteElement, None 102 return result 103 104 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 77 105 78 106 def SkinFile(self, file, contextIn=None, **kwAddedContext): … … 81 109 file = os.path.abspath(file) 82 110 file = open(file, 'r') 83 else: rootPath = os.getcwd() 111 else: rootPath = self.rootPath or os.getcwd() 112 84 113 self._elements, self._LastCompleteElement = [], None 85 parser = ParserCreate('ASCII', self._seperator) 86 parser.returns_unicode = 0 87 parser.StartElementHandler = BindCallable(self._start_element) 88 parser.EndElementHandler = BindCallable(self._end_element) 89 parser.CharacterDataHandler = BindCallable(self._char_data) 90 114 parser= self._PreParse() 91 115 self.context = SkinContext.SkinContext(contextIn) 92 116 self.context.__skinner__ = weakref.ref(self) … … 94 118 self.context.__dict__.update(kwAddedContext) 95 119 96 try: 97 parser.ParseFile(file) 98 except ExpatError, info: 99 print "ExpatError:", info 100 print file 101 raise 120 parser.ParseFile(file) 102 121 103 122 self.context = None … … 105 124 return result 106 125 126 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 127 128 def _SkinXMLFromTopElement(self, xml, kwAddedContext): 129 element = self._elements[-1] 130 parser= self._PreParse() 131 element.context.__skinner__ = weakref.ref(self) 132 element.context.__dict__.update(kwAddedContext) 133 134 parser.Parse(xml) 135 136 return self._LastCompleteElement 137 107 138 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 108 139 … … 116 147 else: rootPath = '' 117 148 118 parser = ParserCreate('ASCII', self._seperator) 119 parser.returns_unicode = 0 120 parser.StartElementHandler = BindCallable(self._start_element) 121 parser.EndElementHandler = BindCallable(self._end_element) 122 parser.CharacterDataHandler = BindCallable(self._char_data) 123 149 parser= self._PreParse() 124 150 element.context.__skinner__ = weakref.ref(self) 125 151 if rootPath: element.context.__root__ = rootPath 126 152 element.context.__dict__.update(kwAddedContext) 127 153 128 try: 129 parser.ParseFile(file) 130 except ExpatError, info: 131 print "ExpatError:", info 132 print file 133 raise 154 parser.ParseFile(file) 134 155 135 156 return self._LastCompleteElement 136 157 trunk/RBSkinning/RBSkinning/__init__.py
r66 r113 34 34 _skinnerDefault = _XMLSkinner() 35 35 SkinFile = _skinnerDefault.SkinFile 36 SkinXML = _skinnerDefault.SkinXML trunk/RBSkinning/RBSkinning/xmlPython/PySkinObject.py
r66 r113 35 35 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 36 36 37 import weakref 37 38 from types import ModuleType 38 39 from Foundation.Skinning.SkinObject import SkinObject … … 43 44 44 45 class PySkinObject(SkinObject): 46 default_settings = SkinObject.default_settings.copy() 47 default_settings['phase'] = 'initialize' 45 48 namespace = {} 49 50 def SkinInitialize(self): 51 if self.settings['phase'] == 'initialize': 52 self.object = self.ExecuteXML() 53 54 def SkinFinalize(self): 55 if self.settings['phase'] == 'finalize': 56 self.object = self.ExecuteXML() 57 58 def ExecuteXML(self): 59 return None 60 61 def _getLocals(self): 62 result = {'self': weakref.proxy(self)} 63 if self.parent(): 64 result['parentObj'] = self.parent().object 65 return result 46 66 47 67 def AddNamespace(self, namespace): trunk/RBSkinning/RBSkinning/xmlPython/evaluate.py
r66 r113 43 43 44 44 class evaluate(PySkinObject): 45 default_settings = PySkinObject.default_settings.copy() 46 default_settings['phase'] = 'initialize' 47 48 def SkinInitialize(self): 49 if self.settings['phase'] == 'initialize': 50 self._call() 51 52 def SkinFinalize(self): 53 if self.settings['phase'] == 'finalize': 54 self._call() 55 56 def _call(self): 45 def ExecuteXML(self): 57 46 code = ''.join(self.Content()) 58 47 if not code.strip(): code = self.settings['code'] 59 self.object = eval(code, self.namespace, {'self': weakref.proxy(self), 'parentObj':self.parent().object})60 48 return eval(code, self.namespace, self._getLocals()) 49 trunk/RBSkinning/RBSkinning/xmlPython/inline.py
r66 r113 50 50 51 51 class inline(PySkinObject): 52 def SkinFinalize(self): 52 default_settings = PySkinObject.default_settings.copy() 53 default_settings['phase'] = 'finalize' 54 55 def ExecuteXML(self): 53 56 content = self.Content() 54 57 trimWhitespace = '' … … 60 63 execCode = '%s\n' % ''.join(content).replace('\n' + trimWhitespace, '\n') 61 64 self.object = compile(execCode, 'xmlPython.inline', 'exec') 62 exec self.object in self.namespace, {'self': weakref.proxy(self), 'parentObj':self.parent().object} 63 64 65 exec self.object in self.namespace, self._getLocals() 66 return self.object trunk/RBSkinning/RBSkinning/xmlPython/obj_variable.py
r66 r113 49 49 def SkinInitialize(self): 50 50 if self.settings['phase'] == 'initialize': 51 self. _call()51 self.object = self.ExecuteXML() 52 52 53 53 def SkinFinalize(self): 54 54 if self.settings['phase'] == 'finalize': 55 self. _call()55 self.object = self.ExecuteXML() 56 56 57 def _call(self):57 def ExecuteXML(self): 58 58 owner = getattr(self.context, self.settings['owner']) 59 59 setattr(owner, self.settings['name'], self.parent().object) 60 return self.object 60 61 trunk/RBSkinning/RBSkinning/xmlPython/script.py
r66 r113 45 45 class script(PySkinObject): 46 46 default_settings = PySkinObject.default_settings.copy() 47 default_settings['phase'] = 'initialize'48 47 default_settings['args'] = '(self,)' 49 48 default_settings['kw'] = '{}' 50 51 def SkinInitialize(self):52 if self.settings['phase'] == 'initialize':53 self._call()54 49 55 def SkinFinalize(self): 56 if self.settings['phase'] == 'finalize': 57 self._call() 58 59 def _call(self): 50 def ExecuteXML(self): 60 51 if self.context.__root__ not in sys.path: 61 52 sys.path.append(self.context.__root__) 62 53 module = __import__(self.settings['module'], {}, {}, self.settings['call']) 63 54 call = getattr(module, self.settings['call']) 64 args = eval(self.settings['args'], self.namespace, {'self':weakref.proxy(self), 'parentObj':self.parent().object}) 65 kw = eval(self.settings['kw'], self.namespace, {'self':weakref.proxy(self), 'parentObj':self.parent().object}) 66 self.object = apply(call, args, kw) 67 55 args = eval(self.settings['args'], self.namespace, self._getLocals()) 56 kw = eval(self.settings['kw'], self.namespace, self._getLocals()) 57 return apply(call, args, kw) trunk/RBSkinning/support/scripts/ShowSkin.py
r70 r113 11 11 12 12 skin = SkinFile(sys.argv[-1]) 13 skin.context.application.MainLoop() 13 try: skin.context.application.MainLoop() 14 except AttributeError: pass
