Changeset 113

Show
Ignore:
Timestamp:
04/18/02 15:59:08 (7 years ago)
Author:
sholloway
Message:

Bugfixes, new features, ya know... ;)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBFoundation/RBFoundation/SmartSelect.py

    r102 r113  
    5757    """Base class for waiting upon a set of select.select able objects""" 
    5858 
     59    ProcessState = "Initial", None 
     60 
    5961    def Process(self, timeout=None): 
    6062        """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 
    6168        lstSelected = select.select(self.ReadList, self.WriteList, self.ErrorList, timeout) 
    6269 
    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() 
    6679 
     80        self.ProcessState = "Complete", None 
    6781        return (lstSelected[0] or lstSelected[1] or lstSelected[2]) and 1 or 0 
    6882 
  • trunk/RBSkinning/RBSkinning/XMLSkinner.py

    r100 r113  
    5656    _CachedElementFactories = {} 
    5757     
    58     def __init__(self, mapSupportedSkinNamespaces={}): 
     58    def __init__(self, mapSupportedSkinNamespaces={}, rootPath=''): 
     59        self.rootPath = rootPath 
    5960        XMLBuilder.__init__(self) 
    6061        self.SkinNamespaces = self.DefaultSkinNamespaces.copy() 
     
    7576            self._CachedElementFactories[(strModule, strClass)] = result 
    7677        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    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    77105 
    78106    def SkinFile(self, file, contextIn=None, **kwAddedContext): 
     
    81109            file = os.path.abspath(file) 
    82110            file = open(file, 'r') 
    83         else: rootPath = os.getcwd() 
     111        else: rootPath = self.rootPath or os.getcwd() 
     112 
    84113        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() 
    91115        self.context = SkinContext.SkinContext(contextIn) 
    92116        self.context.__skinner__ = weakref.ref(self) 
     
    94118        self.context.__dict__.update(kwAddedContext) 
    95119 
    96         try: 
    97             parser.ParseFile(file) 
    98         except ExpatError, info: 
    99             print "ExpatError:", info 
    100             print file 
    101             raise 
     120        parser.ParseFile(file) 
    102121 
    103122        self.context = None 
     
    105124        return result 
    106125  
     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   
    107138    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    108139 
     
    116147        else: rootPath = '' 
    117148 
    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() 
    124150        element.context.__skinner__ = weakref.ref(self) 
    125151        if rootPath: element.context.__root__ = rootPath 
    126152        element.context.__dict__.update(kwAddedContext) 
    127153 
    128         try: 
    129             parser.ParseFile(file) 
    130         except ExpatError, info: 
    131             print "ExpatError:", info 
    132             print file 
    133             raise 
     154        parser.ParseFile(file) 
    134155 
    135156        return self._LastCompleteElement 
    136   
     157 
  • trunk/RBSkinning/RBSkinning/__init__.py

    r66 r113  
    3434_skinnerDefault = _XMLSkinner() 
    3535SkinFile = _skinnerDefault.SkinFile 
     36SkinXML = _skinnerDefault.SkinXML 
  • trunk/RBSkinning/RBSkinning/xmlPython/PySkinObject.py

    r66 r113  
    3535#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3636 
     37import weakref 
    3738from types import ModuleType 
    3839from Foundation.Skinning.SkinObject import SkinObject  
     
    4344 
    4445class PySkinObject(SkinObject): 
     46    default_settings = SkinObject.default_settings.copy() 
     47    default_settings['phase'] = 'initialize' 
    4548    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 
    4666 
    4767    def AddNamespace(self, namespace): 
  • trunk/RBSkinning/RBSkinning/xmlPython/evaluate.py

    r66 r113  
    4343 
    4444class 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): 
    5746        code = ''.join(self.Content()) 
    5847        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  
    5050 
    5151class inline(PySkinObject): 
    52     def SkinFinalize(self): 
     52    default_settings = PySkinObject.default_settings.copy() 
     53    default_settings['phase'] = 'finalize' 
     54     
     55    def ExecuteXML(self): 
    5356        content = self.Content() 
    5457        trimWhitespace = '' 
     
    6063        execCode = '%s\n' % ''.join(content).replace('\n' + trimWhitespace, '\n') 
    6164        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  
    4949    def SkinInitialize(self): 
    5050        if self.settings['phase'] == 'initialize': 
    51             self._call() 
     51            self.object = self.ExecuteXML() 
    5252 
    5353    def SkinFinalize(self): 
    5454        if self.settings['phase'] == 'finalize': 
    55             self._call() 
     55            self.object = self.ExecuteXML() 
    5656 
    57     def _call(self): 
     57    def ExecuteXML(self): 
    5858        owner = getattr(self.context, self.settings['owner']) 
    5959        setattr(owner, self.settings['name'], self.parent().object) 
     60        return self.object 
    6061 
  • trunk/RBSkinning/RBSkinning/xmlPython/script.py

    r66 r113  
    4545class script(PySkinObject): 
    4646    default_settings = PySkinObject.default_settings.copy() 
    47     default_settings['phase'] = 'initialize' 
    4847    default_settings['args'] = '(self,)' 
    4948    default_settings['kw'] = '{}' 
    50      
    51     def SkinInitialize(self): 
    52         if self.settings['phase'] == 'initialize': 
    53             self._call() 
    5449 
    55     def SkinFinalize(self): 
    56         if self.settings['phase'] == 'finalize': 
    57             self._call() 
    58  
    59     def _call(self): 
     50    def ExecuteXML(self): 
    6051        if self.context.__root__ not in sys.path: 
    6152            sys.path.append(self.context.__root__) 
    6253        module = __import__(self.settings['module'], {}, {}, self.settings['call']) 
    6354        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  
    1111 
    1212skin = SkinFile(sys.argv[-1]) 
    13 skin.context.application.MainLoop() 
     13try: skin.context.application.MainLoop() 
     14except AttributeError: pass