def _get_topology(rest_client,args): """ load topology """ state_leaf = rest_client.get_leaf(_key_to_address(TOPOLOGY_SET_NM)) #config_candidates = SettingCandidates() topology = None if state_leaf is not None: setting_bytes = b64decode(state_leaf['data']) setting = Setting() setting.ParseFromString(setting_bytes) for entry in setting.entries: if entry.key == TOPOLOGY_SET_NM: topology = json.loads(entry.value.replace("'",'"')) if args.cls is not None: print('topology cluster',args.cls) fbft = FbftTopology() fbft.get_topology(topology,'','','static') if args.peer is None: topology = fbft.get_cluster_by_name(args.cls) #print('cluster',topology) """ for key,peer in fbft.get_cluster_iter(args.cls): print('cluster',args.cls,'peer',peer) """ else: topology,_ = fbft.get_peer_by_name(args.cls,args.peer) #print('CLUSTER',args.cls,args.peer,'>>>',cls) return topology
def get_setting(self, key, default_value=None, value_type=str): """Get the setting stored at the given key. Args: key (str): the setting key default_value (str, optional): The default value, if none is found. Defaults to None. value_type (function, optional): The type of a setting value. Defaults to `str`. Returns: str: The value of the setting if found, default_value otherwise. """ try: state_entry = self._state_view.get( SettingsView.setting_address(key)) except KeyError: return default_value if state_entry is not None: setting = Setting() setting.ParseFromString(state_entry) for setting_entry in setting.entries: if setting_entry.key == key: return value_type(setting_entry.value) return default_value
def CreateSetting(key, value): """ Create a setting object to include in a MockStateFactory. """ addr = SettingsView.setting_address(key) setting = Setting() setting.entries.add(key=key, value=str(value)) return addr, setting.SerializeToString()
def _do_settings_list(args): """Lists the current on-chain configuration values. """ rest_client = RestClient(args.url) state = rest_client.list_state(subtree=SETTINGS_NAMESPACE) prefix = args.filter head = state['head'] state_values = state['data'] printable_settings = [] proposals_address = _key_to_address('sawtooth.settings.vote.proposals') for state_value in state_values: if state_value['address'] == proposals_address: # This is completely internal setting and we won't list it here continue decoded = b64decode(state_value['data']) setting = Setting() setting.ParseFromString(decoded) for entry in setting.entries: if entry.key.startswith(prefix): printable_settings.append(entry) printable_settings.sort(key=lambda s: s.key) if args.format == 'default': tty_width = tty.width() for setting in printable_settings: # Set value width to the available terminal space, or the min width width = tty_width - len(setting.key) - 3 width = width if width > _MIN_PRINT_WIDTH else _MIN_PRINT_WIDTH value = (setting.value[:width] + '...' if len(setting.value) > width else setting.value) print('{}: {}'.format(setting.key, value)) elif args.format == 'csv': try: writer = csv.writer(sys.stdout, quoting=csv.QUOTE_ALL) writer.writerow(['KEY', 'VALUE']) for setting in printable_settings: writer.writerow([setting.key, setting.value]) except csv.Error: raise CliException('Error writing CSV') elif args.format == 'json' or args.format == 'yaml': settings_snapshot = { 'head': head, 'settings': {setting.key: setting.value for setting in printable_settings} } if args.format == 'json': print(json.dumps(settings_snapshot, indent=2, sort_keys=True)) else: print(yaml.dump(settings_snapshot, default_flow_style=False)[0:-1]) else: raise AssertionError('Unknown format {}'.format(args.format))
def _param_show(rest_client,args): """ show topology param """ fname = ('' if args.param_name[:4] == "bgx." else "bgx.") + args.param_name try: state_leaf = rest_client.get_leaf(_key_to_address(fname)) except CliException: print('undef param {}'.format(fname)) return if state_leaf is not None: setting_bytes = b64decode(state_leaf['data']) setting = Setting() setting.ParseFromString(setting_bytes) for entry in setting.entries: if entry.key == fname: print('{} = {}'.format(fname,entry.value)) else: print('undef param {}'.format(fname))
def _get_proposals(rest_client): state_leaf = rest_client.get_leaf( _key_to_address('sawtooth.settings.vote.proposals')) config_candidates = SettingCandidates() if state_leaf is not None: setting_bytes = b64decode(state_leaf['data']) setting = Setting() setting.ParseFromString(setting_bytes) candidates_bytes = None for entry in setting.entries: if entry.key == 'sawtooth.settings.vote.proposals': candidates_bytes = entry.value if candidates_bytes is not None: decoded = b64decode(candidates_bytes) config_candidates.ParseFromString(decoded) return config_candidates
def _setting_entry(key, value): return Setting( entries=[Setting.Entry(key=key, value=value)]).SerializeToString()