Changeset 280

Show
Ignore:
Timestamp:
09/08/02 01:56:25 (6 years ago)
Author:
sholloway
Message:

Optimized a lot of code using the Python 2.3 profiler and some instrumented tests.
Moved BaseObjectifiedXML's getattribute into ObjectifiedXML for speed reasons

Files:

Legend:

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

    r257 r280  
    5959 
    6060    def AdviseBefore(self, obj, name, *args, **kw): 
    61         try: Method = self.AdviseMethods['before'] 
    62         except KeyError: pass 
    63         else: return Method(obj, name, *args, **kw) 
     61        if 'before' in self.AdviseMethods: 
     62            return self.AdviseMethods['before'](obj, name, *args, **kw) 
    6463 
    6564    def AdviseAfter(self, obj, name, result, *args, **kw): 
    66         try: Method = self.AdviseMethods['after'] 
    67         except KeyError: return result 
    68         else: return Method(obj, name, result, *args, **kw) 
     65        if 'after' in self.AdviseMethods: 
     66            return self.AdviseMethods['after'](obj, name, result, *args, **kw) 
     67        else: return result 
    6968 
    7069    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    113112 
    114113    def __call__(self, *args, **kw): 
    115         try: BeforeMethod = self.advice.AdviseMethods['before'] 
    116         except KeyError: pass 
    117         else: BeforeMethod(self.obj, *args, **kw) 
     114        BeforeMethod = self.advice.AdviseMethods.get('before') 
     115        if BeforeMethod is not None: BeforeMethod(self.obj, *args, **kw) 
    118116 
    119117        result = self.method(*args, **kw) 
    120118 
    121         try: AfterMethod = self.advice.AdviseMethods['after'] 
    122         except KeyError: pass 
    123         else: AfterMethod(self.obj, result, *args, **kw) 
     119        AfterMethod = self.advice.AdviseMethods.get('after') 
     120        if AfterMethod is not None: AfterMethod(self.obj, result, *args, **kw) 
    124121 
    125122        return result 
  • trunk/RBFoundation/RBFoundation/ChainedDict.py

    r253 r280  
    3636 
    3737    def SetChained(self, chained): 
    38         if chained is not None: 
    39             self.chained = chained 
    40         else: self.chained = {} 
     38        self.chained = chained or {} 
    4139         
    4240    def GetChained(self): 
     
    4846 
    4947    def __init__(self, data=None, chained=None): 
    50         if data is not None: 
    51             self.source = data 
    52         else: self.source = {} 
    53         self.SetChained(chained) 
     48        self.source = data or {} 
     49        self.chained = chained or {} 
    5450 
    5551    def __contains__(self, obj):  
    5652        return self.source.__contains__(obj) or self.chained.__contains__(obj) 
    5753     
    58     def __getitem__(self, *args, **kw):  
    59         try: 
    60             return self.source.__getitem__(*args, **kw) 
    61         except KeyError: 
    62             return self.chained.__getitem__(*args, **kw) 
     54    def __getitem__(self, key): 
     55        if key in self.source: 
     56            return self.source[key] 
     57        else: return self.chained[key] 
    6358 
    6459    def __setitem__(self, *args, **kw):  
     
    7570 
    7671    def get(self, key, *args):  
    77         try: 
    78             return self.source.__getitem__(key) 
    79         except KeyError: 
    80             return self.chained.get(key, *args) 
     72        if key in self.source: 
     73            return self.source[key] 
     74        else: return self.chained.get(key, *args) 
    8175 
    8276    def clear(self, *args, **kw):  
  • trunk/RBFoundation/RBFoundation/ContextApply.py

    r253 r280  
    7373    """ 
    7474    def __call__(self, *args, **kw): 
    75         return self._DoCall(args + self.args, _JoinKW(kw, self.kw)) 
     75        return self._DoCall(*(args + self.args), **_JoinKW(kw, self.kw)) 
    7676 
    7777class ContextApply_s_p_mixin(object): 
     
    8181    """ 
    8282    def __call__(self, *args, **kw): 
    83         return self._DoCall(self.args + args, _JoinKW(self.kw, kw)) 
     83        return self._DoCall(*(self.args + args), **_JoinKW(self.kw, kw)) 
    8484 
    8585class ContextApply_p_mixin(object): 
     
    9191    def SaveContext(self, args, kw): pass 
    9292    def __call__(self, *args, **kw): 
    93         return self._DoCall(args, kw) 
     93        return self._DoCall(*args, **kw) 
    9494 
    9595class ContextApply_s_mixin(object): 
     
    100100    """ 
    101101    def __call__(self, *args, **kw): 
    102         return self._DoCall(self.args, self.kw) 
     102        return self._DoCall(*self.args, **self.kw) 
    103103 
    104104class ContextApply_0_mixin(object): 
     
    111111    def SaveContext(self, args, kw): pass 
    112112    def __call__(self, *args, **kw): 
    113         return self._DoCall(tuple(), {}
     113        return self._DoCall(
    114114 
    115115#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBFoundation/RBFoundation/WeakBind.py

    r253 r280  
    9999            return self.im_func and 1 or 0 
    100100 
    101     def __call__(self, *args, **kw): 
    102         return self._DoCall(args, kw) 
     101    #def __call__(self, *args, **kw): 
     102    #    return self._DoCall(args, kw) 
    103103 
    104104    def __eq__(self, other): 
     
    112112        return not self.__eq__(other) 
    113113 
    114     def _DoCall(self, args, kw): 
     114    def _DoCall(self, *args, **kw): 
    115115        if self.im_self: 
    116116            im_self = self.im_self() 
     
    121121            else: raise weakref.ReferenceError, "weakly-referenced object no longer exists" 
    122122        else: return self.im_func(*args, **kw) 
     123    __call__ = _DoCall 
    123124 
    124125BoundCallable = WeakBoundCallable 
     
    150151        return self.callback is not None and 1 or 0 
    151152 
    152     def __call__(self, *args, **kw): 
    153         return self._DoCall(args, kw) 
     153    #def __call__(self, *args, **kw): 
     154    #    return self._DoCall(args, kw) 
    154155 
    155156    def __eq__(self, other): 
     
    163164        return not self.__eq__(other) 
    164165 
    165     def _DoCall(self, args, kw): 
     166    def _DoCall(self, *args, **kw): 
    166167        return self.callback(*args, **kw) 
     168    __call__ = _DoCall 
    167169 
    168170#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
  • trunk/RBFoundation/RBFoundation/XMLObjectify.py

    r277 r280  
    176176        self._elements = [] 
    177177 
    178     def __getattribute__(self, name): 
    179         """Allows for the node.attribute or node.subnode semantics""" 
    180         if '_' != name[0]: 
    181             _attributes = self._attributes 
    182             if name in self._attributes: return _attributes[name] 
    183             xmlName = name.replace('_', '-') 
    184             if '-' == xmlName[-1]: xmlName = xmlName[:-1] 
    185             if xmlName in _attributes: 
    186                 return _attributes[xmlName] 
    187             result = self._getElements(node=xmlName)  
    188             if result: 
    189                 return result 
    190         return XMLBuilder.XMLBuilderObjectBase.__getattribute__(self, name) 
    191  
    192178    def __call__(self, joinstr=''): 
    193179        """One way to get the PC data out of the node.  See __str__, __int__, __float__, and __complex__. 
     
    339325            nsOuter.update(self.__namespace_map__) 
    340326 
    341         try
     327        if self.__namespace__ in nsOuter
    342328            nodePrefix = nsOuter[self.__namespace__] 
    343         except KeyError
     329        else
    344330            # Remove old default namespace 
    345331            nodePrefix = None 
    346             for key, value in nsOuter.items(): 
     332            for key, value in nsOuter.iteritems(): 
    347333                if value is nodePrefix: del nsOuter[key] 
    348             for key, value in self.__namespace_map__.items(): 
     334            for key, value in self.__namespace_map__.iteritems(): 
    349335                if value is nodePrefix: del self.__namespace_map__[key] 
    350336            # Add current namespace as "default" 
     
    367353 
    368354        # Attributes 
    369         lstAttrResult = [] 
    370355        for attrname, attrvalue in self._attributes.iteritems(): 
    371356            if isinstance(attrname, tuple): 
    372357                if attrname[1] not in self._attributes: 
    373358                    prefix = nsOuter[attrname[0]] 
    374                     if prefix: lstAttrResult.append(' %s:%s=%s' % (prefix, attrname[1], quoteattr(attrvalue))) 
    375                     else: lstAttrResult.append(' %s=%s' % (attrname[1], quoteattr(attrvalue))) 
    376             elif nodePrefix: 
    377                 lstAttrResult.append(' %s:%s=%s' % (nodePrefix, attrname[1], quoteattr(attrvalue))) 
    378             else: lstAttrResult.append(' %s=%s' % (attrname, quoteattr(attrvalue))) 
    379         if lstAttrResult: 
    380             result += ''.join(lstAttrResult) 
     359                    if prefix: result += ' %s:%s=%s' % (prefix, attrname[1], quoteattr(attrvalue)) 
     360                    else: result += ' %s=%s' % (attrname[1], quoteattr(attrvalue)) 
     361                #else: will be handled in not extended name form 
     362            elif nodePrefix: result += ' %s:%s=%s' % (nodePrefix, attrname[1], quoteattr(attrvalue)) 
     363            else: result += ' %s=%s' % (attrname, quoteattr(attrvalue)) 
    381364 
    382365        # Result constrution 
     
    425408     
    426409class ObjectifiedXML(BaseObjectifiedXML): 
     410    def __getattribute__(self, name): 
     411        """Allows for the node.attribute or node.subnode semantics""" 
     412        if '_' != name[0]: 
     413            _attributes = self._attributes 
     414            if name in self._attributes: return _attributes[name] 
     415            xmlName = name.replace('_', '-') 
     416            if '-' == xmlName[-1]: xmlName = xmlName[:-1] 
     417            if xmlName in _attributes: 
     418                return _attributes[xmlName] 
     419            result = self._getElements(node=xmlName)  
     420            if result: 
     421                return result 
     422        return XMLBuilder.XMLBuilderObjectBase.__getattribute__(self, name) 
     423 
    427424    def __setattr__(self, name, value): 
    428425        """Allows user to create new attributes, or change values using node.attribute semantics""" 
  • trunk/RBFoundation/RBFoundation/XSDConverter.py

    r267 r280  
    100100 
    101101        for key in other._elements: 
    102             try:  
     102            if key in self._elements: 
    103103                self._elements[key]._XSDMerge(other._elements[key]) 
    104             except KeyError:  
     104            else: 
    105105                temp = other._elements[key] 
    106106                temp._mincount = 0 
  • trunk/RBSkinning/RBSkinning/InheritableSettings.py

    r253 r280  
    8282    def _SaveSettings(self, settings=None, SettingPrefix=None): 
    8383        settings = settings or self.local_settings 
    84         try: 
     84        if self.BaseSettingsLevel in settings: 
     85            SettingLevel = int(settings[self.BaseSettingsLevel]) 
     86            del settings[self.BaseSettingsLevel] 
     87        else: SettingLevel = None 
     88        if self.BaseSettingsSave in settings: 
    8589            SettingName = settings[self.BaseSettingsSave] 
    8690            del settings[self.BaseSettingsSave] 
    87         except KeyError: SettingName = None 
    88         try: 
    89             SettingLevel = int(settings[self.BaseSettingsLevel]) 
    90             del settings[self.BaseSettingsLevel] 
    91         except KeyError: SettingLevel = None 
    92         if SettingName: 
    9391            return self._SaveSettingsAdv(SettingName, settings, SettingPrefix, SettingLevel) 
    9492 
     
    9997            # Get inherited settings 
    10098            newsettings = {} 
    101             self._InheritSettings(newsettings, strtolist(self.default_settings.get(self.BaseSettingsInherit, '')), Resilliant=1) 
    102             self._InheritSettings(newsettings, strtolist(settings.get(self.BaseSettingsInherit, ''))) 
     99            BaseSettingsList = self.default_settings.get(self.BaseSettingsInherit, '') 
     100            if BaseSettingsList: self._InheritSettings(newsettings, strtolist(BaseSettingsList), Resilliant=1) 
     101            BaseSettingsList = settings.get(self.BaseSettingsInherit, '') 
     102            if BaseSettingsList: self._InheritSettings(newsettings, strtolist(BaseSettingsList)) 
    103103 
    104104            # Merge the two settings 
     
    106106            else: newsettings = settings 
    107107 
    108             try: del newsettings[self.BaseSettingsInherit] 
    109             except KeyError: pass 
     108            if self.BaseSettingsInherit in newsettings:  
     109                del newsettings[self.BaseSettingsInherit] 
    110110 
    111             try: self._SaveSettings(newsettings) 
    112             except KeyError: pass 
     111            self._SaveSettings(newsettings) 
    113112 
    114113        # now set our settings to be a chained grouping of 
    115114        # the modified incoming settings, and the chained settings 
    116115        self.settings = ChainedDict(newsettings) 
    117         self.settings.SetChained(self.default_settings) 
     116        self.settings.chained = self.default_settings 
    118117 
    119118    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    133132    def _GetSourceSettings(self): 
    134133        try: return self.settings.source 
    135         except AttributeError: return {} 
     134        except AttributeError: return self.settings 
    136135    source_settings = property(fget=_GetSourceSettings) 
    137136 
  • trunk/RBSkinning/RBSkinning/SkinContext.py

    r253 r280  
    2626from __future__ import generators 
    2727 
     28myStat = {} 
    2829#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    2930#~ Class 
     
    3940 
    4041    def __getattribute__(self, name): 
    41         if name[0] != '_' or name in ['__root__', '__skinner__']: 
    42             if name not in self.__dict__ and self._NextContext: 
    43                 return self._NextContext.__getattribute__(name) 
     42        if name in ('__dict__', '_NextContext'): 
     43            return object.__getattribute__(self, name) 
     44        elif name[0] != '_' or name in ('__root__', '__skinner__'): 
     45            ctx = self 
     46            while ctx and (name not in ctx.__dict__): 
     47                ctx = ctx._NextContext 
     48            if ctx: return ctx.__dict__[name] 
    4449        return object.__getattribute__(self, name) 
    4550 
  • trunk/RBSkinning/RBSkinning/SkinObject.py

    r277 r280  
    102102        Returns the resultant context.""" 
    103103        result = self.context 
    104         if force or (self.parent() and self.parent().context is not self.context)
     104        if force or self.context._NextContext
    105105            self.context = self.context._NextContext 
    106106        return result 
  • trunk/RBSkinning/RBSkinning/UtilitySkinElements.py

    r253 r280  
    7979 
    8080        # Emulate the End of an element 
    81         result = owner._end_element(name) 
     81        owner._end_element(name) 
    8282 
    8383        # Emulate the namespace end calls 
    8484        for prefix in self.namespacemap.itervalues(): 
    8585            owner._end_namespace_decl_handler(prefix) 
    86  
    87         # Return our result 
    88         return result 
    8986 
    9087    def RestoreChildren(self, owner=None): 
  • trunk/RBSkinning/RBSkinning/skin/template.py

    r264 r280  
    9292            setattr(self.context, '::invoke:' + InvokeName, weakref.proxy(self)) 
    9393            TemplateOuter.RestoreChildren(self.owner) 
     94            delattr(self.context, '::invoke:' + InvokeName) 
    9495            self.parent().PopContext() 
    9596 
  • trunk/RBSkinning/RBSkinning/xmlPython/for_.py

    r265 r280  
    4545    def SkinInitialize(self): 
    4646        if self.parent(): 
    47             self.parent().PushContext(
     47            self.parent().PushContext(force=1
    4848        self.object = self.EvalLocal(self.settings['collection']) 
    4949        self.StoreChildren(self.object and 1 or 0) 
     
    5454            setattr(self.context, name, each) 
    5555            self.RestoreChildren() 
    56  
     56        if self.parent(): 
     57            self.parent().PopContext() 
  • trunk/RBSkinning/RBSkinning/xmlPython/if_.py

    r253 r280  
    4343 
    4444    def SkinInitialize(self): 
    45         self.PushContext() 
    4645        self.object = self.EvalLocal(self.settings['condition']) 
    4746        self.StoreChildren(self.object and 1 or 0) 
  • trunk/RBSkinning/RBSkinning/xmlPython/module.py

    r266 r280  
    4848 
    4949        # Create the module 
    50         module = types.ModuleType(
    51         module.__name__ = modul
     50        module = types.ModuleType(name
     51        module.__name__ = nam
    5252        module.__doc__ = """Module generated by xmlPython.module""" 
    5353        module.__dict__.update(self._GetEvalLocals(**Variables)) 
  • trunk/RBSkinning/RBSkinning/xmlPython/while_.py

    r266 r280  
    4444    def SkinInitialize(self): 
    4545        if self.parent(): 
    46             self.parent().PushContext(
    47         self.condition = self.settings['condition'] 
     46            self.parent().PushContext(force=1
     47        self.condition = compile(self.settings['condition'], 'xmlPython.while', 'eval') 
    4848        self.object = self.EvalLocal(self.condition) 
    4949        self.StoreChildren(self.object and 1 or 0) 
     
    5454            self.object = self.EvalLocal(self.condition) 
    5555        del self.condition 
     56        if self.parent(): 
     57            self.parent().PopContext() 
    5658