def coerce_zadd_args(*args, **kwargs):
        """
        Take arguments attended by a zadd call, named or not, and return a flat list
        that can be used.
        A callback can be called with all "values" (as *args) if defined as the
        `values_callback` named argument. Real values will then be the result of
        this callback.
        """
        values_callback = kwargs.pop('values_callback', None)

        pieces = []
        if args:
            if len(args) % 2 != 0:
                raise RedisError("ZADD requires an equal number of "
                                 "values and scores")
            pieces.extend(args)

        for pair in iteritems(kwargs):
            pieces.append(pair[1])
            pieces.append(pair[0])

        values = pieces[1::2]
        if values_callback:
            values = values_callback(*values)

        scores = pieces[0::2]

        pieces = []
        for z in zip(scores, values):
            pieces.extend(z)

        return pieces
def coerce_zadd_args ( * args , ** kwargs ) : values_callback = kwargs . pop ( 'values_callback' , None ) pieces = [ ] if args : if len ( args ) % 2 != 0 : raise RedisError ( "ZADD requires an equal number of " "values and scores" ) pieces . extend ( args ) for pair in iteritems ( kwargs ) : pieces . append ( pair [ 1 ] ) pieces . append ( pair [ 0 ] ) values = pieces [ 1 : : 2 ] if values_callback : values = values_callback ( * values ) scores = pieces [ 0 : : 2 ] pieces = [ ] for z in zip ( scores , values ) : pieces . extend ( z ) return pieces
Take arguments attended by a zadd call, named or not, and return a flat list
        that can be used.
        A callback can be called with all "values" (as *args) if defined as the
        `values_callback` named argument. Real values will then be the result of
        this callback.