blob: 188a9ce8fc583b9cd5ab5212f661560e9e0a6ff0 [file] [log] [blame]
Matteo Scandolo485b7132017-06-30 11:46:47 -07001from resources import RESOURCES
2
3class GRPCModelsAccessor:
4 """
5 This class provide the glue between the models managed by TOSCA and the ones living in xos-core
6 """
7
8 @staticmethod
9 def get_model_from_classname(class_name, data):
10 """
11 Give a Model Class Name and some data, check if that exits or instantiate a new one
12 """
13
Matteo Scandolo485b7132017-06-30 11:46:47 -070014 if data.get('name'):
15 used_key = 'name'
16 else:
17 used_key = data.keys()[0]
18
19 if class_name not in RESOURCES:
Matteo Scandolod12be212017-07-07 10:44:34 -070020 raise Exception('[XOS-TOSCA] The model you are trying to create (%s: %s, class: %s) is not know by xos-core' % (used_key, data[used_key], class_name))
Matteo Scandolo485b7132017-06-30 11:46:47 -070021
22 cls = RESOURCES[class_name]
23 models = cls.objects.filter(**{used_key: data[used_key]})
24
25 if len(models) == 1:
26 print "[XOS-Tosca] Model %s already exist, retrieving instance..." % data[used_key]
27 model = models[0]
28 elif len(models) == 0:
Matteo Scandolod12be212017-07-07 10:44:34 -070029
30 if 'must-exist' in data and data['must-exist']:
31 raise Exception("[XOS-TOSCA] Model %s:%s has property 'must-exist' but cannot be found" % (class_name, data[used_key]))
32
Matteo Scandolo485b7132017-06-30 11:46:47 -070033 model = cls.objects.new()
34 print "[XOS-Tosca] Model %s is new, creating new instance..." % data[used_key]
35 else:
36 raise Exception("[XOS-Tosca] Model %s has multiple instances, I can't handle it" % data[used_key])
37 return model