コード例 #1
0
    def test_create_row_template_with_default_values(self, determine_strategy, build_raw):
        # given:
        schema_template = MagicMock('schema_template')
        ingest_api = MagicMock(name='ingest_api')

        # and:
        schema_url = 'http://schema.sample.com/profile'
        self._mock_schema_lookup(schema_template, schema_url=schema_url, main_category='profile',
                                 object_type='profile_type')

        # and:
        build_raw.return_value = MagicMock('column_spec')
        determine_strategy.return_value = FakeConversion('')

        # and:
        workbook = Workbook()
        worksheet = workbook.create_sheet('profile')
        worksheet['A4'] = 'profile.name'

        # when:
        template_manager = TemplateManager(schema_template, ingest_api)
        template_manager.get_schema_url = MagicMock(return_value=schema_url)
        row_template = template_manager.create_row_template(worksheet)

        # then:
        content_defaults = row_template.default_values
        self.assertIsNotNone(content_defaults)
        self.assertEqual(schema_url, content_defaults.get('describedBy'))
        self.assertEqual('profile', content_defaults.get('schema_type'))
コード例 #2
0
    def test_create_row_template_with_default_values(self, determine_strategy):
        # given:
        schema_template = MagicMock('schema_template')
        ingest_api = MagicMock(name='mock_ingest_api')

        # and:
        domain_entity = "profile/profile_type"
        schema_url = "http://schema.sample.com/profile"
        schema_template.get_tabs_config = MagicMock()
        schema_template.lookup_metadata_schema_name_given_title = MagicMock(
            return_value="profile_type")
        schema_template.get_latest_schema = MagicMock(return_value=schema_url)
        schema = {
            "schema": {
                "domain_entity": domain_entity,
                "url": schema_url
            }
        }
        property_schema = {
            "description": "Property description",
            "value_type": "string"
        }
        spec_map = {"profile_type": schema, "profile.name": property_schema}
        schema_template.lookup_property_from_template = lambda key: spec_map.get(
            key)

        # and:
        determine_strategy.return_value = FakeConversion('')

        # and:
        workbook = Workbook()
        worksheet = workbook.create_sheet('profile')
        worksheet['A4'] = 'profile.name'
        ingest_worksheet = IngestWorksheet(worksheet)

        # when:
        template_manager = TemplateManager(schema_template, ingest_api)
        template_manager.get_schema_url = MagicMock(return_value=schema_url)
        row_template = template_manager.create_row_template(ingest_worksheet)

        # then:
        content_defaults = row_template.default_values
        self.assertIsNotNone(content_defaults)
        self.assertEqual(schema_url, content_defaults.get('describedBy'))
        self.assertEqual('profile', content_defaults.get('schema_type'))
コード例 #3
0
    def test_create_row_template_with_none_header(self, determine_strategy):
        # given:
        schema_template = MagicMock('schema_template')
        ingest_api = MagicMock(name='ingest_api')

        # and:
        do_nothing_strategy = FakeConversion('')
        determine_strategy.return_value = do_nothing_strategy

        # and:
        self._mock_schema_lookup(schema_template)

        # and:
        workbook = Workbook()
        worksheet = workbook.create_sheet('sample')
        worksheet['A4'] = None

        # when:
        template_manager = TemplateManager(schema_template, ingest_api)
        row_template = template_manager.create_row_template(worksheet)

        # then:
        self.assertEqual(0, len(row_template.cell_conversions))
コード例 #4
0
    def test_create_row_template(self, determine_strategy, build_raw):
        # given:
        schema_template = MagicMock(name='schema_template')
        ingest_api = MagicMock(name='ingest_api')

        # and:
        tabs_config = MagicMock('tabs_config')
        object_type = 'sample_object'
        tabs_config.get_key_for_label = MagicMock(return_value=object_type)
        schema_template.get_tabs_config = MagicMock(return_value=tabs_config)

        # and: set up column spec
        name_column_spec = MagicMock('name_column_spec')
        numbers_column_spec = MagicMock('numbers_column_spec')
        build_raw.side_effect = [name_column_spec, numbers_column_spec]

        # and: set up raw spec
        name_raw_spec = MagicMock('name_raw_spec')
        name_raw_parent_spec = MagicMock('name_raw_parent_spec')
        numbers_raw_spec = MagicMock('numbers_raw_spec')

        # TODO move the logic of creating the column spec to SchemaTemplate
        # and:
        schema = {'schema': {'domain_entity': 'main_category/subdomain'}}
        spec_map = {
            'user.profile.first_name': name_raw_spec,
            'user.profile': name_raw_parent_spec,
            'numbers': numbers_raw_spec,
            'user': schema
        }
        schema_template.lookup = lambda key: spec_map.get(key, None)

        # and:
        name_strategy = MagicMock('name_strategy')
        numbers_strategy = MagicMock('numbers_strategy')
        determine_strategy.side_effect = [name_strategy, numbers_strategy]

        # and: prepare worksheet
        workbook = Workbook()
        worksheet = workbook.create_sheet('sample')
        worksheet['A4'] = 'user.profile.first_name'
        worksheet['B4'] = 'numbers'

        # when:
        template_manager = TemplateManager(schema_template, ingest_api)
        row_template: RowTemplate = template_manager.create_row_template(worksheet)

        # then:
        expected_calls = [
            call('user.profile.first_name', 'sample_object', 'main_category', name_raw_spec,
                 order_of_occurence=1, parent=name_raw_parent_spec),
            call('numbers', 'sample_object', None, numbers_raw_spec, order_of_occurence=1, parent=None)
        ]
        build_raw.assert_has_calls(expected_calls)
        determine_strategy.assert_has_calls([call(name_column_spec), call(numbers_column_spec)])

        # and:
        self.assertIsNotNone(row_template)
        self.assertEqual(2, len(row_template.cell_conversions))
        self.assertTrue(name_strategy in row_template.cell_conversions)
        self.assertTrue(numbers_strategy in row_template.cell_conversions)
コード例 #5
0
    def test_create_row_template(self, determine_strategy, look_up):
        # given:
        template = MagicMock(name='schema_template')
        ingest_api = MagicMock(name='ingest_api')

        # and:
        concrete_type = 'user'
        template.get_tab_key = MagicMock(return_value=concrete_type)

        # and:
        spec_map = {
            'user': {
                'schema': {
                    'domain_entity': 'main_category/subdomain'
                }
            }
        }
        template.lookup = lambda key: spec_map.get(key, None)

        # and: set up column spec
        name_column_spec = MagicMock(name='name_column_spec')
        numbers_column_spec = MagicMock(name='numbers_column_spec')
        look_up.side_effect = [name_column_spec, numbers_column_spec]

        # and:
        name_strategy = MagicMock('name_strategy')
        numbers_strategy = MagicMock('numbers_strategy')
        determine_strategy.side_effect = [name_strategy, numbers_strategy]

        # and: prepare worksheet
        header_row_idx = 4
        workbook = Workbook()
        worksheet = workbook.create_sheet('sample')
        worksheet[f'A{header_row_idx}'] = 'user.profile.first_name'
        worksheet[f'B{header_row_idx}'] = 'numbers'

        ingest_worksheet = IngestWorksheet(worksheet,
                                           header_row_idx=header_row_idx)

        # when:
        template_manager = TemplateManager(template, ingest_api)
        row_template: RowTemplate = template_manager.create_row_template(
            ingest_worksheet)

        # then:
        expected_calls = [
            call(template,
                 'user.profile.first_name',
                 concrete_type,
                 context=concrete_type,
                 order_of_occurrence=1),
            call(template,
                 'numbers',
                 concrete_type,
                 context=concrete_type,
                 order_of_occurrence=1)
        ]
        look_up.assert_has_calls(expected_calls)
        determine_strategy.assert_has_calls(
            [call(name_column_spec),
             call(numbers_column_spec)])

        # and:
        self.assertIsNotNone(row_template)
        self.assertEqual('main_category', row_template.domain_type)
        self.assertEqual(concrete_type, row_template.concrete_type)
        self.assertEqual(2, len(row_template.cell_conversions))
        self.assertTrue(name_strategy in row_template.cell_conversions)
        self.assertTrue(numbers_strategy in row_template.cell_conversions)
コード例 #6
0
    def test_create_row_template_for_module_worksheet(self, determine_strategy,
                                                      look_up):
        # given:
        template = MagicMock(name='schema_template')
        ingest_api = MagicMock(name='ingest_api')

        # TODO define method in SchemaTemplate that returns domain and concrete types #module-tabs
        # and:
        concrete_type = 'product'
        template.get_tab_key = MagicMock(return_value=concrete_type)

        # and:
        spec_map = {
            'product': {
                'schema': {
                    'domain_entity': 'merchandise/product'
                }
            }
        }
        template.lookup = lambda key: spec_map.get(key, None)

        # and:
        template_mgr = TemplateManager(template, ingest_api)

        # and:
        workbook = create_test_workbook('Product - Reviews')
        reviews_worksheet = workbook.get_sheet_by_name('Product - Reviews')
        reviews_worksheet['A4'] = 'product.info.id'
        reviews_worksheet['B4'] = 'product.reviews.rating'

        # and: set up dummy look up results
        id_spec = MagicMock(name='id_spec')
        rating_spec = MagicMock(name='rating_spec')
        look_up.side_effect = [id_spec, rating_spec]

        # and: set up strategies
        id_strategy = MagicMock(name='id_strategy')
        rating_strategy = MagicMock(name='rating_strategy')
        determine_strategy.side_effect = {
            id_spec: id_strategy,
            rating_spec: rating_strategy
        }.get

        # when:
        row_template = template_mgr.create_row_template(
            IngestWorksheet(reviews_worksheet))

        # then:
        expected_calls = [
            call(template,
                 'product.info.id',
                 concrete_type,
                 order_of_occurrence=1,
                 context='product.reviews'),
            call(template,
                 'product.reviews.rating',
                 concrete_type,
                 order_of_occurrence=1,
                 context='product.reviews')
        ]
        look_up.assert_has_calls(expected_calls)

        # and:
        self.assertIsNotNone(row_template)
        self.assertIn(id_strategy, row_template.cell_conversions)
        self.assertIn(rating_strategy, row_template.cell_conversions)
コード例 #7
0
    def test_create_row_template(self, determine_strategy):
        # given:
        template = MagicMock(name='schema_template')
        ingest_api = MagicMock(name='mock_ingest_api')

        # and:
        concrete_type = "user"
        domain_entity = "main_category/subdomain"
        schema_url = "http://schema.sample.com/main_category"
        template.get_tabs_config = MagicMock()
        template.lookup_metadata_schema_name_given_title = MagicMock(
            return_value=concrete_type)
        template.get_latest_schema = MagicMock(return_value=schema_url)
        schema = {
            "schema": {
                "domain_entity": domain_entity,
                "url": schema_url
            }
        }
        property_one_schema = {
            "description": "Property one description",
            "value_type": "string"
        }
        property_two_schema = {
            "description": "Property two description",
            "value_type": "string"
        }
        spec_map = {
            concrete_type: schema,
            "user.profile.first_name": property_one_schema,
            "user.numbers": property_two_schema
        }
        template.lookup_property_from_template = lambda key: spec_map.get(key)

        # and:
        name_strategy = MagicMock('name_strategy')
        numbers_strategy = MagicMock('numbers_strategy')
        determine_strategy.side_effect = [name_strategy, numbers_strategy]

        # and: prepare worksheet
        header_row_idx = 4
        workbook = Workbook()
        worksheet = workbook.create_sheet('sample')
        worksheet[f'A{header_row_idx}'] = 'user.profile.first_name'
        worksheet[f'B{header_row_idx}'] = 'user.numbers'

        ingest_worksheet = IngestWorksheet(worksheet,
                                           header_row_idx=header_row_idx)

        # when:
        template_manager = TemplateManager(template, ingest_api)
        row_template: RowTemplate = template_manager.create_row_template(
            ingest_worksheet)

        # then:
        self.assertEqual(determine_strategy.call_count, 2)

        # and:
        self.assertIsNotNone(row_template)
        self.assertEqual('main_category', row_template.domain_type)
        self.assertEqual(concrete_type, row_template.concrete_type)
        self.assertEqual(2, len(row_template.cell_conversions))
        self.assertTrue(name_strategy in row_template.cell_conversions)
        self.assertTrue(numbers_strategy in row_template.cell_conversions)
コード例 #8
0
    def test_create_row_template_for_module_worksheet(self,
                                                      determine_strategy):
        # given:
        template = MagicMock(name='schema_template')
        ingest_api = MagicMock(name='mock_ingest_api')

        # and:
        spec_map = {
            'product': {
                'schema': {
                    'domain_entity': 'merchandise/product'
                }
            }
        }
        template.lookup_property_from_template = lambda key: spec_map.get(
            key, None)

        domain_entity = "merchandise/product"
        schema_url = "http://schema.sample.com/product"
        template.get_tabs_config = MagicMock()
        template.lookup_metadata_schema_name_given_title = MagicMock(
            return_value="product_type")
        template.get_latest_schema = MagicMock(return_value=schema_url)
        schema = {
            "schema": {
                "domain_entity": domain_entity,
                "url": schema_url
            }
        }
        property_one_schema = {
            "description": "Property one description",
            "value_type": "string"
        }
        property_two_schema = {
            "description": "Property two description",
            "value_type": "string"
        }
        spec_map = {
            "product_type": schema,
            "product.info.id": property_one_schema,
            "product.reviews.rating": property_two_schema
        }
        template.lookup_property_attributes_in_metadata = lambda key: spec_map.get(
            key)

        # and:
        template_mgr = TemplateManager(template, ingest_api)

        # and:
        workbook = create_test_workbook('Product - Reviews')
        reviews_worksheet = workbook['Product - Reviews']
        reviews_worksheet['A4'] = 'product.info.id'
        reviews_worksheet['B4'] = 'product.reviews.rating'

        # and: set up strategies
        id_strategy = MagicMock(name='id_strategy')
        rating_strategy = MagicMock(name='rating_strategy')
        determine_strategy.side_effect = [id_strategy, rating_strategy]

        # when:
        row_template = template_mgr.create_row_template(
            IngestWorksheet(reviews_worksheet))

        # and:
        self.assertIsNotNone(row_template)
        self.assertIn(id_strategy, row_template.cell_conversions)
        self.assertIn(rating_strategy, row_template.cell_conversions)
コード例 #9
0
ファイル: importer.py プロジェクト: achave11/ingest-client
 def do_import(self, worksheet, template: TemplateManager):
     row_template = template.create_row_template(worksheet)
     self.concrete_entity = template.get_concrete_entity_of_tab(
         worksheet.title)
     return self._import_using_row_template(template, worksheet,
                                            row_template)