| | |
| | |
| | from typing import Callable |
| |
|
| |
|
| | def traverse(js, callback: Callable, *args, **kwargs): |
| | if isinstance(js, list): |
| | result = list() |
| | for l in js: |
| | l = traverse(l, callback, *args, **kwargs) |
| | result.append(l) |
| | return result |
| | elif isinstance(js, tuple): |
| | result = list() |
| | for l in js: |
| | l = traverse(l, callback, *args, **kwargs) |
| | result.append(l) |
| | return tuple(result) |
| | elif isinstance(js, dict): |
| | result = dict() |
| | for k, v in js.items(): |
| | k = traverse(k, callback, *args, **kwargs) |
| | v = traverse(v, callback, *args, **kwargs) |
| | result[k] = v |
| | return result |
| | elif isinstance(js, int): |
| | return callback(js, *args, **kwargs) |
| | elif isinstance(js, str): |
| | return callback(js, *args, **kwargs) |
| | else: |
| | return js |
| |
|
| |
|
| | def demo1(): |
| | d = { |
| | "env": "ppe", |
| | "mysql_connect": { |
| | "host": "$mysql_connect_host", |
| | "port": 3306, |
| | "user": "callbot", |
| | "password": "NxcloudAI2021!", |
| | "database": "callbot_ppe", |
| | "charset": "utf8" |
| | }, |
| | "es_connect": { |
| | "hosts": ["10.20.251.8"], |
| | "http_auth": ["elastic", "ElasticAI2021!"], |
| | "port": 9200 |
| | } |
| | } |
| |
|
| | def callback(s): |
| | if isinstance(s, str) and s.startswith('$'): |
| | return s[1:] |
| | return s |
| |
|
| | result = traverse(d, callback=callback) |
| | print(result) |
| | return |
| |
|
| |
|
| | if __name__ == '__main__': |
| | demo1() |
| |
|