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
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
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
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')))
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 unpickle(value): try: return pickle_loads(value.encode('utf-8')) except: return value
def re_pattern(value): try: return pickle_loads(value.encode('utf-8')).pattern except: return value