def _create_data_set(self, physical_table_map, logical_table_map): quicksight_client = get_quicksight_client() self._update_data_source_arn(physical_table_map) self._update_schema_arn(physical_table_map) self._update_table_name(physical_table_map) self.data_source.update() try: response = quicksight_client.create_data_set( AwsAccountId=self.aws_account_id, DataSetId=self.id, Name=self.name, Permissions=self._get_permissions(), PhysicalTableMap=physical_table_map, LogicalTableMap=logical_table_map, ImportMode="DIRECT_QUERY", # TODO: support SPICE ) logger.info( f"finished creating quicksight create_data_set id:{self.id}, " f"response:{response}" ) except quicksight_client.exceptions.ResourceExistsException: logger.info(f"dataset for id:{self.id} already exists") response = quicksight_client.describe_data_set( AwsAccountId=self.aws_account_id, DataSetId=self.id ) response = response["DataSet"] except quicksight_client.exceptions.InvalidParameterValueException as exc: logger.error(str(exc)) raise QuickSightFailure() self.arn = response["Arn"] return response
def create_from_dashboard(self, dashboard): # TODO: REFACTOR+MERGE with create_from_analysis after testing to be the same logger.info( f"requesting quicksight create_template id {self.id} from dashboard" ) quicksight_client = get_quicksight_client() analysis_source_entity = SourceEntity( self.data_sets, dashboard.arn, self.config_data, source_entity_type="SourceAnalysis", ) response = quicksight_client.create_template( AwsAccountId=self.aws_account_id, TemplateId=self.id, Name=self.name, Permissions=self._get_permissions(), SourceEntity=analysis_source_entity.get_source_entity(), VersionDescription="1", ) logger.info( f"finished quicksight create_template id:{self.id} from analysis " f"response: {response}" ) self.arn = response["Arn"] return response
def update_template_permissions( self, permission: TemplatePermissionType = TemplatePermissionType.PUBLIC, principal=None, ): quicksight_client = get_quicksight_client() logger.debug( f"requesting quicksight update_template_permissions, principal: {principal}" ) if permission == TemplatePermissionType.PUBLIC: principal = "*" logger.info( f"requesting quicksight update_template_permissions: {self.id} from template" ) response = quicksight_client.update_template_permissions( AwsAccountId=self.aws_account_id, TemplateId=self.id, GrantPermissions=[ {"Principal": principal, "Actions": ["quicksight:DescribeTemplate"]} ], ) logger.info( f"finished quicksight update_template_permissions for id:{self.id} from template " f"response: {response}" ) return response
def create_from_analysis(self, analysis): logger.info(f"requesting quicksight create_template id {self.id} from analysis") quicksight_client = get_quicksight_client() analysis_source_entity = SourceEntity( self.data_sets, analysis.arn, self.config_data, source_entity_type="SourceAnalysis", ) response = quicksight_client.create_template( AwsAccountId=self.aws_account_id, TemplateId=self.id, Name=self.name, Permissions=self._get_permissions(), SourceEntity=analysis_source_entity.get_source_entity(), VersionDescription="1", ) logger.info( f"finished quicksight create_template id:{self.id} from analysis " f"response: {response}" ) self.arn = response["Arn"] return response
def create(self): logger.info(f"requesting quicksight create_analysis: {self.id}") quicksight_client = get_quicksight_client() # TODO: would prefer a generic name here source_entity = self._get_source_entity() source_entity["SourceTemplate"]["DataSetReferences"][0][ "DataSetPlaceholder"] = "export_ts_2020_10_19_16_28_06" self.data_source.update() try: response = quicksight_client.create_analysis( AwsAccountId=self.aws_account_id, AnalysisId=self.id, Name=self.name, Permissions=self._get_permissions(), SourceEntity=source_entity, ) logger.info( f"finished quicksight create_analysis for id:{self.id} " f"response: {response}") except quicksight_client.exceptions.ResourceExistsException: response = quicksight_client.describe_analysis( AwsAccountId=self.aws_account_id, AnalysisId=self.id) response = response["Analysis"] except quicksight_client.exceptions.InvalidParameterValueException as exc: logger.error(str(exc)) raise QuickSightFailure() self.arn = response["Arn"] return response
def create(self): logger.info(f"creating quicksight datasource id:{self.id}") quicksight_client = get_quicksight_client() data_source_parameters = { "AthenaParameters": { "WorkGroup": self.workgroup } } try: response = quicksight_client.create_data_source( Permissions=self._get_permissions(), AwsAccountId=self.aws_account_id, DataSourceId=self.id, Name=self.name, Type="ATHENA", DataSourceParameters=data_source_parameters, SslProperties={"DisableSsl": False}, ) logger.info( f"finished creating quicksight datasource for id:{self.id}" f"response {response}") except quicksight_client.exceptions.ResourceExistsException: logger.info(f"datasource for id:{self.id} already exists") response = quicksight_client.describe_data_source( AwsAccountId=self.aws_account_id, DataSourceId=self.id) response = response["DataSource"] self.arn = response["Arn"] return response
def delete(self): logger.info(f"requesting quicksight delete_analysis id:{self.id}") quicksight_client = get_quicksight_client() response = quicksight_client.delete_analysis( AwsAccountId=self.aws_account_id, AnalysisId=self.id) logger.info(f"finished quicksight delete_analysis for id:{self.id} " f"response: {response}") return response
def delete(self): logger.info(f"deleting quicksight dataset id:{self.id}") quicksight_client = get_quicksight_client() response = quicksight_client.delete_data_set( AwsAccountId=self.aws_account_id, DataSetId=self.id) logger.info(f"finished deleting quicksight dataset for id:{self.id}, " f"response:{response}") self.arn = response["Arn"] return response
def edition(self) -> str: qs = get_quicksight_client() try: settings = qs.describe_account_settings( AwsAccountId=get_aws_account_id()) edition = settings.get("AccountSettings").get("Edition") except qs.exceptions.ResourceNotFoundException: edition = "DISABLED" logger.info("running with QuickSight %s" % edition) return edition
def delete(self): quicksight_client = get_quicksight_client() logger.info(f"requesting quicksight delete_template id:{self.id}") response = quicksight_client.delete_template( AwsAccountId=self.aws_account_id, TemplateId=self.id ) logger.info( f"finished quicksight delete_template for id:{self.id} " f"response: {response}" ) return response
def delete(self): logger.info(f"requesting quicksight delete_dashboard id:{self.id}") quicksight_client = get_quicksight_client() response = quicksight_client.delete_dashboard( AwsAccountId=self.aws_account_id, DashboardId=self.id ) logger.info( f"finished quicksight delete_dashboard for id:{self.id} " f"response: {response}" ) return response
def update(self): quicksight_client = get_quicksight_client() quicksight_client.describe_data_source data_source_parameters = { "AthenaParameters": { "WorkGroup": self.workgroup } } try: quicksight_client.update_data_source( AwsAccountId=self.aws_account_id, DataSourceId=self.id, Name=self.name, DataSourceParameters=data_source_parameters, SslProperties={"DisableSsl": False}, ) except quicksight_client.exceptions.ConflictException as exc: logger.debug(str(exc))
def create(self): logger.info(f"requesting quicksight create_dashboard: {self.id}") quicksight_client = get_quicksight_client() response = quicksight_client.create_dashboard( AwsAccountId=self.aws_account_id, DashboardId=self.id, Name=self.name, Permissions=self._get_permissions(), SourceEntity=self._get_source_entity(), DashboardPublishOptions=self._get_dashboard_publish_options(), ) logger.info( f"finished quicksight create_dashboard for id:{self.id} " f"response: {response}" ) self.arn = response["Arn"] return response
def create_from_template(self, source_template_arn): quicksight_client = get_quicksight_client() logger.info(f"requesting quicksight create_template id:{self.id} from template") source_entity = self._get_source_entity_using_template(source_template_arn) response = quicksight_client.create_template( AwsAccountId=self.aws_account_id, TemplateId=self.id, Name=self.name, Permissions=self._get_permissions(), SourceEntity=source_entity, VersionDescription="1", ) logger.info( f"finished quicksight create_template id:{self.id} from template " f"response: {response}" ) self.arn = response["Arn"] return response