"""Lambda gda_youtube_scraper function module.""" from lambdacommon.common_config import logger from lambdacommon.common_config import SENTRY_DSN import sentry_sdk from sentry_sdk.integrations.aws_lambda import AwsLambdaIntegration from sentry_sdk import capture_exception import config from src import constants from src import youtube_api_utils sentry_sdk.init( dsn=SENTRY_DSN, environment=config.ENVIRONMENT, integrations=[AwsLambdaIntegration(timeout_warning=True)] ) class FatalException(Exception): """Fatal exception. It tells the state machine to abort the lambda execution. """ pass def handler(event: dict, context: dict) -> dict: """Lambda entry point.""" try: correlation_id = event.get('correlation_id') logger.info(f'CorrelationID: {correlation_id}') url = event.get('youtube_url') subscribers = None if url: logger.info(f'Scraping YouTube subscribers for: {url}') subscribers = youtube_api_utils.get_youtube_subscribers(url) logger.info(f'YouTube subscribers for {url} is {subscribers}') else: logger.info('YouTube URL was not provided.') return {'youtube_subscribers': subscribers} except Exception as e: logger.exception(constants.ERROR_LAMBDA_FATAL) capture_exception(e) raise FatalException(str(e))