def _get_typed_arg_value(self, given_value, param_def, strict): """Returns a service operation argument value, based on a given value and param schema definition. """ param_type = param_def["type"] if isinstance(given_value, unicode): # Convert all unicode to str in UTF-8 given_value = given_value.encode( "utf8") # Make all unicode into str if isinstance(given_value, IonObjectBase) and ( given_value._get_type() == param_type or param_type in given_value._get_extends()): return given_value elif is_ion_object_dict(given_value) and ( param_type == "NoneType" or hasattr(objects, param_type)): return self.create_ion_object(given_value) elif param_type in ("str", "bool", "int", "float", "list", "dict", "NoneType"): arg_val = get_typed_value(given_value, targettype=param_type, strict=strict) return arg_val else: raise BadRequest("Cannot convert param value to type %s" % param_type)
def _resource_assign_org(self, cfg, res_id): """ Shares the resource in the given orgs. Supports bulk. """ org_ids = cfg.get(KEY_ORGS, None) if org_ids: org_ids = get_typed_value(org_ids, targettype="simplelist") for org_id in org_ids: org_res_id = self.resource_ids[org_id] svc_client = self._get_service_client("org_management") svc_client.share_resource(org_res_id, res_id, headers=self._get_system_actor_headers())
def _get_typed_arg_value(self, given_value, param_def, strict): """Returns a service operation argument value, based on a given value and param schema definition. """ param_type = param_def["type"] if isinstance(given_value, unicode): # Convert all unicode to str in UTF-8 given_value = given_value.encode("utf8") # Make all unicode into str if isinstance(given_value, IonObjectBase) and (given_value._get_type() == param_type or param_type in given_value._get_extends()): return given_value elif is_ion_object_dict(given_value) and (param_type == "NoneType" or hasattr(objects, param_type)): return self.create_ion_object(given_value) elif param_type in ("str", "bool", "int", "float", "list", "dict", "NoneType"): arg_val = get_typed_value(given_value, targettype=param_type, strict=strict) return arg_val else: raise BadRequest("Cannot convert param value to type %s" % param_type)
def _resource_assign_org(self, cfg, res_id): """ Shares the resource in the given orgs. Supports bulk. """ org_ids = cfg.get(KEY_ORGS, None) if org_ids: org_ids = get_typed_value(org_ids, targettype="simplelist") for org_id in org_ids: org_res_id = self.resource_ids[org_id] if self.bulk and res_id in self.bulk_resources: # Note: org_id is alias, res_id is internal ID org_obj = self._get_resource_obj(org_id) res_obj = self._get_resource_obj(res_id) # Create association to given Org assoc_obj = self._create_association(org_obj, PRED.hasResource, res_obj, support_bulk=True) else: svc_client = self._get_service_client("org_management") svc_client.share_resource(org_res_id, res_id, headers=self._get_system_actor_headers())
def test_get_typed_value(self): # TEST: Integers ret_val = get_typed_value(999, targettype="int", strict=True) self.assertEqual(ret_val, 999) with self.assertRaises(BadRequest): get_typed_value("999", targettype="int", strict=True) with self.assertRaises(BadRequest): get_typed_value("999.9", targettype="int", strict=False) with self.assertRaises(BadRequest): get_typed_value(None, targettype="int", strict=False) with self.assertRaises(BadRequest): get_typed_value("", targettype="int", strict=False) ret_val = get_typed_value("999", targettype="int", strict=False) self.assertEqual(ret_val, 999) long_val = 9999999999999999999 self.assertEqual(type(long_val), long) ret_val = get_typed_value(long_val, targettype="int", strict=True) self.assertEqual(ret_val, long_val) schema_entry = dict(type="int") ret_val = get_typed_value(999, schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, 999) # TEST: Float ret_val = get_typed_value(999.9, targettype="float", strict=True) self.assertEqual(ret_val, 999.9) with self.assertRaises(BadRequest): get_typed_value("999.9", targettype="float", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="float", strict=False) with self.assertRaises(BadRequest): get_typed_value("", targettype="float", strict=False) ret_val = get_typed_value("999.9", targettype="float", strict=False) self.assertEqual(ret_val, 999.9) ret_val = get_typed_value("999", targettype="float", strict=False) self.assertEqual(ret_val, 999.0) # TEST: String ret_val = get_typed_value("foo", targettype="str", strict=True) self.assertEqual(ret_val, "foo") with self.assertRaises(BadRequest): get_typed_value(999, targettype="str", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="str", strict=True) ret_val = get_typed_value(999, targettype="str", strict=False) self.assertEqual(ret_val, "999") ret_val = get_typed_value(True, targettype="str", strict=False) self.assertEqual(ret_val, "True") unicode_val = u'foo \u20ac foo' ret_val = get_typed_value(unicode_val, targettype="str", strict=True) self.assertEqual(type(ret_val), str) self.assertEqual(ret_val, "foo \xe2\x82\xac foo") # TEST: Bool ret_val = get_typed_value(True, targettype="bool", strict=True) self.assertEqual(ret_val, True) ret_val = get_typed_value(False, targettype="bool", strict=True) self.assertEqual(ret_val, False) with self.assertRaises(BadRequest): get_typed_value("True", targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(123, targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(0, targettype="bool", strict=True) ret_val = get_typed_value("True", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("true", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("TRUE", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("1", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value(1, targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("False", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("FALSE", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("false", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("0", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value(None, targettype="bool", strict=False) self.assertEqual(ret_val, False) with self.assertRaises(BadRequest): get_typed_value("F", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value("Falsy", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value("Truey", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value(" True", targettype="bool", strict=False) # TEST: List list_val = [1, True, "foo"] ret_val = get_typed_value(list_val, targettype="list", strict=True) self.assertEqual(ret_val, list_val) ret_val = get_typed_value([], targettype="list", strict=True) self.assertEqual(ret_val, []) with self.assertRaises(BadRequest): get_typed_value(None, targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value("[]", targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value(tuple(), targettype="list", strict=True) ret_val = get_typed_value(1, targettype="list", strict=False) self.assertEqual(ret_val, [1]) ret_val = get_typed_value(tuple(list_val), targettype="list", strict=False) self.assertEqual(ret_val, list_val) ret_val = get_typed_value(set(list_val), targettype="list", strict=False) self.assertEqual(type(ret_val), list) self.assertEqual(set(ret_val), set(list_val)) ret_val = get_typed_value("1", targettype="list", strict=False) self.assertEqual(ret_val, ["1"]) ret_val = get_typed_value("a,b,c", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", "c"]) ret_val = get_typed_value("[a,b,c]", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", "c"]) ret_val = get_typed_value("['a','b',3]", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", 3]) ret_val = get_typed_value("[]", targettype="list", strict=False) self.assertEqual(ret_val, []) ret_val = get_typed_value(None, targettype="list", strict=False) self.assertEqual(ret_val, [None]) ret_val = get_typed_value(True, targettype="list", strict=False) self.assertEqual(ret_val, [True]) # TEST: Simplelist ret_val = get_typed_value("a,b,c", targettype="simplelist") self.assertEqual(ret_val, ["a", "b", "c"]) # TEST: Dict dict_val = {'a': 1, 'b': True} ret_val = get_typed_value(dict_val, targettype="dict", strict=True) self.assertEqual(ret_val, dict_val) ret_val = get_typed_value({}, targettype="dict", strict=True) self.assertEqual(ret_val, {}) with self.assertRaises(BadRequest): get_typed_value(None, targettype="dict", strict=True) with self.assertRaises(BadRequest): get_typed_value("{}", targettype="dict", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="dict", strict=True) ret_val = get_typed_value("{}", targettype="dict", strict=False) self.assertEqual(ret_val, {}) ret_val = get_typed_value("{'a': 1, 'b': True}", targettype="dict", strict=False) self.assertEqual(ret_val, dict_val) ret_val = get_typed_value("a: 1, b: c, c: True", targettype="dict", strict=False) self.assertEqual(ret_val, {'a': 1, 'b': 'c', 'c': True}) ret_val = get_typed_value("a.x: 1, a.y: 2.2, b: false", targettype="dict", strict=False) self.assertEqual(ret_val, {'a': {'x': 1, 'y': 2.2}, 'b': 'false'}) # TEST: None ret_val = get_typed_value(None, targettype="NoneType", strict=True) self.assertEqual(ret_val, None) ret_val = get_typed_value(1, targettype="NoneType", strict=True) self.assertEqual(ret_val, 1) ret_val = get_typed_value(True, targettype="NoneType", strict=True) self.assertEqual(ret_val, True) ret_val = get_typed_value("foo", targettype="NoneType", strict=True) self.assertEqual(ret_val, "foo") ret_val = get_typed_value("None", targettype="NoneType", strict=True) self.assertEqual(ret_val, "None") ret_val = get_typed_value("None", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("NONE", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("none", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("Null", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("NULL", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("null", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value(1, targettype="NoneType", strict=False) self.assertEqual(ret_val, 1) ret_val = get_typed_value("1", targettype="NoneType", strict=False) self.assertEqual(ret_val, 1) ret_val = get_typed_value(1.1, targettype="NoneType", strict=False) self.assertEqual(ret_val, 1.1) ret_val = get_typed_value("1.1", targettype="NoneType", strict=False) self.assertEqual(ret_val, 1.1) # TEST: Enum from interface.objects import SampleEnum schema_entry = dict(type="int", enum_type="SampleEnum") ret_val = get_typed_value(SampleEnum.MONDAY, schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, SampleEnum.MONDAY) ret_val = get_typed_value("MONDAY", schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, SampleEnum.MONDAY) with self.assertRaises(BadRequest): get_typed_value("Monday", schema_entry=schema_entry, strict=True) ret_val = get_typed_value("MONDAY", schema_entry=schema_entry, strict=False) self.assertEqual(ret_val, SampleEnum.MONDAY) ret_val = get_typed_value("Monday", schema_entry=schema_entry, strict=False) self.assertEqual(ret_val, SampleEnum.MONDAY) with self.assertRaises(BadRequest): get_typed_value("HOLIDAY", schema_entry=schema_entry) # TEST: Error conditions with self.assertRaises(BadRequest): get_typed_value(1) with self.assertRaises(BadRequest): get_typed_value(1, targettype="FOO")
def create_object_from_cfg(self, cfg, objtype, key="resource", prefix="", existing_obj=None): """ Construct an IonObject of a determined type from given config dict with attributes. Convert all attributes according to their schema target type. Supports nested objects. Supports edit of objects of same type. """ log.trace("Create object type=%s, prefix=%s", objtype, prefix) if objtype == "dict": schema = None else: schema = self._get_object_class(objtype)._schema obj_fields = {} # Attributes for IonObject creation as dict nested_done = set() # Names of attributes with nested objects already created obj_cfg = get_safe(cfg, key) for subkey, value in obj_cfg.iteritems(): if subkey.startswith(prefix): attr = subkey[len(prefix):] if '.' in attr: # We are a parent entry # TODO: Make sure to not create nested object multiple times slidx = attr.find('.') nested_obj_field = attr[:slidx] parent_field = attr[:slidx+1] nested_prefix = prefix + parent_field # prefix plus nested object name if '[' in nested_obj_field and nested_obj_field[-1] == ']': sqidx = nested_obj_field.find('[') nested_obj_type = nested_obj_field[sqidx+1:-1] nested_obj_field = nested_obj_field[:sqidx] elif objtype == "dict": nested_obj_type = "dict" else: nested_obj_type = schema[nested_obj_field]['type'] # Make sure to not create the same nested object twice if parent_field in nested_done: continue # Support direct indexing in a list list_idx = -1 if nested_obj_type.startswith("list/"): _, list_idx, nested_obj_type = nested_obj_type.split("/") list_idx = int(list_idx) log.trace("Get nested object field=%s type=%s, prefix=%s", nested_obj_field, nested_obj_type, prefix) nested_obj = self.create_object_from_cfg(cfg, nested_obj_type, key, nested_prefix) if list_idx >= 0: my_list = obj_fields.setdefault(nested_obj_field, []) if list_idx >= len(my_list): my_list[len(my_list):list_idx] = [None]*(list_idx-len(my_list)+1) my_list[list_idx] = nested_obj else: obj_fields[nested_obj_field] = nested_obj nested_done.add(parent_field) elif objtype == "dict": # TODO: What about type? obj_fields[attr] = value elif attr in schema: # We are the leaf attribute try: if value: fieldvalue = get_typed_value(value, schema[attr]) obj_fields[attr] = fieldvalue except Exception: log.warn("Object type=%s, prefix=%s, field=%s cannot be converted to type=%s. Value=%s", objtype, prefix, attr, schema[attr]['type'], value, exc_info=True) #fieldvalue = str(fieldvalue) else: # warn about unknown fields just once -- not on each row log.warn("Skipping unknown field in %s: %s%s", objtype, prefix, attr) if objtype == "dict": obj = obj_fields else: if existing_obj: # Edit attributes if existing_obj.type_ != objtype: raise Inconsistent("Cannot edit resource. Type mismatch old=%s, new=%s" % (existing_obj.type_, objtype)) # TODO: Don't edit empty nested attributes for attr in list(obj_fields.keys()): if not obj_fields[attr]: del obj_fields[attr] for attr in ('alt_ids','_id','_rev','type_'): if attr in obj_fields: del obj_fields[attr] existing_obj.__dict__.update(obj_fields) log.trace("Update object type %s using field names %s", objtype, obj_fields.keys()) obj = existing_obj else: if cfg.get(KEY_ID, None) and 'alt_ids' in schema: if 'alt_ids' in obj_fields: obj_fields['alt_ids'].append("PRE:"+cfg[KEY_ID]) else: obj_fields['alt_ids'] = ["PRE:"+cfg[KEY_ID]] log.trace("Create object type %s from field names %s", objtype, obj_fields.keys()) obj = IonObject(objtype, **obj_fields) return obj
def test_get_typed_value(self): # TEST: Integers ret_val = get_typed_value(999, targettype="int", strict=True) self.assertEqual(ret_val, 999) with self.assertRaises(BadRequest): get_typed_value("999", targettype="int", strict=True) with self.assertRaises(BadRequest): get_typed_value("999.9", targettype="int", strict=False) with self.assertRaises(BadRequest): get_typed_value(None, targettype="int", strict=False) with self.assertRaises(BadRequest): get_typed_value("", targettype="int", strict=False) ret_val = get_typed_value("999", targettype="int", strict=False) self.assertEqual(ret_val, 999) long_val = 9999999999999999999 self.assertEqual(type(long_val), long) ret_val = get_typed_value(long_val, targettype="int", strict=True) self.assertEqual(ret_val, long_val) schema_entry = dict(type="int") ret_val = get_typed_value(999, schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, 999) # TEST: Float ret_val = get_typed_value(999.9, targettype="float", strict=True) self.assertEqual(ret_val, 999.9) with self.assertRaises(BadRequest): get_typed_value("999.9", targettype="float", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="float", strict=False) with self.assertRaises(BadRequest): get_typed_value("", targettype="float", strict=False) ret_val = get_typed_value("999.9", targettype="float", strict=False) self.assertEqual(ret_val, 999.9) # TEST: String ret_val = get_typed_value("foo", targettype="str", strict=True) self.assertEqual(ret_val, "foo") with self.assertRaises(BadRequest): get_typed_value(999, targettype="str", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="str", strict=True) ret_val = get_typed_value(999, targettype="str", strict=False) self.assertEqual(ret_val, "999") ret_val = get_typed_value(True, targettype="str", strict=False) self.assertEqual(ret_val, "True") unicode_val = u'foo \u20ac foo' ret_val = get_typed_value(unicode_val, targettype="str", strict=True) self.assertEqual(type(ret_val), str) self.assertEqual(ret_val, "foo \xe2\x82\xac foo") # TEST: Bool ret_val = get_typed_value(True, targettype="bool", strict=True) self.assertEqual(ret_val, True) ret_val = get_typed_value(False, targettype="bool", strict=True) self.assertEqual(ret_val, False) with self.assertRaises(BadRequest): get_typed_value("True", targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(None, targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(123, targettype="bool", strict=True) with self.assertRaises(BadRequest): get_typed_value(0, targettype="bool", strict=True) ret_val = get_typed_value("True", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("true", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("TRUE", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("1", targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value(1, targettype="bool", strict=False) self.assertEqual(ret_val, True) ret_val = get_typed_value("False", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("FALSE", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("false", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("0", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value("", targettype="bool", strict=False) self.assertEqual(ret_val, False) ret_val = get_typed_value(None, targettype="bool", strict=False) self.assertEqual(ret_val, False) with self.assertRaises(BadRequest): get_typed_value("F", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value("Falsy", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value("Truey", targettype="bool", strict=False) with self.assertRaises(BadRequest): get_typed_value(" True", targettype="bool", strict=False) # TEST: List list_val = [1, True, "foo"] ret_val = get_typed_value(list_val, targettype="list", strict=True) self.assertEqual(ret_val, list_val) ret_val = get_typed_value([], targettype="list", strict=True) self.assertEqual(ret_val, []) with self.assertRaises(BadRequest): get_typed_value(None, targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value("[]", targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="list", strict=True) with self.assertRaises(BadRequest): get_typed_value(tuple(), targettype="list", strict=True) ret_val = get_typed_value(1, targettype="list", strict=False) self.assertEqual(ret_val, [1]) ret_val = get_typed_value(tuple(list_val), targettype="list", strict=False) self.assertEqual(ret_val, list_val) ret_val = get_typed_value(set(list_val), targettype="list", strict=False) self.assertEqual(type(ret_val), list) self.assertEqual(set(ret_val), set(list_val)) ret_val = get_typed_value("1", targettype="list", strict=False) self.assertEqual(ret_val, ["1"]) ret_val = get_typed_value("a,b,c", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", "c"]) ret_val = get_typed_value("[a,b,c]", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", "c"]) ret_val = get_typed_value("['a','b',3]", targettype="list", strict=False) self.assertEqual(ret_val, ["a", "b", 3]) ret_val = get_typed_value("[]", targettype="list", strict=False) self.assertEqual(ret_val, []) ret_val = get_typed_value(None, targettype="list", strict=False) self.assertEqual(ret_val, [None]) ret_val = get_typed_value(True, targettype="list", strict=False) self.assertEqual(ret_val, [True]) # TEST: Simplelist ret_val = get_typed_value("a,b,c", targettype="simplelist") self.assertEqual(ret_val, ["a", "b", "c"]) # TEST: Dict dict_val = {'a': 1, 'b': True} ret_val = get_typed_value(dict_val, targettype="dict", strict=True) self.assertEqual(ret_val, dict_val) ret_val = get_typed_value({}, targettype="dict", strict=True) self.assertEqual(ret_val, {}) with self.assertRaises(BadRequest): get_typed_value(None, targettype="dict", strict=True) with self.assertRaises(BadRequest): get_typed_value("{}", targettype="dict", strict=True) with self.assertRaises(BadRequest): get_typed_value("", targettype="dict", strict=True) ret_val = get_typed_value("{}", targettype="dict", strict=False) self.assertEqual(ret_val, {}) ret_val = get_typed_value("{'a': 1, 'b': True}", targettype="dict", strict=False) self.assertEqual(ret_val, dict_val) ret_val = get_typed_value("a: 1, b: c, c: True", targettype="dict", strict=False) self.assertEqual(ret_val, {'a': 1, 'b': 'c', 'c': True}) ret_val = get_typed_value("a.x: 1, a.y: 2.2, b: false", targettype="dict", strict=False) self.assertEqual(ret_val, {'a': {'x': 1, 'y': 2.2}, 'b': 'false'}) # TEST: None ret_val = get_typed_value(None, targettype="NoneType", strict=True) self.assertEqual(ret_val, None) ret_val = get_typed_value(1, targettype="NoneType", strict=True) self.assertEqual(ret_val, 1) ret_val = get_typed_value(True, targettype="NoneType", strict=True) self.assertEqual(ret_val, True) ret_val = get_typed_value("foo", targettype="NoneType", strict=True) self.assertEqual(ret_val, "foo") ret_val = get_typed_value("None", targettype="NoneType", strict=True) self.assertEqual(ret_val, "None") ret_val = get_typed_value("None", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("NONE", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("none", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("Null", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("NULL", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("null", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value("", targettype="NoneType", strict=False) self.assertEqual(ret_val, None) ret_val = get_typed_value(1, targettype="NoneType", strict=False) self.assertEqual(ret_val, 1) ret_val = get_typed_value("1", targettype="NoneType", strict=False) self.assertEqual(ret_val, 1) ret_val = get_typed_value(1.1, targettype="NoneType", strict=False) self.assertEqual(ret_val, 1.1) ret_val = get_typed_value("1.1", targettype="NoneType", strict=False) self.assertEqual(ret_val, 1.1) # TEST: Enum from interface.objects import SampleEnum schema_entry = dict(type="int", enum_type="SampleEnum") ret_val = get_typed_value(SampleEnum.MONDAY, schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, SampleEnum.MONDAY) ret_val = get_typed_value("MONDAY", schema_entry=schema_entry, strict=True) self.assertEqual(ret_val, SampleEnum.MONDAY) with self.assertRaises(BadRequest): get_typed_value("Monday", schema_entry=schema_entry, strict=True) ret_val = get_typed_value("MONDAY", schema_entry=schema_entry, strict=False) self.assertEqual(ret_val, SampleEnum.MONDAY) ret_val = get_typed_value("Monday", schema_entry=schema_entry, strict=False) self.assertEqual(ret_val, SampleEnum.MONDAY) with self.assertRaises(BadRequest): get_typed_value("HOLIDAY", schema_entry=schema_entry) # TEST: Error conditions with self.assertRaises(BadRequest): get_typed_value(1) with self.assertRaises(BadRequest): get_typed_value(1, targettype="FOO")