def value2key(keys, val): if len(keys) == 1: if is_data(val): return val[keys[0]] elif is_sequence(val): return val[0] else: return val else: if is_data(val): return datawrap({k: val[k] for k in keys}) elif is_sequence(val): return datawrap(dict(zip(keys, val))) else: Log.error("do not know what to do here")
def value2key(keys, val): if len(keys) == 1: if isinstance(val, Mapping): return val[keys[0]] elif isinstance(val, (list, tuple)): return val[0] else: return val else: if isinstance(val, Mapping): return datawrap({k: val[k] for k in keys}) elif isinstance(val, (list, tuple)): return datawrap(dict(zip(keys, val))) else: Log.error("do not know what to do here")
def test_object_wrap_w_deep_path(self): d = SampleData() d.a = Data(c=3) dd = datawrap(d) self.assertEqual(dd["a.c"], 3) self.assertEqual(dd, {"a": {"c": 3}, "b": 30})
def add(self, val): val = datawrap(val) key = value2key(self._keys, val) if key == None: Log.error("Expecting key to be not None") try: d = self._data.get(key) except Exception as e: key = value2key(self._keys, val) if d is None: self._data[key] = unwrap(val) self.count += 1 elif d is not val: if self.fail_on_dup: Log.error( "{{new|json}} with key {{key|json}} already filled with {{old|json}}", key=key, new=val, old=self[val]) elif DEBUG: Log.warning( "key {{key|json}} already filled\nExisting\n{{existing|json|indent}}\nValue\n{{value|json|indent}}", key=key, existing=d, value=val)
def test_object_wrap(self): d = SampleData() dd = datawrap(d) self.assertEqual(dd["a"], 20) self.assertEqual(dd, {"a": 20, "b": 30}) self.assertIs(from_data(dd), dd)
def _get_managed_spot_requests(self): output = wrap([ datawrap(r) for r in self.ec2_conn.get_all_spot_instance_requests() if not r.tags.get("Name") or r.tags.get("Name").startswith(self.settings.ec2.instance.name) ]) return output
def _get_managed_instances(self): requests = UniqueIndex(["instance_id"], data=self._get_managed_spot_requests().filter(lambda r: r.instance_id!=None)) reservations = self.ec2_conn.get_all_instances() output = [] for res in reservations: for instance in res.instances: if instance.tags.get('Name', '').startswith(self.settings.ec2.instance.name) and instance._state.name == "running": instance.request = requests[instance.id] output.append(datawrap(instance)) return wrap(output)
def remove(self, val): key = value2key(self._keys, datawrap(val)) if key == None: Log.error("Expecting key to not be None") d = self._data.get(key) if d is None: # ALREADY GONE return else: del self._data[key] self.count -= 1
def _get_managed_instances(self): requests = UniqueIndex(["instance_id"], data=self._get_managed_spot_requests().filter( lambda r: r.instance_id != None)) reservations = self.ec2_conn.get_all_instances() output = [] for res in reservations: for instance in res.instances: if instance.tags.get('Name', '').startswith( self.settings.ec2.instance.name ) and instance._state.name == "running": instance.request = requests[instance.id] output.append(datawrap(instance)) return wrap(output)
def add(self, val): val = datawrap(val) key = value2key(self._keys, val) if key == None: Log.error("Expecting key to be not None") d = self._data.get(key) if d is None: self._data[key] = unwrap(val) self.count += 1 elif d is not val: if self.fail_on_dup: Log.error("{{new|json}} with key {{key|json}} already filled with {{old|json}}", key=key, new=val, old=self[val]) elif DEBUG: Log.warning("key {{key|json}} already filled\nExisting\n{{existing|json|indent}}\nValue\n{{value|json|indent}}", key=key, existing=d, value=val )
def _get_managed_spot_requests(self): output = wrap([datawrap(r) for r in self.ec2_conn.get_all_spot_instance_requests() if not r.tags.get("Name") or r.tags.get("Name").startswith(self.settings.ec2.instance.name)]) return output