コード例 #1
0
ファイル: models_test.py プロジェクト: cathalgarvey/bytestag
    def test_josn_support(self):
        '''It should convert to json and back'''

        kvp_info_list = KVPExchangeInfoList(
            [KVPExchangeInfo(KeyBytes(), KeyBytes(), 123, 456)])

        self.assertEqual(kvp_info_list,
            KVPExchangeInfoList.from_json_loadable(
                kvp_info_list.to_json_dumpable()))
コード例 #2
0
ファイル: network.py プロジェクト: cathalgarvey/bytestag
    def _received_find_value_rpc(self, data_packet):
        '''Find value rpc callback'''

        _logger.debug('Find value %s←%s', self.address,
            data_packet.address)

        key = KeyBytes.new_silent(data_packet.dict_obj.get(JSONKeys.KEY,
            'fake'))
        index = KeyBytes.new_silent(data_packet.dict_obj.get(JSONKeys.INDEX))

        if not key:
            _logger.debug('Find value %s←%s bad key', self.address,
            data_packet.address)
            return

        _logger.debug('Find value %s←%s k=%s i=%s', self.address,
            data_packet.address, key, index)

        kvpid = KVPID(key, index)

        if index and kvpid in self._kvp_table:
            kvp_record = self._kvp_table.record(kvpid)

            d = self._template_dict()
            d[JSONKeys.VALUES] = KVPExchangeInfoList([
                KVPExchangeInfo.from_kvp_record(kvp_record)
            ]).to_json_dumpable()

            self._network.send_answer_reply(data_packet, d)
        elif self._kvp_table.indices(key):
            kvp_record_list = self._kvp_table.records_by_key(key)

            d = self._template_dict()
            d[JSONKeys.VALUES] = KVPExchangeInfoList.from_kvp_record_list(
                kvp_record_list).to_json_dumpable()

            self._network.send_answer_reply(data_packet, d)
        else:
            self._reply_find_node(data_packet, key)
コード例 #3
0
ファイル: network.py プロジェクト: cathalgarvey/bytestag
    def run(self, controller, node, key, index):
        d = controller._template_dict()
        d[JSONKeys.RPC] = JSONKeys.RPCs.FIND_VALUE
        d[JSONKeys.KEY] = key.base64

        if index:
            d[JSONKeys.INDEX] = index.base64

        future = controller._network.send(node.address, d, timeout=True)
        data_packet = future.result()

        if not data_packet:
            _logger.debug('Find value timeout %s←%s', controller.node, node)
            return

        controller._update_routing_table_from_data_packet(data_packet)

        dict_obj = data_packet.dict_obj

        if JSONKeys.VALUES in dict_obj:
            kvp_info_list = KVPExchangeInfoList.from_json_loadable(
                dict_obj[JSONKeys.VALUES])

            _logger.debug('Find value %s←%s dictlen=%d',
                controller.node, node, len(kvp_info_list))

            return FindValueFromNodeResult(kvp_info_list, None)

        elif JSONKeys.NODES in dict_obj:
            try:
                nodes = NodeList.from_json_loadable(dict_obj[JSONKeys.NODES])
            except ValueError as e:
                _logger.debug('Find value node invalid %s←%s err=%s',
                    controller.node, node, e)
            else:
                _logger.debug('Find value nodes %s←%s len=%d',
                    controller.node, node, len(nodes))
                return FindValueFromNodeResult(None, nodes)