Scott Baker | 3841b37 | 2015-08-03 14:20:31 -0700 | [diff] [blame] | 1 | class XOSResource(object): |
| 2 | xos_base_class = "XOSResource" |
Scott Baker | 9fdb39f | 2015-08-04 16:44:18 -0700 | [diff] [blame] | 3 | xos_model = None |
Scott Baker | 3841b37 | 2015-08-03 14:20:31 -0700 | [diff] [blame] | 4 | provides = None |
| 5 | |
| 6 | def __init__(self, user, nodetemplate): |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 7 | self.dirty = False |
Scott Baker | 3841b37 | 2015-08-03 14:20:31 -0700 | [diff] [blame] | 8 | self.user = user |
| 9 | self.nodetemplate = nodetemplate |
Scott Baker | 3841b37 | 2015-08-03 14:20:31 -0700 | [diff] [blame] | 10 | |
Scott Baker | 3279525 | 2015-08-04 23:53:07 -0700 | [diff] [blame^] | 11 | 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 Baker | 1415294 | 2015-08-04 10:59:29 -0700 | [diff] [blame] | 18 | def get_requirements(self, relationship_name, throw_exception=False): |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 19 | """ helper to search the list of requirements for a particular relationship |
| 20 | type. |
| 21 | """ |
Scott Baker | 1415294 | 2015-08-04 10:59:29 -0700 | [diff] [blame] | 22 | |
| 23 | results = [] |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 24 | for reqs in self.nodetemplate.requirements: |
| 25 | for (k,v) in reqs.items(): |
| 26 | if (v["relationship"] == relationship_name): |
Scott Baker | 1415294 | 2015-08-04 10:59:29 -0700 | [diff] [blame] | 27 | results.append(v["node"]) |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 28 | |
Scott Baker | 1415294 | 2015-08-04 10:59:29 -0700 | [diff] [blame] | 29 | if (not results) and throw_exception: |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 30 | raise Exception("Failed to find requirement in %s using relationship %s" % (self.nodetemplate.name, relationship_name)) |
| 31 | |
Scott Baker | 1415294 | 2015-08-04 10:59:29 -0700 | [diff] [blame] | 32 | 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 Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 39 | |
| 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 Baker | 9fdb39f | 2015-08-04 16:44:18 -0700 | [diff] [blame] | 46 | 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 Baker | 3841b37 | 2015-08-03 14:20:31 -0700 | [diff] [blame] | 64 | pass |
| 65 | |
Scott Baker | 9fce62e | 2015-08-03 15:43:54 -0700 | [diff] [blame] | 66 | def info(self, s): |
| 67 | print s |
| 68 | |