def test_add_inferred_export_properties(self): props = set(['one', 'two']) self._add_props(props) schema = get_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(set(map(lambda item: item.path[0].name, group_schema.items)), props) self._check_sql_props(props)
def test_add_inferred_export_properties_system(self): """ Ensures that when we add a system property, it uses the system's item type """ props = set(['closed']) self._add_props(props) schema = get_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual(len(group_schema.items), 1) self.assertEqual(group_schema.items[0].__class__, ExportItem) self._check_sql_props(props)
def test_add_inferred_export_properties(self): props = set(['one', 'two']) add_inferred_export_properties( 'TestSend', self.domain, self.case_type, props, ) schema = get_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual( set(map(lambda item: item.path[0].name, group_schema.items)), props)
def test_add_inferred_export_properties_saved_schema(self): props = set(['one', 'two']) props_two = set(['one', 'three']) combined_props = props | props_two self._add_props(props) self._add_props(props_two) schema = get_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual( set(map(lambda item: item.path[0].name, group_schema.items)), combined_props ) self.assertTrue( all(map(lambda item: isinstance(item, ScalarItem), group_schema.items)), ) self._check_sql_props(combined_props)
def test_add_inferred_export_properties_saved_schema(self): props = set(['one', 'two']) props_two = set(['one', 'three']) combined_props = props | props_two self._add_props(props) self._add_props(props_two) schema = get_inferred_schema(self.domain, self.case_type) group_schema = schema.group_schemas[0] self.assertEqual( set(map(lambda item: item.path[0].name, group_schema.items)), combined_props) self.assertTrue( all( map(lambda item: isinstance(item, ScalarItem), group_schema.items)), ) self._check_sql_props(combined_props)
def add_inferred_export_properties(sender, domain, case_type, properties): from corehq.apps.export.models import MAIN_TABLE, PathNode, InferredSchema, ScalarItem """ Adds inferred properties to the inferred schema for a case type. :param: sender - The signal sender :param: domain :param: case_type :param: properties - An iterable of case properties to add to the inferred schema """ assert domain, 'Must have domain' assert case_type, 'Must have case type' assert all(map(lambda prop: '.' not in prop, properties)), 'Properties should not have periods' inferred_schema = get_inferred_schema(domain, case_type) if not inferred_schema: inferred_schema = InferredSchema( domain=domain, case_type=case_type, ) group_schema = inferred_schema.put_group_schema(MAIN_TABLE) for case_property in properties: path = [PathNode(name=case_property)] system_property_column = filter( lambda column: column.item.path == path, MAIN_CASE_TABLE_PROPERTIES, ) if system_property_column: assert len(system_property_column) == 1 column = system_property_column[0] group_schema.put_item(path, inferred_from=sender, item_cls=column.item.__class__) else: group_schema.put_item(path, inferred_from=sender, item_cls=ScalarItem) inferred_schema.save()
def _cached_add_inferred_export_properties(sender, domain, case_type, properties): from corehq.apps.export.models import MAIN_TABLE, PathNode, InferredSchema, ScalarItem """ Adds inferred properties to the inferred schema for a case type. :param: sender - The signal sender :param: domain :param: case_type :param: properties - An iterable of case properties to add to the inferred schema """ assert domain, 'Must have domain' assert case_type, 'Must have case type' assert all(map(lambda prop: '.' not in prop, properties)), 'Properties should not have periods' inferred_schema = get_inferred_schema(domain, case_type) if not inferred_schema: inferred_schema = InferredSchema( domain=domain, case_type=case_type, ) group_schema = inferred_schema.put_group_schema(MAIN_TABLE) add_properties_to_data_dictionary(domain, case_type, properties) for case_property in properties: path = [PathNode(name=case_property)] system_property_column = filter( lambda column: column.item.path == path, MAIN_CASE_TABLE_PROPERTIES, ) if system_property_column: assert len(system_property_column) == 1 column = system_property_column[0] group_schema.put_item(path, inferred_from=sender, item_cls=column.item.__class__) else: group_schema.put_item(path, inferred_from=sender, item_cls=ScalarItem) inferred_schema.save()
def test_get_inferred_schema_missing(self): result = get_inferred_schema(self.domain, 'not-here') self.assertIsNone(result)
def test_get_inferred_schema(self): result = get_inferred_schema(self.domain, self.case_type) self.assertIsNotNone(result) self.assertEqual(result._id, self.inferred_schema._id)