Exemple #1
0
 def hmset(self, name, mapping):
     """
     Sets each key in the ``mapping`` dict to its corresponding value
     in the hash ``name``
     """
     if not mapping:
         raise DataError("'hmset' with 'mapping' of length 0")
     items = []
     for pair in iteritems(mapping):
         items.extend(pair)
     return self.execute_command('HMSET', name, *items)
Exemple #2
0
 def hmset(self, name, mapping):
     """
     Sets each key in the ``mapping`` dict to its corresponding value
     in the hash ``name``
     """
     if not mapping:
         raise DataError("'hmset' with 'mapping' of length 0")
     items = []
     for pair in iteritems(mapping):
         items.extend(pair)
     return self.execute_command('HMSET', name, *items)
Exemple #3
0
 def mset(self, *args, **kwargs):
     """
     Sets key/values based on a mapping. Mapping can be supplied as a single
     dictionary argument or as kwargs.
     """
     if args:
         if len(args) != 1 or not isinstance(args[0], dict):
             raise LedisError('MSET requires **kwargs or a single dict arg')
         kwargs.update(args[0])
     items = []
     for pair in iteritems(kwargs):
         items.extend(pair)
     return self.execute_command('MSET', *items)
Exemple #4
0
 def mset(self, *args, **kwargs):
     """
     Sets key/values based on a mapping. Mapping can be supplied as a single
     dictionary argument or as kwargs.
     """
     if args:
         if len(args) != 1 or not isinstance(args[0], dict):
             raise LedisError('MSET requires **kwargs or a single dict arg')
         kwargs.update(args[0])
     items = []
     for pair in iteritems(kwargs):
         items.extend(pair)
     return self.execute_command('MSET', *items)
Exemple #5
0
    def zadd(self, name, *args, **kwargs):
        """
        Set any number of score, element-name pairs to the key ``name``. Pairs
        can be specified in two ways:

        As *args, in the form of: score1, name1, score2, name2, ...
        or as **kwargs, in the form of: name1=score1, name2=score2, ...

        The following example would add four values to the 'my-key' key:
        ledis.zadd('my-key', 1.1, 'name1', 2.2, 'name2', name3=3.3, name4=4.4)
        """
        pieces = []
        if args:
            if len(args) % 2 != 0:
                raise LedisError("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])
        return self.execute_command('ZADD', name, *pieces)
Exemple #6
0
    def zadd(self, name, *args, **kwargs):
        """
        Set any number of score, element-name pairs to the key ``name``. Pairs
        can be specified in two ways:

        As *args, in the form of: score1, name1, score2, name2, ...
        or as **kwargs, in the form of: name1=score1, name2=score2, ...

        The following example would add four values to the 'my-key' key:
        ledis.zadd('my-key', 1.1, 'name1', 2.2, 'name2', name3=3.3, name4=4.4)
        """
        pieces = []
        if args:
            if len(args) % 2 != 0:
                raise LedisError("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])
        return self.execute_command('ZADD', name, *pieces)
Exemple #7
0
 def test_mset(self):
     d = {'a': b('1'), 'b': b('2'), 'c': b('3')}
     assert l.mset(**d)
     for k, v in iteritems(d):
         assert l[k] == v
Exemple #8
0
    def from_url(cls, url, db=None, **kwargs):
        """
        Return a connection pool configured from the given URL.

        For example::

            ledis://localhost:6380/0
            unix:///path/to/socket.sock?db=0

        Three URL schemes are supported:
            ledis:// creates a normal TCP socket connection
            unix:// creates a Unix Domain Socket connection

        There are several ways to specify a database number. The parse function
        will return the first specified option:
            1. A ``db`` querystring option, e.g. ledis://localhost?db=0
            2. If using the ledis:// scheme, the path argument of the url, e.g.
               ledis://localhost/0
            3. The ``db`` argument to this function.

        If none of these options are specified, db=0 is used.

        Any additional querystring arguments and keyword arguments will be
        passed along to the ConnectionPool class's initializer. In the case
        of conflicting arguments, querystring arguments always win.
        """
        url_string = url
        url = urlparse(url)
        qs = ''

        # in python2.6, custom URL schemes don't recognize querystring values
        # they're left as part of the url.path.
        if '?' in url.path and not url.query:
            # chop the querystring including the ? off the end of the url
            # and reparse it.
            qs = url.path.split('?', 1)[1]
            url = urlparse(url_string[:-(len(qs) + 1)])
        else:
            qs = url.query

        url_options = {}

        for name, value in iteritems(parse_qs(qs)):
            if value and len(value) > 0:
                url_options[name] = value[0]

        # We only support ledis:// and unix:// schemes.
        if url.scheme == 'unix':
            url_options.update({
                'path': url.path,
                'connection_class': UnixDomainSocketConnection,
            })

        else:
            url_options.update({
                'host': url.hostname,
                'port': int(url.port or 6380),
            })

            # If there's a path argument, use it as the db argument if a
            # querystring value wasn't specified
            if 'db' not in url_options and url.path:
                try:
                    url_options['db'] = int(url.path.replace('/', ''))
                except (AttributeError, ValueError):
                    pass

        # last shot at the db value
        url_options['db'] = int(url_options.get('db', db or 0))

        # update the arguments from the URL values
        kwargs.update(url_options)
        return cls(**kwargs)
Exemple #9
0
 def test_mset(self):
     d = {'a': b('1'), 'b': b('2'), 'c': b('3')}
     assert l.mset(**d)
     for k, v in iteritems(d):
         assert l[k] == v
Exemple #10
0
    def from_url(cls, url, db=None, **kwargs):
        """
        Return a connection pool configured from the given URL.

        For example::

            ledis://localhost:6380/0
            unix:///path/to/socket.sock?db=0

        Three URL schemes are supported:
            ledis:// creates a normal TCP socket connection
            unix:// creates a Unix Domain Socket connection

        There are several ways to specify a database number. The parse function
        will return the first specified option:
            1. A ``db`` querystring option, e.g. ledis://localhost?db=0
            2. If using the ledis:// scheme, the path argument of the url, e.g.
               ledis://localhost/0
            3. The ``db`` argument to this function.

        If none of these options are specified, db=0 is used.

        Any additional querystring arguments and keyword arguments will be
        passed along to the ConnectionPool class's initializer. In the case
        of conflicting arguments, querystring arguments always win.
        """
        url_string = url
        url = urlparse(url)
        qs = ''

        # in python2.6, custom URL schemes don't recognize querystring values
        # they're left as part of the url.path.
        if '?' in url.path and not url.query:
            # chop the querystring including the ? off the end of the url
            # and reparse it.
            qs = url.path.split('?', 1)[1]
            url = urlparse(url_string[:-(len(qs) + 1)])
        else:
            qs = url.query

        url_options = {}

        for name, value in iteritems(parse_qs(qs)):
            if value and len(value) > 0:
                url_options[name] = value[0]

        # We only support ledis:// and unix:// schemes.
        if url.scheme == 'unix':
            url_options.update({
                'path': url.path,
                'connection_class': UnixDomainSocketConnection,
            })

        else:
            url_options.update({
                'host': url.hostname,
                'port': int(url.port or 6380),
            })

            # If there's a path argument, use it as the db argument if a
            # querystring value wasn't specified
            if 'db' not in url_options and url.path:
                try:
                    url_options['db'] = int(url.path.replace('/', ''))
                except (AttributeError, ValueError):
                    pass

        # last shot at the db value
        url_options['db'] = int(url_options.get('db', db or 0))

        # update the arguments from the URL values
        kwargs.update(url_options)
        return cls(**kwargs)