示例#1
0
 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)
示例#2
0
 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)
示例#3
0
 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)
示例#4
0
    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)
示例#5
0
    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)
示例#6
0
    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)
示例#7
0
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()
示例#8
0
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()
示例#9
0
 def test_get_inferred_schema_missing(self):
     result = get_inferred_schema(self.domain, 'not-here')
     self.assertIsNone(result)
示例#10
0
 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)
示例#11
0
 def test_get_inferred_schema_missing(self):
     result = get_inferred_schema(self.domain, 'not-here')
     self.assertIsNone(result)
示例#12
0
 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)