Beispiel #1
0
    def test_tag_for_table_zero_values_should_set_all_available_fields(  # noqa:E501
            self):  # noqa:E125
        metadata_def = utils.Utils.get_metadata_def_obj(self.__MODULE_PATH)

        factory = datacatalog_tag_factory.DataCatalogTagFactory(metadata_def)

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'template_name'

        tables_dict = {
            'creator': 'creator_test',
            'owner': 'owner_test',
            'update_user': '******',
            'num_rows': 0,
            'table_size_MB': 0
        }

        tag = factory. \
            make_tag_for_table_metadata(tag_template, tables_dict, 'schema')
        self.assertEqual('schema', tag.fields['schema_name'].string_value)
        self.assertEqual('creator_test',
                         tag.fields['table_creator'].string_value)
        self.assertEqual('owner_test', tag.fields['table_owner'].string_value)
        self.assertEqual('update_user_test',
                         tag.fields['table_update_user'].string_value)
        self.assertEqual(0, tag.fields['num_rows'].double_value)
        self.assertEqual(0, tag.fields['table_size_MB'].double_value)
    def __create_tag_template(cls):
        template = datacatalog.TagTemplate()

        tag_template_id = 'template'

        template.name = 'template name'

        template.display_name = 'template display name'

        bool_field = datacatalog.TagTemplateField()
        bool_field.type.primitive_type = cls.__BOOL_TYPE
        template.fields['bool-field'] = bool_field

        double_field = datacatalog.TagTemplateField()
        double_field.type.primitive_type = cls.__DOUBLE_TYPE
        template.fields['double-field'] = double_field

        string_field = datacatalog.TagTemplateField()
        string_field.type.primitive_type = cls.__STRING_TYPE
        template.fields['string-field'] = string_field

        timestamp_field = datacatalog.TagTemplateField()
        timestamp_field.type.primitive_type = cls.__TIMESTAMP_TYPE
        template.fields['timestamp-field'] = timestamp_field

        enum_value = datacatalog.FieldType.EnumType.EnumValue()
        enum_value.display_name = 'Test ENUM Value'
        enum_field = datacatalog.TagTemplateField()
        enum_field.type.enum_type.allowed_values.append(enum_value)
        template.fields['enum-field'] = enum_field

        return tag_template_id, template
Beispiel #3
0
    def create_fake_tag_template(cls):
        tag_template = datacatalog.TagTemplate()

        tag_template_id = 'template'

        tag_template.name = 'template name'

        tag_template.display_name = 'template display name'

        tag_template.fields['test-bool-field']. \
            type.primitive_type = Utils.__BOOL_TYPE
        tag_template.fields['test-bool-field']. \
            display_name = 'Bool Field'

        tag_template.fields['test-double-field']. \
            type.primitive_type = Utils.__DOUBLE_TYPE
        tag_template.fields['test-double-field']. \
            display_name = 'Double Field'

        tag_template.fields['test-string-field']. \
            type.primitive_type = Utils.__STRING_TYPE
        tag_template.fields['test-string-field']. \
            display_name = 'String Field'

        tag_template.fields['test-timestamp-field']. \
            type.primitive_type = Utils.__TIMESTAMP_TYPE
        tag_template.fields['test-timestamp-field']. \
            display_name = 'Timestamp Field'

        tag_template.fields[
            'test-enum-field']. \
            type.enum_type.allowed_values.add(). \
            display_name = 'Test ENUM Value'

        return tag_template_id, tag_template
Beispiel #4
0
    def test_make_assembled_entry_for_dashboard_should_make_entry_and_tags(
            self):

        dashboard = self.__make_fake_dashboard()

        dashboard_tag_template = datacatalog.TagTemplate()
        dashboard_tag_template.name = 'tagTemplates/sisense_dashboard_metadata'
        jaql_tag_template = datacatalog.TagTemplate()
        jaql_tag_template.name = 'tagTemplates/sisense_jaql_metadata'
        tag_templates_dict = {
            'sisense_dashboard_metadata': dashboard_tag_template,
            'sisense_jaql_metadata': jaql_tag_template
        }

        fake_entry = ('test-dashboard', {})
        entry_factory = self.__mock_entry_factory
        entry_factory.make_entry_for_dashboard.return_value = fake_entry

        tag_factory = self.__mock_tag_factory
        fake_dashboard_tag = datacatalog.Tag()
        fake_dashboard_tag.template = 'tagTemplates/sisense_dashboard_metadata'
        tag_factory.make_tag_for_dashboard.return_value = fake_dashboard_tag
        fake_filter_tag = datacatalog.Tag()
        fake_filter_tag.template = 'tagTemplates/sisense_jaql_metadata'
        tag_factory.make_tags_for_dashboard_filters.return_value = [
            fake_filter_tag
        ]

        assembled_entry = self.__factory\
            ._AssembledEntryFactory__make_assembled_entry_for_dashboard(
                dashboard, tag_templates_dict)

        self.assertEqual('test-dashboard', assembled_entry.entry_id)
        self.assertEqual({}, assembled_entry.entry)
        entry_factory.make_entry_for_dashboard.assert_called_once_with(
            dashboard)

        tags = assembled_entry.tags
        self.assertEqual(2, len(tags))
        self.assertEqual('tagTemplates/sisense_dashboard_metadata',
                         tags[0].template)
        self.assertEqual('tagTemplates/sisense_jaql_metadata',
                         tags[1].template)
        tag_factory.make_tag_for_dashboard.assert_called_once_with(
            dashboard_tag_template, dashboard)
        tag_factory.make_tags_for_dashboard_filters.assert_called_once_with(
            jaql_tag_template, dashboard)
    def test_make_tags_for_jaql_should_return_empty_list_if_no_metadata(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        tags = self.__factory._DataCatalogTagFactory__make_tags_for_jaql(
            tag_template, {}, 'test')

        self.assertEqual(0, len(tags))
Beispiel #6
0
def make_fake_tag_template():
    tag_template = datacatalog.TagTemplate()
    tag_template.name = 'test_template'
    tag_template.fields['bool_field'] = \
        make_primitive_type_template_field(datacatalog.FieldType.PrimitiveType.BOOL)
    tag_template.fields['string_field'] = \
        make_primitive_type_template_field(datacatalog.FieldType.PrimitiveType.STRING)

    return tag_template
    def make_tag_template_for_custom_property_value(self, definition_metadata,
                                                    value):

        tag_template = datacatalog.TagTemplate()

        template_id = dph.DynamicPropertiesHelper\
            .make_id_for_custom_property_value_tag_template(
                definition_metadata, value)
        tag_template.name = datacatalog.DataCatalogClient.tag_template_path(
            project=self.__project_id,
            location=self.__location_id,
            tag_template=template_id)

        tag_template.display_name = dph.DynamicPropertiesHelper\
            .make_display_name_for_custom_property_value_tag_template(
                definition_metadata, value)

        self._add_primitive_type_field(tag_template, 'id', self.__STRING_TYPE,
                                       'Unique Id')

        self._add_primitive_type_field(tag_template, 'created_date',
                                       self.__TIMESTAMP_TYPE, 'Created date')

        self._add_primitive_type_field(tag_template, 'modified_date',
                                       self.__TIMESTAMP_TYPE, 'Modified date')

        self._add_primitive_type_field(tag_template, 'modified_by_username',
                                       self.__STRING_TYPE,
                                       'Username who modified it')

        self._add_primitive_type_field(tag_template, 'value',
                                       self.__STRING_TYPE, 'Value')

        self._add_primitive_type_field(tag_template, 'property_definition_id',
                                       self.__STRING_TYPE,
                                       'Property Definition Id')

        # According to the Qlik Analytics Platform Architecture Team, there was
        # no way of searching assets by the Custom Property values using Qlik
        # when this feature was implemented (Dec, 2020), which means the
        # catalog search might be helpful to address such a use case. Hence the
        # 'definition_' part was supressed from this Tag Field Id to turn seach
        # queries more intuitive, e.g. tag:property_name:<PROPERTY-NAME>.
        self._add_primitive_type_field(tag_template, 'property_name',
                                       self.__STRING_TYPE,
                                       'Property Definition name')

        self._add_primitive_type_field(
            tag_template, 'property_definition_entry', self.__STRING_TYPE,
            'Data Catalog Entry for the Property Definition')

        self._add_primitive_type_field(tag_template, 'site_url',
                                       self.__STRING_TYPE,
                                       'Qlik Sense site url')

        return tag_template
Beispiel #8
0
    def test_add_enum_type_field_should_optionally_set_order(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_enum_type_field(tag_template,
                                                            'enum-field',
                                                            ['VALUE_1'],
                                                            'Enum field',
                                                            order=10)

        field = tag_template.fields['enum-field']
        self.assertEqual(10, field.order)
Beispiel #9
0
    def test_add_enum_type_field_should_optionally_set_is_required(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_enum_type_field(tag_template,
                                                            'enum-field',
                                                            ['VALUE_1'],
                                                            'Enum field',
                                                            is_required=True)

        field = tag_template.fields['enum-field']
        self.assertEqual(True, field.is_required)
    def test_add_enum_type_field_should_set_elementary_properties(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_enum_type_field(
            tag_template, 'enum-field', ['VALUE_1', 'VALUE_2'], 'Enum field')

        self.assertIn('enum-field', tag_template.fields)

        field = tag_template.fields['enum-field']
        self.assertEqual(2, len(field.type.enum_type.allowed_values))
        self.assertEqual('Enum field', field.display_name)
Beispiel #11
0
    def test_add_primitive_type_field_should_optionally_set_is_required(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_primitive_type_field(
            tag_template,
            'string-field',
            datacatalog.FieldType.PrimitiveType.STRING,
            'String field',
            is_required=True)

        field = tag_template.fields['string-field']
        self.assertEqual(True, field.is_required)
Beispiel #12
0
    def test_add_primitive_type_field_should_optionally_set_order(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_primitive_type_field(
            tag_template,
            'string-field',
            datacatalog.FieldType.PrimitiveType.STRING,
            'String field',
            order=10)

        field = tag_template.fields['string-field']
        self.assertEqual(10, field.order)
    def test_add_primitive_type_field_should_set_elementary_properties(self):
        tag_template = datacatalog.TagTemplate()
        prepare.BaseTagTemplateFactory._add_primitive_type_field(
            tag_template, 'string-field',
            datacatalog.FieldType.PrimitiveType.STRING, 'String field')

        self.assertIn('string-field', tag_template.fields)

        field = tag_template.fields['string-field']
        self.assertEqual(datacatalog.FieldType.PrimitiveType.STRING,
                         field.type.primitive_type)
        self.assertEqual('String field', field.display_name)
    def test_make_tag_for_jaql_filter_by_should_return_none_if_no_filter(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'title': 'TEST',
        }

        tag = self.__factory \
            ._DataCatalogTagFactory__make_tag_for_jaql_filter_by(
                tag_template, metadata, 'JAQL Filter By test')

        self.assertIsNone(tag)
    def test_make_tag_for_widget_should_set_datasource_from_string(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_widget_metadata'

        metadata = {
            'dashboardData': {},
            'datasource': 'Test Data Source',
        }

        tag = self.__factory.make_tag_for_widget(tag_template, metadata)

        self.assertEqual('Test Data Source',
                         tag.fields['datasource'].string_value)
    def test_make_tag_for_dashboard_should_set_all_available_fields(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_dashboard_metadata'

        metadata = {
            'oid': 'test-dashboard',
            'folderData': {
                'oid': 'parent-folder',
                'name': 'Parent Folder',
            },
            'ownerData': {
                'userName': '******',
                'firstName': 'John',
                'lastName': 'Doe',
            },
            'datasource': {
                'title': 'Test Data Source',
            },
            'lastPublish': '2021-05-01T13:00:15.400Z',
            'lastOpened': '2021-05-02T23:00:22.939Z',
        }

        tag = self.__factory.make_tag_for_dashboard(tag_template, metadata)

        self.assertEqual('tagTemplates/sisense_dashboard_metadata',
                         tag.template)

        self.assertEqual('test-dashboard', tag.fields['id'].string_value)
        self.assertEqual('parent-folder', tag.fields['folder_id'].string_value)
        self.assertEqual('Parent Folder',
                         tag.fields['folder_name'].string_value)
        self.assertEqual('*****@*****.**',
                         tag.fields['owner_username'].string_value)
        self.assertEqual('John Doe', tag.fields['owner_name'].string_value)
        self.assertEqual('Test Data Source',
                         tag.fields['datasource'].string_value)

        publish_datetime = datetime.strptime('2021-05-01T13:00:15.400+0000',
                                             self.__DATETIME_FORMAT)
        self.assertEqual(
            publish_datetime.timestamp(),
            tag.fields['last_publish'].timestamp_value.timestamp())

        opened_datetime = datetime.strptime('2021-05-02T23:00:22.939+0000',
                                            self.__DATETIME_FORMAT)
        self.assertEqual(opened_datetime.timestamp(),
                         tag.fields['last_opened'].timestamp_value.timestamp())

        self.assertEqual('https://test.com',
                         tag.fields['server_url'].string_value)
Beispiel #17
0
    def test_tag_for_table_container_missing_fields_should_succeed(  # noqa:E501
            self):  # noqa:E125
        metadata_def = utils.Utils.get_metadata_def_obj(self.__MODULE_PATH)

        factory = datacatalog_tag_factory.DataCatalogTagFactory(metadata_def)

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'template_name'

        schema_dict = {'tables': [{}, {}]}

        tag = factory. \
            make_tag_for_table_container_metadata(tag_template, schema_dict)
        self.assertEqual(2, tag.fields['num_tables'].double_value)
    def test_make_tags_for_jaql_should_set_all_available_fields(
            self, mock_make_tags_for_jaql_formula,
            mock_make_tag_for_jaql_filter_by):

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'dim': '[table_a.column_a]',
            'formula': 'AVG([ODY], [COID])',
            'context': {
                '[ODY]': {
                    'dim': '[Orders.OrderDate (Calendar)]',
                    'title': 'OrderDateYears',
                },
                '[COID]': {
                    'dim': '[Orders.OrderID]',
                    'title': 'CountOrderID',
                },
            },
            'agg': 'avg',
            'title': 'TEST',
        }

        mock_make_tags_for_jaql_formula.return_value = []
        mock_make_tag_for_jaql_filter_by.return_value = None

        tags = self.__factory._DataCatalogTagFactory__make_tags_for_jaql(
            tag_template, metadata, 'test')

        self.assertEqual(1, len(tags))

        tag = tags[0]
        self.assertEqual('tagTemplates/sisense_jaql_metadata', tag.template)

        self.assertEqual('table_a', tag.fields['table'].string_value)
        self.assertEqual('column_a', tag.fields['column'].string_value)
        self.assertEqual('[table_a.column_a]',
                         tag.fields['dimension'].string_value)
        self.assertEqual('AVG([OrderDateYears], [CountOrderID])',
                         tag.fields['formula'].string_value)
        self.assertEqual('avg', tag.fields['aggregation'].string_value)
        self.assertEqual('https://test.com',
                         tag.fields['server_url'].string_value)

        mock_make_tags_for_jaql_formula.assert_called_once_with(
            tag_template, metadata, 'test.TEST')
        mock_make_tag_for_jaql_filter_by.assert_called_once_with(
            tag_template, metadata, 'test.TEST')
    def make_tag_template_for_custom_property_definition(self):
        tag_template = datacatalog.TagTemplate()

        tag_template.name = datacatalog.DataCatalogClient.tag_template_path(
            project=self.__project_id,
            location=self.__location_id,
            tag_template=constants.TAG_TEMPLATE_ID_CUSTOM_PROPERTY_DEFINITION)

        tag_template.display_name = 'Qlik Custom Property Definition Metadata'

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='id',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Unique Id',
                                       is_required=True,
                                       order=6)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='modified_by_username',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Username who modified it',
                                       order=5)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='value_type',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Value type',
                                       order=4)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='choice_values',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Choice values',
                                       order=3)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='object_types',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Object types',
                                       order=2)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='site_url',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Qlik Sense site url',
                                       is_required=True,
                                       order=1)

        return tag_template
    def make_tag_template_for_sheet(self):
        tag_template = datacatalog.TagTemplate()

        tag_template.name = datacatalog.DataCatalogClient.tag_template_path(
            project=self.__project_id,
            location=self.__location_id,
            tag_template=constants.TAG_TEMPLATE_ID_SHEET)

        tag_template.display_name = 'Qlik Sheet Metadata'

        self._add_primitive_type_field(tag_template, 'id', self.__STRING_TYPE,
                                       'Unique Id')

        self._add_primitive_type_field(tag_template, 'owner_username',
                                       self.__STRING_TYPE, 'Owner username')

        self._add_primitive_type_field(tag_template, 'owner_name',
                                       self.__STRING_TYPE, 'Owner name')

        self._add_primitive_type_field(tag_template, 'published',
                                       self.__BOOL_TYPE, 'Published')

        self._add_primitive_type_field(tag_template, 'publish_time',
                                       self.__TIMESTAMP_TYPE, 'Publish time')

        self._add_primitive_type_field(tag_template, 'approved',
                                       self.__BOOL_TYPE, 'Approved')

        self._add_primitive_type_field(tag_template, 'app_id',
                                       self.__STRING_TYPE, 'App Id')

        self._add_primitive_type_field(tag_template, 'app_name',
                                       self.__STRING_TYPE, 'App name')

        self._add_primitive_type_field(tag_template, 'app_entry',
                                       self.__STRING_TYPE,
                                       'Data Catalog Entry for the App')

        self._add_primitive_type_field(tag_template, 'source_object',
                                       self.__STRING_TYPE, 'Source object')

        self._add_primitive_type_field(tag_template, 'draft_object',
                                       self.__STRING_TYPE, 'Draft object')

        self._add_primitive_type_field(tag_template, 'site_url',
                                       self.__STRING_TYPE,
                                       'Qlik Sense site url')

        return tag_template
Beispiel #21
0
    def make_tag_template_for_table_metadata(self):
        """Create a Tag Template with technical fields for Table metadata.
         :return: tag_template_id, tag_template
        """

        tag_template = datacatalog.TagTemplate()

        table_type = self.__metadata_definition['table_def']['type']

        tag_template_id = '{}_{}_metadata'.format(self.__entry_group_id,
                                                  table_type)

        tag_template.name = \
            datacatalog.DataCatalogClient.tag_template_path(
                project=self.__project_id,
                location=self.__location_id,
                tag_template=tag_template_id)

        tag_template.display_name = '{} {} - Metadata'.format(
            self.__entry_group_id.capitalize(), table_type.capitalize())

        self.__add_creator_field_to_template(table_type, tag_template)
        self.__add_owner_field_to_template(table_type, tag_template)
        self.__add_update_user_field_to_template(table_type, tag_template)

        table_container_name = self.__metadata_definition[
            'table_container_def']['name']
        table_container_type = self.__metadata_definition[
            'table_container_def']['type']

        self._add_primitive_type_field(
            tag_template, table_container_name, self.__STRING_TYPE,
            '{} Name'.format(table_container_type.capitalize()))

        self.__add_database_name_to_tag_template(tag_template)

        self._add_primitive_type_field(tag_template, 'num_rows',
                                       self.__DOUBLE_TYPE, 'Number of rows')

        self._add_primitive_type_field(tag_template, 'table_size_MB',
                                       self.__DOUBLE_TYPE, 'Table Size in MB')

        self._add_primitive_type_field(tag_template, 'table_type',
                                       self.__STRING_TYPE, 'Table Type')

        self._add_primitive_type_field(tag_template, 'has_primary_key',
                                       self.__BOOL_TYPE, 'Has Primary Key')

        return tag_template_id, tag_template
Beispiel #22
0
    def test_make_tag_for_table_metadata_missing_fields_should_succeed(
            self):  # noqa:E125
        metadata_def = utils.Utils.get_metadata_def_obj(self.__MODULE_PATH)

        factory = datacatalog_tag_factory.DataCatalogTagFactory(metadata_def)

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'template_name'

        tables_dict = {'num_rows': 5}

        tag = factory. \
            make_tag_for_table_metadata(tag_template, tables_dict, 'schema')
        self.assertEqual('schema', tag.fields['schema_name'].string_value)
        self.assertEqual(5, tag.fields['num_rows'].double_value)
    def test_make_tags_for_jaql_formula_should_return_empty_list_if_no_context(
            self):

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'formula': 'AVG([ODY], [COID])',
        }

        tags = self.__factory \
            ._DataCatalogTagFactory__make_tags_for_jaql_formula(
                tag_template, metadata, 'JAQL Formula test')

        self.assertEqual(0, len(tags))
    def test_make_tags_for_jaql_should_set_formula_as_is_if_no_context(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'formula': 'AVG([ODY], [COID])',
            'title': 'TEST',
        }

        tags = self.__factory._DataCatalogTagFactory__make_tags_for_jaql(
            tag_template, metadata, 'test')

        tag = tags[0]
        self.assertEqual('AVG([ODY], [COID])',
                         tag.fields['formula'].string_value)
    def make_tag_template_for_jaql(self) -> TagTemplate:
        tag_template = datacatalog.TagTemplate()

        tag_template.name = datacatalog.DataCatalogClient.tag_template_path(
            project=self.__project_id,
            location=self.__location_id,
            tag_template=constants.TAG_TEMPLATE_ID_JAQL)

        tag_template.display_name = 'Sisense JAQL Metadata'

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='table',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Table',
                                       order=6)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='column',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Column',
                                       order=5)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='dimension',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Dimension',
                                       order=4)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='formula',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Formula',
                                       order=3)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='aggregation',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Aggregation',
                                       order=2)

        self._add_primitive_type_field(tag_template=tag_template,
                                       field_id='server_url',
                                       field_type=self.__STRING_TYPE,
                                       display_name='Sisense Server Url',
                                       is_required=True,
                                       order=1)

        return tag_template
    def test_make_tags_for_widget_filters_should_skip_if_no_filters(self):
        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'metadata': {
                'panels': [{
                    'name': 'testField',
                }],
            },
        }

        tags = self.__factory.make_tags_for_widget_filters(
            tag_template, metadata)

        self.assertEqual(0, len(tags))
Beispiel #27
0
    def __create_entity_type_tag_template(self, entity_type_dict,
                                          entity_types_dict, enum_types_dict):
        tag_template = datacatalog.TagTemplate()

        entity_type_data = entity_type_dict['data']
        name = entity_type_data['name']
        formatted_name = attr_normalizer.DataCatalogAttributeNormalizer.\
            format_name(name)
        version = entity_type_data.get('version')

        tag_template_id = attr_normalizer.DataCatalogAttributeNormalizer.\
            create_tag_template_id(formatted_name,
                                   constant.ENTITY_TYPE_PREFIX,
                                   version)

        tag_template.name = self.get_tag_template_path(tag_template_id)

        tag_template.display_name = 'Type - {}'.format(name)

        entity_super_types = entity_type_dict.get('superTypes')
        attribute_defs = entity_type_data['attributeDefs']

        if entity_super_types:
            self.__add_fields_from_super_types(tag_template,
                                               entity_super_types,
                                               entity_types_dict,
                                               enum_types_dict)

        self.__add_fields_from_attribute_defs(tag_template, attribute_defs,
                                              enum_types_dict)

        self._add_primitive_type_field(tag_template, formatted_name,
                                       self.__BOOL_TYPE, formatted_name)

        self._add_primitive_type_field(tag_template, constant.ENTITY_GUID,
                                       self.__STRING_TYPE, 'entity guid')

        self._add_primitive_type_field(tag_template,
                                       constant.INSTANCE_URL_FIELD,
                                       self.__STRING_TYPE, 'instance url')

        self.__create_custom_fields_for_entity_type(tag_template,
                                                    entity_type_data)

        return {tag_template_id: tag_template}
Beispiel #28
0
    def make_column_tag_template(self):
        tag_template = datacatalog.TagTemplate()

        tag_template_id = attr_normalizer.DataCatalogAttributeNormalizer.\
            create_tag_template_id(
                'ref', constant.COLUMN_PREFIX)

        tag_template.name = self.get_tag_template_path(tag_template_id)

        tag_template.display_name = 'Column'

        self._add_primitive_type_field(tag_template, 'column_guid',
                                       self.__STRING_TYPE, 'column guid')
        self._add_primitive_type_field(tag_template, 'column_entry',
                                       self.__STRING_TYPE,
                                       'column data catalog entry')

        return {tag_template_id: tag_template}
    def test_make_tags_for_widget_filters_should_process_all_filters(
            self, mock_make_tags_for_jaql):

        tag_template = datacatalog.TagTemplate()
        tag_template.name = 'tagTemplates/sisense_jaql_metadata'

        metadata = {
            'metadata': {
                'panels': [{
                    'name':
                        'filters',
                    'items': [
                        {
                            'jaql': {
                                'datatype': 'text',
                            },
                        },
                        {
                            'jaql': {
                                'datatype': 'datetime',
                            },
                        },
                    ],
                }],
            },
        }

        mock_make_tags_for_jaql.return_value = [datacatalog.Tag()]

        tags = self.__factory.make_tags_for_widget_filters(
            tag_template, metadata)

        self.assertEqual(2, len(tags))
        self.assertEqual(2, mock_make_tags_for_jaql.call_count)

        calls = [
            mock.call(tag_template, {
                'datatype': 'text',
            }, 'filters'),
            mock.call(tag_template, {
                'datatype': 'datetime',
            }, 'filters')
        ]
        mock_make_tags_for_jaql.assert_has_calls(calls)
    def make_tag_template_for_visualization(self):
        tag_template = datacatalog.TagTemplate()

        tag_template.name = datacatalog.DataCatalogClient.tag_template_path(
            project=self.__project_id,
            location=self.__location_id,
            tag_template=constants.TAG_TEMPLATE_ID_VISUALIZATION)

        tag_template.display_name = 'Qlik Visualization Metadata'

        self._add_primitive_type_field(tag_template, 'id', self.__STRING_TYPE,
                                       'Unique Id')

        self._add_primitive_type_field(tag_template, 'title',
                                       self.__STRING_TYPE, 'Title')

        self._add_primitive_type_field(tag_template, 'subtitle',
                                       self.__STRING_TYPE, 'Subtitle')

        self._add_primitive_type_field(tag_template, 'footnote',
                                       self.__STRING_TYPE, 'Footnote')

        self._add_primitive_type_field(tag_template, 'type',
                                       self.__STRING_TYPE, 'Type')

        self._add_primitive_type_field(tag_template, 'tags',
                                       self.__STRING_TYPE, 'Qlik tags')

        self._add_primitive_type_field(tag_template, 'app_id',
                                       self.__STRING_TYPE, 'App Id')

        self._add_primitive_type_field(tag_template, 'app_name',
                                       self.__STRING_TYPE, 'App name')

        self._add_primitive_type_field(tag_template, 'app_entry',
                                       self.__STRING_TYPE,
                                       'Data Catalog Entry for the App')

        self._add_primitive_type_field(tag_template, 'site_url',
                                       self.__STRING_TYPE,
                                       'Qlik Sense site url')

        return tag_template