64 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| def key_print(data, key="", start=True):
 | |
|     result = ""
 | |
|     if isinstance(data, list):
 | |
|         for i, value in enumerate(data):
 | |
|             result += key_print(value, key=f"{key}.{i}", start=False)
 | |
|     elif isinstance(data, dict):
 | |
|         for k, value in sorted(data.items()):
 | |
|             result += key_print(value, key=k if start else f"{key}.{k}", start=False)
 | |
|     else:
 | |
|         result += f"{key}: {data}\n"
 | |
|     return result
 | |
| 
 | |
| 
 | |
| # yaml.dump() would be done the same, but needs an additional dependency...
 | |
| def pretty_print(data, key="", intend=0, is_list=False, whitespace="  "):
 | |
|     result = ""
 | |
|     if isinstance(data, list):
 | |
|         if key:
 | |
|             result += f"{whitespace * intend}{'- ' if is_list else ''}{key}:\n"
 | |
|             intend += 1
 | |
|         for i, value in enumerate(data):
 | |
|             result += pretty_print(
 | |
|                 value, intend=intend, is_list=True, whitespace=whitespace
 | |
|             )
 | |
|     elif isinstance(data, dict):
 | |
|         if key:
 | |
|             result += f"{whitespace * intend}{'- ' if is_list else ''}{key}:\n"
 | |
|             intend += 1
 | |
|         for i, (key, value) in enumerate(sorted(data.items())):
 | |
|             if is_list and not i:
 | |
|                 result += pretty_print(
 | |
|                     value, key=key, intend=intend, is_list=True, whitespace=whitespace
 | |
|                 )
 | |
|             elif is_list:
 | |
|                 result += pretty_print(
 | |
|                     value, key=key, intend=intend + 1, whitespace=whitespace
 | |
|                 )
 | |
|             else:
 | |
|                 result += pretty_print(
 | |
|                     value, key=key, intend=intend, whitespace=whitespace
 | |
|                 )
 | |
|     else:
 | |
|         result += f"{whitespace * intend}{'- ' if is_list else ''}{key}{': ' if key else ''}{data}\n"
 | |
|     return result
 | |
| 
 | |
| 
 | |
| def create_command(commands, concat=False):
 | |
|     result = {}
 | |
|     for name, command in commands.items():
 | |
|         if not concat:
 | |
|             result[name] = {}
 | |
|         for parameter, data in command.parameters.items():
 | |
|             if data.typology == "enum":
 | |
|                 value = data.values
 | |
|             elif data.typology == "range":
 | |
|                 value = {"min": data.min, "max": data.max, "step": data.step}
 | |
|             else:
 | |
|                 continue
 | |
|             if not concat:
 | |
|                 result[name][parameter] = value
 | |
|             else:
 | |
|                 result[f"{name}.{parameter}"] = value
 | |
|     return result
 |