Exemple #1
0
    def get(self, key):
        '''
        Gets a single value.  Returns :token:`None` if the key does not
        exist.

        Raises ``ValidationException`` if ``key`` is invalid.  May also
        raise ``ClientException`` and socket errors.
        '''
        # req  - get <key> [<key> ...]\r\n
        # resp - VALUE <key> <flags> <bytes> [<cas unique>]\r\n
        #        <data block>\r\n (if exists)
        #        [...]
        #        END\r\n
        key_bytes = self._validate_key(key)

        command = b'get ' + key_bytes + b'\r\n'

        val = None
        node = self._find_node(key)
        resp = node.send(command)
        error = None

        # make sure well-formed responses are all consumed
        while resp != b'END\r\n':
            terms = resp.split()
            if len(terms) == 4 and terms[0] == b'VALUE':  # exists
                typecode = int(terms[2]) ^ 0x100
                length = int(terms[3])
                if typecode > 0xff:
                    error = ClientException('not a moecache deployment')
                if terms[1] == key_bytes:
                    received = node.gets(length+2)[:-2]
                    if typecode == 18:
                        if Client.is_py3:
                            val = received.decode()
                        else:
                            val = received
                    elif typecode == 0:
                        val = pickle_loads(received)
                    else:
                        error = ClientException('unsupported data type',
                                                typecode)
                else:
                    error = ClientException('received unwanted response')
            else:
                raise ClientException('get failed', resp)
            resp = node.gets()

        if error is not None:
            # this can happen if a memcached instance contains items set
            # by a previous client
            # leads to subtle bugs, so fail fast
            raise error

        return val
Exemple #2
0
 def _handle_response(self, parts):
     dtype, index, argkw = parts
     try:
         rs = self._resps.pop(index)
         if dtype & DT_PICKLE:
             result = pickle_loads(argkw)
         else:
             result = loads(argkw)
         rs.set(result)
     except KeyError:
         pass
Exemple #3
0
 def from_database (cls, row):
   if row is None:
     return None
   deck = Deck()
   deck.id = row['id']
   deck.name = row['name']
   deck.author = row['author']
   deck.url = row['url']
   deck.type = row['type']
   deck.hero_class = row['class']
   deck.dust_cost = row['dust_cost']
   deck.rating = row['rating']
   deck.num_view = row['num_view']
   deck.num_comment = row['num_comment']
   deck.time_update = time.localtime(row['time_update'])
   deck.cards = pickle_loads(str(row['cards']))
   deck.scan_count = row['scan_count']
   return deck
Exemple #4
0
    def _handle_request(self, parts):
        dtype, obj_id, index, name, argkw = parts
        try:
            obj = self.get_export(obj_id)
            if obj is None:
                raise RpcExportNoFound, obj_id
            func = getattr(obj, name)
            if not callable(func):
                raise RpcFuncNoFound, name

            if dtype & DT_ZIP:
                argkw = zlib.decompress(argkw)
            if dtype & DT_PICKLE:
                args, kw = pickle_loads(argkw)
            else:
                args, kw = loads(argkw)

            if dtype & DT_PROXY:
                export_ids = args[0]
                if isinstance(export_ids, (tuple, list)):
                    proxys = []
                    for e in export_ids:
                        proxys.append(self.get_proxy(e))
                else:
                    proxys = self.get_proxy(export_ids)
                args = (proxys, ) + tuple(args[1:])

            if getattr(func, "_block_", True):
                spawn(self._handle_request_call, func, args, kw, dtype, index,
                      obj_id, name, argkw)
            else:
                self._handle_request_call(func, args, kw, dtype, index, obj_id,
                                          name, argkw)
        except Exception as e:
            log_except('export(%s).%s(%s)', obj_id, name, repr(argkw))
            if dtype & ST_NO_RESULT or self.svr.stoped:
                return
            self.send(RT_EXCEPTION, index, str(e))
 def decode_label(label):
     return pickle_loads(base64_decodestring(label))
 def decode_label(label):
     return pickle_loads(base64_decodestring(label.encode('latin1')))
Exemple #7
0
def loads(buf):
    # Compat for python2.7 version
    if sys.version_info < (3, 3) and isinstance(buf, io.BytesIO):
        buf = buf.getvalue()
    return pickle_loads(buf)
Exemple #8
0
def loads(buf):
    # Compat for python2.7 version
    if sys.version_info < (3, 3) and isinstance(buf, io.BytesIO):
        buf = buf.getvalue()
    return pickle_loads(buf)
 def decode_label(label):
     return pickle_loads(base64_decodestring(label))
 def decode_label(label):
     return pickle_loads(base64_decodestring(label.encode('latin1')))
Exemple #11
0
def unpickle(value):
    try:
        return pickle_loads(value.encode('utf-8'))
    except:
        return value
Exemple #12
0
def re_pattern(value):
    try:
        return pickle_loads(value.encode('utf-8')).pattern
    except:
        return value