def test_add_inferred_export_properties(self):
     props = set(['one', 'two'])
     self._add_props(props)
     schema = get_case_inferred_schema(self.domain, self.case_type)
     group_schema = schema.group_schemas[0]
     self.assertEqual(set([item.path[0].name for item in group_schema.items]), props)
     self._check_sql_props(props)
 def test_add_inferred_export_properties(self):
     props = set(['one', 'two'])
     self._add_props(props)
     schema = get_case_inferred_schema(self.domain, self.case_type)
     group_schema = schema.group_schemas[0]
     self.assertEqual(set([item.path[0].name for item in group_schema.items]), props)
     self._check_sql_props(props)
 def test_add_inferred_export_properties_system_with_transform(self):
     """
     Ensures that when we add a system property with redundant paths, it uses the item's transform
     """
     props = set(['user_id'])  # user_id maps to two system properties
     self._add_props(props)
     schema = get_case_inferred_schema(self.domain, self.case_type)
     group_schema = schema.group_schemas[0]
     self.assertEqual(len(group_schema.items), 1)
 def test_add_inferred_export_properties_system_with_transform(self):
     """
     Ensures that when we add a system property with redundant paths, it uses the item's transform
     """
     props = set(['user_id'])  # user_id maps to two system properties
     self._add_props(props)
     schema = get_case_inferred_schema(self.domain, self.case_type)
     group_schema = schema.group_schemas[0]
     self.assertEqual(len(group_schema.items), 1)
 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_case_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_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_case_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_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_case_inferred_schema(self.domain, self.case_type)
        group_schema = schema.group_schemas[0]
        self.assertEqual(
            set([item.path[0].name for item in group_schema.items]),
            combined_props)
        self.assertTrue(
            all([isinstance(item, ScalarItem)
                 for item in group_schema.items]), )
        self._check_sql_props(combined_props)
Exemplo n.º 8
0
def _cached_add_inferred_export_properties(sender, domain, case_type,
                                           properties):
    from corehq.apps.export.models import MAIN_TABLE, PathNode, CaseInferredSchema, 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(['.' not in prop
                for prop in properties]), 'Properties should not have periods'
    inferred_schema = get_case_inferred_schema(domain, case_type)
    if not inferred_schema:
        inferred_schema = CaseInferredSchema(
            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 = list(
            filter(
                lambda column: column.item.path == path and column.item.
                transform is None,
                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_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_case_inferred_schema(self.domain, self.case_type)
        group_schema = schema.group_schemas[0]
        self.assertEqual(
            set([item.path[0].name for item in group_schema.items]),
            combined_props
        )
        self.assertTrue(
            all([isinstance(item, ScalarItem) for item in group_schema.items]),
        )
        self._check_sql_props(combined_props)
 def test_get_case_inferred_schema_missing(self):
     result = get_case_inferred_schema(self.domain, 'not-here')
     self.assertIsNone(result)
 def test_get_case_inferred_schema(self):
     result = get_case_inferred_schema(self.domain, self.case_type)
     self.assertIsNotNone(result)
     self.assertEqual(result._id, self.inferred_schema._id)