def test_simple(self): related_name = "relate26" data = { "desc": "some", related_name: { "dummy1": 1, "dummy2": "value1" } } prefix = "provider" root_name = "model_test26" model_builder = DynamicModelBuilder(model_name_prefix=prefix) model_builder.create_models_from_data(data, root_name) Object = get_dynamic_model(root_name) Objrelate = get_dynamic_model(related_name) prefixed_related_name = add_prefix_to_model_label(related_name, prefix) self.assertEqual(Object.__name__, add_prefix_to_model_label(root_name, prefix)) self.assertEqual(Objrelate.__name__, prefixed_related_name) instance_builder = DynamicDataInstances(model_name_prefix=prefix) inst = instance_builder.create_instances_from_data(data, root_name) rel_inst = getattr(inst, prefixed_related_name) self.assertTrue(hasattr(inst, prefixed_related_name)) self.assertTrue(hasattr(rel_inst, "dummy1")) self.assertEqual(rel_inst.dummy1, 1) self.assertEqual(rel_inst.dummy2, "value1")
def test_build_model_with_user_pk(self, mock): data = { "prop2": 1, } root_name = "user_test_1" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) ModelObject = get_dynamic_model(root_name) inst = ModelObject.objects.create(prop2=3, user_pk=self.user.pk)
def test_create_dynamic_data_simple(self): data = {"desc": "some", "relate1": {"dummy1": 1, "dummy2": "value1"}} root_name = "instance_test0" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) instance_builder = DynamicDataInstances() inst = instance_builder.create_instances_from_data(data, root_name) assert hasattr(inst, "relate1") assert hasattr(inst.relate1, "dummy1") assert inst.relate1.dummy1 == 1 assert inst.relate1.dummy2 == "value1"
def test_create_data_from_random_json(self): data = {"obj2": {"title": "title1", "obj3": {"title": "title2"}}} root_name = "instance_test2" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) instance_builder = DynamicDataInstances() instances = instance_builder.create_instances_from_data( data, root_name) obj2 = get_dynamic_model("obj2").objects.first() obj3 = get_dynamic_model("obj3").objects.first() assert obj3.title == "title2" assert obj2.title == "title1"
def test_instances_are_being_assigned_nested(self, mock): data = {"obj55": {"title8": "title32", "obj66": {"title7": "title44"}}} root_name = "user_test4" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) instance_builder = DynamicDataInstances(self.user.pk) instances = instance_builder.create_instances_from_data( data, root_name) obj2 = get_dynamic_model("obj55").objects.first() obj3 = get_dynamic_model("obj66").objects.first() self.assertEqual(obj3.user_pk, self.user.pk) self.assertEqual(obj2.user_pk, self.user.pk)
def _try_build_model_from_data_file(data_file: DataFile): data = data_file.read_data() root_label = get_root_label(data_file) modelbuilder = DynamicModelBuilder() try: modelbuilder.create_models_from_data(data, root_label) except Exception as e: logger.warning(e) raise e else: logger.info( f"Model building finished with {len(modelbuilder.built_objects)} objects created and " f" {len(modelbuilder.failed_objects)} failed") build_meta_objects(modelbuilder.built_objects, data_file)
def test_instances_are_being_assigned(self, mock): data = { "obj22": { "title": "title324", } } root_name = "user_test3" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) self.assertTrue(len(model_builder.failed_objects) is 0) instance_builder = DynamicDataInstances(self.user.pk) instances = instance_builder.create_instances_from_data( data, root_name) obj2 = get_dynamic_model("obj22").objects.first() self.assertEqual(obj2.user_pk, self.user.pk)
def test_relate_object_to_user_being_called(self, admin_mock): data = { "obj221": { "title": "title324", } } root_name = "user_test2" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) self.assertTrue(len(model_builder.failed_objects) is 0) instance_builder = DynamicDataInstances(self.user.pk) with patch.object(DynamicDataInstances, "relate_object_to_user") as relate_mock: instance_builder.create_instances_from_data(data, root_name) self.assertTrue(relate_mock.called)
def run_test_on_data(self, file): test_file_path = build_test_file_path(file) data = try_read_json_file(test_file_path) test_data_results_file = build_result_file_path(file) expected = try_read_json_file(test_data_results_file) root_name = file.replace(".json", "_root_obj") model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) instance_builder = DynamicDataInstances() instances = instance_builder.create_instances_from_data( data, root_name) instances_json = instances_to_list_of_json(instances) if expected: self.assertListEqual(instances_json, expected) else: write_to_file(json.dumps(instances_json, indent=4), test_data_results_file)
def test_create_data_dynamic_list_of_objects(self): data = { "prop2": 1, "prop1": "test2", "related_obj1": [ { "name": "name1", "value": 2 }, { "name": "name2", "value": 3 }, ] } root_name = "instance_test1" model_builder = DynamicModelBuilder() model_builder.create_models_from_data(data, root_name) instance_builder = DynamicDataInstances() instances = instance_builder.create_instances_from_data( data, root_name)