Changeset 742

Show
Ignore:
Timestamp:
02/20/04 16:12:07 (5 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

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

    r740 r742  
    5757    def __ne__(self, other): 
    5858        return not self.__eq__(other) 
     59 
     60truelambda = lambda each: True 
     61falselambda = lambda each: False 
     62 
     63def makenodematcher(*args, **kw): 
     64    if args or kw: 
     65        return makenodematcherex(*args, **kw) 
     66    else: return truelambda 
     67 
     68def makenodematcherex(node=_any, namespace=_any, prefix=_any): 
     69    def nodematcher(each): 
     70        if isinstance(each, basestring): return node==each 
     71        else: return node==each.node and namespace==each.namespace and prefix==each.prefix 
     72    return nodematcher 
    5973 
    6074#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
     
    333347        idxonly = kw.get('idxonly', None) 
    334348        if idxonly is not None: del kw['idxonly'] 
    335         if args or kw: 
    336             def makematch(node=_any, namespace=_any, prefix=_any): 
    337                 return lambda each: node==each.node and namespace==each.namespace and prefix==each.prefix 
    338             match = makematch(*args, **kw) 
    339         else: match = lambda each: True 
     349        match = makenodematcher(*args, **kw) 
    340350        idx = 0 
    341351        for each in self.elems: 
     
    349359        """Returns a generator to iterate through the matching child nodes of xmlnode. 
    350360        obj.iternodes(node=_any, namespace=_any, prefix=_any)""" 
    351         if args or kw: 
    352             def makematch(node=_any, namespace=_any, prefix=_any): 
    353                 return lambda each: node==each.node and namespace==each.namespace and prefix==each.prefix 
    354             match = makematch(*args, **kw) 
    355         else: match = lambda each: True 
     361        match = makenodematcher(*args, **kw) 
    356362        for each in self.elems: 
    357363            if not isinstance(each, basestring): 
     
    412418            self.deldata(key, **kw) 
    413419 
    414     def haselem(self, elem, *args, **kw): 
     420    def haselem(self, elem=None, *args, **kw): 
    415421        """Returns True if elem is a child element of the xmlnode""" 
    416422        try: 
     
    418424                return self.hasnode(*elem, **kw) 
    419425            elif isinstance(elem, _NoneType): 
    420                 return False 
     426                try: 
     427                    self.iterelems(elem).next() 
     428                    return True 
     429                except StopIteration: 
     430                    return False 
    421431            else: 
    422432                return self.hasdata(*elem, **kw)