def seqvalues(d, seqtype=list): #{{{
    if not ismapping(d):
        raise TypeError("%s is not a valid mapping object" %d.__class__.__name__)
    elif isinstance(d, MultiDictMixin):
        return dict(d)
    else:
        return dict((k, seqtype([v])) for k, v in d.iteritems())
Exemple #2
0
 def update(self, *args, **kw):
     """
     Updates the dictionary with the keys and values of newdict.
         
     @param self: 
         Instance of this class. Default Value: n/a
     @type self: odict instance
     @param newdict: 
         Instance of a dictionary object.
     @type self: L{Dictionary<dict>}
     
     @precondition: Anything goes.
     @postcondition: keys and values of this class are equal to those of C{newdict}.
     """
     new = {}
     setitem = self.__setitem__
     if args:
         largs = len(args)
         if largs > 1:
             raise TypeError('odict expected at most 1 arguments, got %i' %largs)
         args = args[0]
         seq = args.iteritems() if ismapping(args) else iter(args)
         for k, v in seq:
             setitem(k, v)
     if kw:
         for k, v in kw.iteritems():
             setitem(k, v)
 def update(self, s): #{{{
     if ismapping(s):
         s = s.iteritems()
     def set_mapping(init): #{{{
         for item in init:
             try:
                 obj, count = item
             except (ValueError, TypeError):
                 obj, count = item, self.get(item, 0) + 1
                 cur = count
             else:
                 cur = self.get(obj, 1)
             try:
                 count = int(count)
             except (TypeError, ValueError):
                 count = cur
             else:
                 if not count:
                     self.pop(obj, 0)
                     continue
                 elif count < 0:
                     raise ValueError("Invalid count of %i for %s object" %(count, obj.__class__.__name__))
             yield obj, count
     # End def #}}}
     super(multiset, self).update(set_mapping(s))
def mixedvalues(d, seqtype=list): #{{{
    if not ismapping(d):
        raise TypeError("%s is not a valid mapping object" %d.__class__.__name__)
    elif isinstance(d, MultiDictMixin):
        getall = d.getall
        def mkval(k): #{{{
            vals = getall(k)
            return seqtype(vals) if len(vals) > 1 else vals[0]
        # End def #}}}
        return dict((k, mkval(k)) for k in d)
    else:
        return dict(d)
 def update(self, *args, **kw): #{{{
     new = {}
     setitem = self.__setitem__
     if args:
         largs = len(args)
         if largs > 1:
             raise TypeError('odict expected at most 1 arguments, got %i' %largs)
         args = args[0]
         seq = args.iteritems() if ismapping(args) else iter(args)
         for k, v in seq:
             setitem(k, v)
     if kw:
         for k, v in kw.iteritems():
             setitem(k, v)
 def merge(self, *args, **kwargs): #{{{
     alldict = []
     adapp = alldict.append
     for a in args:
         if not ismapping(a):
             a = [(k, v) for k, v in a]
         if a:
             adapp(a)
     if kwargs:
         adapp(kwargs)
     if not alldict:
         return
     update = super(MergeDictMixin, self).update
     for d in alldict:
         update(d)
     self._alldict.extend(alldict)
Exemple #7
0
 def merge(self, *args, **kwargs): #{{{
     alldict = []
     for a in args:
         if not ismapping(a):
             a = dict(a)
         alldict.append(a)
     if kwargs:
         alldict.append(kwargs)
     if not alldict:
         return
     for d in alldict:
         super(mdict, self).update(d)
     sall = getattr(self, '_alldict', None)
     if sall is None:
         self._alldict = sall = []
     sall.extend(alldict)