Skip to content

Commit eaa6829

Browse files
committed
Add JSON encoders, string and JSON representation for configurations
Use JSON representation to print global configuration related results as JSON string. This will increase the readability of the command-line results. Also, replace to_string by string representation of the classes. Signed-off-by: Bernd Hufmann <[email protected]>
1 parent 962c7f9 commit eaa6829

7 files changed

+135
-77
lines changed

tsp/configuration.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222

2323
"""Configuration class file."""
2424

25+
import json
26+
2527
NAME_KEY = "name"
26-
DESCTIPION_KEY = "description"
28+
DESCRIPTION_KEY = "description"
2729
ID_KEY = "id"
2830
SOURCE_TYPE_ID = "sourceTypeId"
2931
PARAMETER_KEY = "parameters"
@@ -44,9 +46,9 @@ def __init__(self, params):
4446
else:
4547
self.name = ""
4648

47-
if DESCTIPION_KEY in params:
48-
self.description = params.get(DESCTIPION_KEY)
49-
del params[DESCTIPION_KEY]
49+
if DESCRIPTION_KEY in params:
50+
self.description = params.get(DESCRIPTION_KEY)
51+
del params[DESCRIPTION_KEY]
5052
else:
5153
self.description = ""
5254

@@ -71,11 +73,23 @@ def __init__(self, params):
7173
else:
7274
self.parameters = {}
7375

76+
def __repr__(self):
77+
return 'Configuration(name={}, description={}, id={}, source_type_id={}, parameters={})'.format(
78+
self.name, self.description, self.id, self.source_type_id, self.parameters)
79+
80+
def to_json(self):
81+
return json.dumps(self, cls=ConfigurationEncoder, indent=4)
82+
83+
84+
class ConfigurationEncoder(json.JSONEncoder):
85+
def default(self, obj):
86+
if isinstance(obj, Configuration):
87+
return {
88+
ID_KEY: obj.id,
89+
NAME_KEY: obj.name,
90+
DESCRIPTION_KEY: obj.description,
91+
SOURCE_TYPE_ID: obj.source_type_id,
92+
PARAMETER_KEY: obj.parameters
93+
}
94+
return super().default(obj)
7495

75-
# pylint: disable=consider-using-f-string
76-
def to_string(self):
77-
'''
78-
to_string method
79-
'''
80-
return 'Configuration[name={0}, description={1}, id={2}, source_type_id={3}, parameters={4}]'.format(self.name,
81-
self.description, self.id, self.source_type_id, self.parameters)

tsp/configuration_parameter_descriptor.py

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
"""Configuration parameter descriptors class file."""
2424

25+
import json
26+
2527
KEY_NAME_KEY = "keyName"
2628
DESCTIPION_KEY = "description"
2729
DATA_TYPE_KEY = "dataType"
@@ -61,13 +63,23 @@ def __init__(self, params):
6163
self.is_required = params.get(REQUIRED_KEY)
6264
del params[REQUIRED_KEY]
6365
else:
64-
self.is_required = "unknown_source_type_id"
66+
self.is_required = "false"
6567

68+
def __repr__(self):
69+
return 'ConfigurationParameterDescriptor[key_name={}, description={}, data_type={}, is_required={}])'.format(
70+
self.key_name,self.description, self.data_type, self.is_required)
6671

67-
# pylint: disable=consider-using-f-string
68-
def to_string(self):
69-
'''
70-
to_string method
71-
'''
72-
return 'ConfigurationParameterDescriptor[key_name={0}, description={1}, data_type={2}, is_required={3}]'.format(self.key_name,
73-
self.description, self.data_type, self.is_required)
72+
def to_json(self):
73+
return (json.dumps(self, cls=ConfigurationParameterDescriptorEncoder, indent=4))
74+
75+
76+
class ConfigurationParameterDescriptorEncoder(json.JSONEncoder):
77+
def default(self, obj):
78+
if isinstance(obj, ConfigurationParameterDescriptor):
79+
return {
80+
KEY_NAME_KEY: obj.key_name,
81+
DESCTIPION_KEY: obj.description,
82+
DATA_TYPE_KEY: obj.data_type,
83+
REQUIRED_KEY: obj.is_required
84+
}
85+
return super().default(obj)

tsp/configuration_parameter_descriptor_set.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
"""ConfigurationSet class file."""
2424

25-
from tsp.configuration_parameter_descriptor import ConfigurationParameterDescriptor
25+
import json
26+
from tsp.configuration_parameter_descriptor import ConfigurationParameterDescriptor, ConfigurationParameterDescriptorEncoder
2627

2728

2829
# pylint: disable=too-few-public-methods
@@ -39,16 +40,17 @@ def __init__(self, params):
3940
for obj in params:
4041
self.configuration_parameter_set.append(ConfigurationParameterDescriptor(obj))
4142

43+
def __repr__(self) -> str:
44+
return 'ConfigurationParameterDescriptorSet({})'.format(', '.join(str(source) for source in self.configuration_parameter_set))
45+
46+
def to_json(self):
47+
return (json.dumps(self, cls=ConfigurationParameterDescriptorSetEncoder, indent=4))
4248

43-
# pylint: disable=consider-using-f-string
44-
def to_string(self):
45-
'''
46-
to string method
47-
'''
48-
sep = ''
49-
my_str = ''
50-
for desc in self.configuration_parameter_set:
51-
my_str = my_str + '{0}{1}\n'.format(sep, desc.to_string())
52-
sep = ', '
5349

54-
return my_str
50+
class ConfigurationParameterDescriptorSetEncoder(json.JSONEncoder):
51+
def default(self, obj):
52+
if isinstance(obj, ConfigurationParameterDescriptorSet):
53+
return [
54+
ConfigurationParameterDescriptorEncoder().default(configuration_parameter) for configuration_parameter in obj.configuration_parameter_set
55+
]
56+
return super().default(obj)

tsp/configuration_set.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
"""ConfigurationSet class file."""
2424

25-
from tsp.configuration import Configuration
25+
import json
26+
from tsp.configuration import Configuration, ConfigurationEncoder
2627

2728

2829
# pylint: disable=too-few-public-methods
@@ -39,15 +40,17 @@ def __init__(self, params):
3940
for obj in params:
4041
self.configuration_set.append(Configuration(obj))
4142

43+
def __repr__(self) -> str:
44+
return 'ConfigurationSet({})'.format(', '.join(str(config) for config in self.configuration_set))
4245

43-
# pylint: disable=consider-using-f-string
44-
def to_string(self):
45-
'''
46-
to string method
47-
'''
48-
my_str = ''
49-
sep = ''
50-
for desc in self.configuration_set:
51-
my_str = my_str + '{0}{1}\n'.format(sep, desc.to_string())
52-
sep = ', '
53-
return my_str
46+
def to_json(self):
47+
return json.dumps(self, cls=ConfigurationSetEncoder, indent=4)
48+
49+
50+
class ConfigurationSetEncoder(json.JSONEncoder):
51+
def default(self, obj):
52+
if isinstance(obj, ConfigurationSet):
53+
return [
54+
ConfigurationEncoder().default(configuration) for configuration in obj.configuration_set
55+
]
56+
return super().default(obj)

tsp/configuration_source.py

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222

2323
"""ConfigurationSource class file."""
2424

25-
from tsp.configuration_parameter_descriptor_set import ConfigurationParameterDescriptorSet
25+
import json
26+
from tsp.configuration_parameter_descriptor_set import ConfigurationParameterDescriptorSet, ConfigurationParameterDescriptorSetEncoder
2627

2728
NAME_KEY = "name"
2829
DESCTIPION_KEY = "description"
@@ -71,19 +72,27 @@ def __init__(self, params):
7172
self.schema = params.get(SCHEMA_KEY)
7273
del params[SCHEMA_KEY]
7374

74-
# pylint: disable=consider-using-f-string
75-
def to_string(self):
76-
'''
77-
to_string
78-
'''
79-
my_str = "no parameter descriptor"
80-
if self.parameter_descriptors is not None:
81-
my_str = self.parameter_descriptors.to_string()
75+
def __repr__(self):
76+
return 'ConfigurationSource(id={}, name={}, description={}, parameter_descriptors={}, schema={})'.format(
77+
self.id,
78+
self.name,
79+
self.description,
80+
self.parameter_descriptors if self.parameter_descriptors is not None else 'None',
81+
obj.schema if obj.schema is not None else 'None')
82+
83+
def to_json(self):
84+
return json.dumps(self, cls=ConfigurationSourceEncoder, indent=4)
8285

83-
my_schema = "no schema"
84-
if self.schema is not None:
85-
my_schema = self.schema
8686

87-
return'Configuration Source[id={0}, name={1}, description: {2}, parameter_descriptor={3}, schema={4}]'.format(self.id,
88-
self.name, self.description, my_str, my_schema)
87+
class ConfigurationSourceEncoder(json.JSONEncoder):
88+
def default(self, obj):
89+
if isinstance(obj, ConfigurationSource):
90+
return {
91+
ID_KEY: obj.id,
92+
NAME_KEY: obj.name,
93+
DESCTIPION_KEY: obj.description,
94+
PARAM_DESC_KEY: ConfigurationParameterDescriptorSetEncoder().default(obj.parameter_descriptors) if isinstance(obj.parameter_descriptors, ConfigurationParameterDescriptorSet) else "None",
95+
SCHEMA_KEY: obj.schema if obj.schema is not None else 'None'
96+
}
97+
return super().default(obj)
8998

tsp/configuration_source_set.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
# SOFTWARE.
2222

2323
"""ConfigurationSourceSet class file."""
24-
25-
from tsp.configuration_source import ConfigurationSource
24+
import json
25+
from tsp.configuration_source import ConfigurationSource, ConfigurationSourceEncoder
2626

2727

2828
# pylint: disable=too-few-public-methods
@@ -39,16 +39,18 @@ def __init__(self, params):
3939
for obj in params:
4040
self.configuration_source_set.append(ConfigurationSource(obj))
4141

42-
# pylint: disable=consider-using-f-string
43-
def to_string(self):
44-
'''
45-
to string method
46-
'''
47-
my_str = ''
48-
sep = ''
49-
for desc in self.configuration_source_set:
50-
my_str = my_str + '{0}{1}\n'.format(sep, desc.to_string())
51-
sep = ', '
52-
return my_str
42+
def __repr__(self) -> str:
43+
return 'ConfigurationSourceSet({})'.format(', '.join(str(source) for source in self.configuration_source_set))
44+
45+
def to_json(self):
46+
return json.dumps(self, cls=ConfigurationSourceSetEncoder, indent=4)
47+
5348

49+
class ConfigurationSourceSetEncoder(json.JSONEncoder):
50+
def default(self, obj):
51+
if isinstance(obj, ConfigurationSourceSet):
52+
return [
53+
ConfigurationSourceEncoder().default(configuration_source) for configuration_source in obj.configuration_source_set
54+
]
55+
return super().default(obj)
5456

tsp_cli_client

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -483,17 +483,22 @@ if __name__ == "__main__":
483483
if not configuration_source_set or len(configuration_source_set.configuration_source_set) == 0:
484484
print('No configuration sources available')
485485
else:
486-
print(' {0}'.format(configuration_source_set.to_string()))
486+
print('Successfully listed configuration sources')
487+
print('-----------------------------------------')
488+
print(response.model.to_json())
487489
sys.exit(0)
488490
else:
489491
sys.exit(1)
490492

491493
if options.list_configuration_source:
492494
response = tsp_client.fetch_configuration_source(options.list_configuration_source)
493495
if response.status_code == 200:
494-
print(' {0}'.format(response.model.to_string()))
496+
print('Successfully listed configuration source')
497+
print('----------------------------------------')
498+
print(response.model.to_json())
495499
sys.exit(0)
496500
else:
501+
print('No such configuration source')
497502
sys.exit(1)
498503

499504
if options.list_configurations:
@@ -503,7 +508,9 @@ if __name__ == "__main__":
503508
if not configuration_set or len(configuration_set.configuration_set) == 0:
504509
print('No configurations loaded')
505510
else:
506-
print(' {0}'.format(configuration_set.to_string()))
511+
print('Successfully listed configurations')
512+
print('----------------------------------')
513+
print(response.model.to_json())
507514
sys.exit(0)
508515
else:
509516
sys.exit(1)
@@ -513,9 +520,12 @@ if __name__ == "__main__":
513520
if options.type_id is not None:
514521
response = tsp_client.fetch_configuration(options.type_id, options.list_configuration)
515522
if response.status_code == 200:
516-
print(' {0}'.format(response.model.to_string()))
523+
print('Successfully listed configuration')
524+
print('---------------------------------')
525+
print(response.model.to_json())
517526
sys.exit(0)
518527
else:
528+
print('No such configuration')
519529
sys.exit(1)
520530
else:
521531
print("No type id of configuration provided")
@@ -530,7 +540,9 @@ if __name__ == "__main__":
530540
if (params is not None):
531541
response = tsp_client.post_configuration(options.type_id, params)
532542
if response.status_code == 200:
533-
print(' {0}'.format(response.model.to_string()))
543+
print('Successfully loaded configuration')
544+
print('---------------------------------')
545+
print(response.model.to_json())
534546
sys.exit(0)
535547
else:
536548
sys.exit(1)
@@ -552,7 +564,9 @@ if __name__ == "__main__":
552564
if (params is not None):
553565
response = tsp_client.put_configuration(options.type_id, options.config_id, params)
554566
if response.status_code == 200:
555-
print(' {0}'.format(response.model.to_string()))
567+
print('Successfully updated configuration')
568+
print('---------------------------------')
569+
print(response.model.to_json())
556570
sys.exit(0)
557571
else:
558572
sys.exit(1)
@@ -573,7 +587,9 @@ if __name__ == "__main__":
573587
if options.type_id is not None:
574588
response = tsp_client.delete_configuration(options.type_id, options.delete_configuration)
575589
if response.status_code == 200:
576-
print(' {0}'.format(response.model.to_string()))
590+
print('Successfully deleted configuration')
591+
print('---------------------------------')
592+
print(response.model.to_json())
577593
sys.exit(0)
578594
else:
579595
sys.exit(1)

0 commit comments

Comments
 (0)