blob: 1696ccb0dc08a901a7171ddee49d408cb6102d5e [file] [log] [blame]
Scott Baker3841b372015-08-03 14:20:31 -07001class XOSResource(object):
2 xos_base_class = "XOSResource"
Scott Baker9fdb39f2015-08-04 16:44:18 -07003 xos_model = None
Scott Baker3841b372015-08-03 14:20:31 -07004 provides = None
5
6 def __init__(self, user, nodetemplate):
Scott Baker9fce62e2015-08-03 15:43:54 -07007 self.dirty = False
Scott Baker3841b372015-08-03 14:20:31 -07008 self.user = user
9 self.nodetemplate = nodetemplate
Scott Baker3841b372015-08-03 14:20:31 -070010
Scott Baker32795252015-08-04 23:53:07 -070011 def get_all_required_node_names(self):
12 results = []
13 for reqs in self.nodetemplate.requirements:
14 for (k,v) in reqs.items():
15 results.append(v["node"])
16 return results
17
Scott Baker14152942015-08-04 10:59:29 -070018 def get_requirements(self, relationship_name, throw_exception=False):
Scott Baker9fce62e2015-08-03 15:43:54 -070019 """ helper to search the list of requirements for a particular relationship
20 type.
21 """
Scott Baker14152942015-08-04 10:59:29 -070022
23 results = []
Scott Baker9fce62e2015-08-03 15:43:54 -070024 for reqs in self.nodetemplate.requirements:
25 for (k,v) in reqs.items():
26 if (v["relationship"] == relationship_name):
Scott Baker14152942015-08-04 10:59:29 -070027 results.append(v["node"])
Scott Baker9fce62e2015-08-03 15:43:54 -070028
Scott Baker14152942015-08-04 10:59:29 -070029 if (not results) and throw_exception:
Scott Baker9fce62e2015-08-03 15:43:54 -070030 raise Exception("Failed to find requirement in %s using relationship %s" % (self.nodetemplate.name, relationship_name))
31
Scott Baker14152942015-08-04 10:59:29 -070032 return results
33
34 def get_requirement(self, relationship_name, throw_exception=False):
35 reqs = self.get_requirements(relationship_name, throw_exception)
36 if not reqs:
37 return None
38 return reqs[0]
Scott Baker9fce62e2015-08-03 15:43:54 -070039
40 def get_xos_object(self, cls, **kwargs):
41 objs = cls.objects.filter(**kwargs)
42 if not objs:
43 raise Exception("Failed to find %s filtered by %s" % (cls.__name__, str(kwargs)))
44 return objs[0]
45
Scott Baker9fdb39f2015-08-04 16:44:18 -070046 def get_existing_objs(self):
47 return self.xos_model.objects.filter(name = self.nodetemplate.name)
48
49 def get_xos_args(self):
50 return {}
51
52 def create_or_update(self):
53 existing_objs = self.get_existing_objs()
54 if existing_objs:
55 self.info("%s %s already exists" % (self.xos_model.__name__, self.nodetemplate.name))
56 self.update(existing_objs[0])
57 else:
58 self.create()
59
60 def create(self):
61 raise Exception("abstract method -- must override")
62
63 def update(self, obj):
Scott Baker3841b372015-08-03 14:20:31 -070064 pass
65
Scott Baker9fce62e2015-08-03 15:43:54 -070066 def info(self, s):
67 print s
68