def set_fields(self, **kwargs): """ Universal integer setter for all fields. Values should be non-negative integers. Throws a RuntimeError if you try to set a non-existent field. :param kwargs: :return: self to support call chaining """ for k, v in kwargs.items(): try: # will toss an exception if field is not defined self.__getattribute__(k) if k == Constants.PROP_CAPACITIES or k == Constants.PROP_ALLOCATED_CAPACITIES: c = Capacities() v = c.from_json(json_string=v) elif k == Constants.PROP_LABELS or k == Constants.PROP_ALLOCATED_LABELS: l = Labels() v = l.from_json(json_string=v) elif k == Constants.PROP_CAPACITY_HINTS: ch = CapacityHints() v = ch.from_json(json_string=v) self.__setattr__(k, v) except AttributeError: raise RuntimeError( f"Unable to set field {k} of reservation, no such field available" ) return self
def testLabelAssignment(self): c = Labels(mac=['0C:42:A1:BE:8F:D5', '0C:42:A1:BE:8F:E9'], bdf=['0000:41:00.0', '0000:41:00.1']) self.assertEqual(c.bdf, ['0000:41:00.0', '0000:41:00.1']) s = '{"bdf": ["0000:41:00.0", "0000:41:00.1"], ' \ '"ipv4": ["192.168.1.1", "192.168.1.2"], ' \ '"vlan": ["100", "101", "102"]}' l1 = Labels.from_json(s) self.assertEqual(l1.vlan, ["100", "101", "102"]) print(s) print(l1.to_json()) self.assertEqual(l1.to_json(), s)
def from_json(cls, json_string: str): return Gateway(Labels.from_json(json_string))