def export(req, cluster_id): def _get_last_id(service): response = req.zato.client.invoke(service, {}) if response.has_data: return response.data.value def _get_last_dict_id(): return _get_last_id('zato.kvdb.data-dict.dictionary.get-last-id') def _get_last_translation_id(): return _get_last_id('zato.kvdb.data-dict.translation.get-last-id') def _get_dict_list(): for item in req.zato.client.invoke( 'zato.kvdb.data-dict.dictionary.get-list', {}): yield item.id, item.system, item.key, item.value def _get_translation_list(): for item in req.zato.client.invoke( 'zato.kvdb.data-dict.translation.get-list', {}): yield item.id, item.system1, item.key1, item.value1, item.system2, \ item.key2, item.value2, item.id1, item.id2 return_data = { 'meta': { 'current_host': current_host(), 'timestamp_utc': datetime.utcnow().isoformat(), 'user': req.user.username } } return_data['data'] = {'dict_list': [], 'translation_list': []} return_data['data']['last_dict_id'] = _get_last_dict_id() return_data['data']['last_translation_id'] = _get_last_translation_id() for id, system, key, value in _get_dict_list(): return_data['data']['dict_list'].append({ 'id': id, 'system': system, 'key': key, 'value': value }) for id, system1, key1, value1, system2, key2, value2, id1, id2 in _get_translation_list( ): return_data['data']['translation_list'].append({ translation_name(system1, key1, value1, system2, key2): { 'id': id, 'value2': value2, 'id1': id1, 'id2': id2 } }) response = HttpResponse(dumps(return_data, indent=4).encode('bz2'), content_type='application/x-bzip2') response['Content-Disposition'] = 'attachment; filename={}'.format( 'zato-data-dict-export.json.bz2') return response
def handle(self): data = loads(self.request.input.data.decode('base64').decode('bz2')) with self.server.kvdb.conn.pipeline() as p: p.delete(KVDB.DICTIONARY_ITEM_ID) p.delete(KVDB.DICTIONARY_ITEM) p.delete(KVDB.TRANSLATION_ID) for item in self._get_translations(): key = translation_name(item['system1'], item['key1'], item['value1'], item['system2'], item['key2']) p.delete(key) # Another proof software engineering and philosophy have /a lot/ in common! data = data['data'] p.set(KVDB.DICTIONARY_ITEM_ID, data['last_dict_id']) if data['last_translation_id']: p.set(KVDB.TRANSLATION_ID, data['last_translation_id']) for item in data['dict_list']: p.hset(KVDB.DICTIONARY_ITEM, item['id'], dict_item_name(item['system'], item['key'], item['value'])) for item in data['translation_list']: key = item.keys()[0] for value_key, value in item[key].items(): p.hset(key, value_key, value) p.execute()
def handle(self): data = loads(self.request.input.data.decode('base64').decode('bz2')) with self.server.kvdb.conn.pipeline() as p: p.delete(KVDB.DICTIONARY_ITEM_ID) p.delete(KVDB.DICTIONARY_ITEM) p.delete(KVDB.TRANSLATION_ID) for item in self._get_translations(): key = translation_name(item['system1'], item['key1'], item['value1'], item['system2'], item['key2']) p.delete(key) # Another proof software engineering and philosophy have /a lot/ in common! data = data['data'] p.set(KVDB.DICTIONARY_ITEM_ID, data['last_dict_id']) p.set(KVDB.TRANSLATION_ID, data['last_translation_id']) for item in data['dict_list']: p.hset(KVDB.DICTIONARY_ITEM, item['id'], dict_item_name(item['system'], item['key'], item['value'])) for item in data['translation_list']: key = item.keys()[0] for value_key, value in item[key].items(): p.hset(key, value_key, value) p.execute()
def export(req, cluster_id): def _get_last_id(service): response = req.zato.client.invoke(service, {}) if response.has_data: return response.data.value def _get_last_dict_id(): return _get_last_id('zato.kvdb.data-dict.dictionary.get-last-id') def _get_last_translation_id(): return _get_last_id('zato.kvdb.data-dict.translation.get-last-id') def _get_dict_list(): for item in req.zato.client.invoke('zato.kvdb.data-dict.dictionary.get-list', {}): yield item.id, item.system, item.key, item.value def _get_translation_list(): for item in req.zato.client.invoke('zato.kvdb.data-dict.translation.get-list', {}): yield item.id, item.system1, item.key1, item.value1, item.system2, \ item.key2, item.value2, item.id1, item.id2 return_data = {'meta': {'current_host':current_host(), 'timestamp_utc':datetime.utcnow().isoformat(), 'user':req.user.username}} return_data['data'] = {'dict_list':[], 'translation_list':[]} return_data['data']['last_dict_id'] = _get_last_dict_id() return_data['data']['last_translation_id'] = _get_last_translation_id() for id, system, key, value in _get_dict_list(): return_data['data']['dict_list'].append({'id':id, 'system':system, 'key':key, 'value':value}) for id, system1, key1, value1, system2, key2, value2, id1, id2 in _get_translation_list(): return_data['data']['translation_list'].append( {translation_name(system1, key1, value1, system2, key2): {'id':id, 'value2':value2, 'id1':id1, 'id2':id2}}) response = HttpResponse(dumps(return_data, indent=4).encode('bz2'), mimetype='application/x-bzip2') response['Content-Disposition'] = 'attachment; filename={}'.format('zato-data-dict-export.json.bz2') return response
def _name(self, system1, key1, value1, system2, key2): return translation_name(system1, key1, value1, system2, key2)