def s3_clients(): with moto.mock_s3(): yield { 'uploads': clients.S3Client(bucket_name='uploads-bucket', create_bucket=True), 'placeholder-photos': clients.S3Client(bucket_name='placerholder-photos-bucket', create_bucket=True), }
'appsync': clients.AppSyncClient(), 'cognito': clients.CognitoClient(), 'dynamo': clients.DynamoClient(), 'dynamo_feed': clients.DynamoClient(table_name=DYNAMO_FEED_TABLE), 'elasticsearch': clients.ElasticSearchClient(), 'pinpoint': clients.PinpointClient(), 'real_dating': clients.RealDatingClient(), 's3_uploads': clients.S3Client(S3_UPLOADS_BUCKET), } managers = {} album_manager = managers.get('album') or models.AlbumManager(clients, managers=managers) appstore_manager = managers.get('appstore') or models.AppStoreManager( clients, managers=managers) block_manager = managers.get('block') or models.BlockManager(clients, managers=managers) card_manager = managers.get('card') or models.CardManager(clients, managers=managers) chat_manager = managers.get('chat') or models.ChatManager(clients, managers=managers) chat_message_manager = managers.get( 'chat_message') or models.ChatMessageManager(clients, managers=managers)
from . import xray S3_UPLOADS_BUCKET = os.environ.get('S3_UPLOADS_BUCKET') logger = logging.getLogger() xray.patch_all() secrets_manager_client = clients.SecretsManagerClient() clients = { 'appsync': clients.AppSyncClient(), 'cloudfront': clients.CloudFrontClient(secrets_manager_client.get_cloudfront_key_pair), 'dynamo': clients.DynamoClient(), 'mediaconvert': clients.MediaConvertClient(), 'post_verification': clients.PostVerificationClient(secrets_manager_client.get_post_verification_api_creds), 's3_uploads': clients.S3Client(S3_UPLOADS_BUCKET), } managers = {} post_manager = managers.get('post') or models.PostManager(clients, managers=managers) @handler_logging def image_post_uploaded(event, context): # Seems the boto s3 client deals with non-urlencoded keys to objects everywhere, but # apparenttly this falls outside that scope. The event emitter passes us a urlencoded path. path = urllib.parse.unquote(event['Records'][0]['s3']['object']['key']) # we suppress INFO logging, except this message with LogLevelContext(logger, logging.INFO): logger.info('Handling S3 Object Created (image post uploaded) event', extra={'s3_key': path})
clients.CloudFrontClient(secrets_manager_client.get_cloudfront_key_pair), 'cognito': clients.CognitoClient(), 'dynamo': clients.DynamoClient(), 'facebook': clients.FacebookClient(), 'google': clients.GoogleClient(secrets_manager_client.get_google_client_ids), 'pinpoint': clients.PinpointClient(), 'post_verification': clients.PostVerificationClient( secrets_manager_client.get_post_verification_api_creds), 's3_uploads': clients.S3Client(S3_UPLOADS_BUCKET), 's3_placeholder_photos': clients.S3Client(S3_PLACEHOLDER_PHOTOS_BUCKET), } # shared hash table of all managers, enables inter-manager communication managers = {} appstore_manager = managers.get('appstore') or models.AppStoreManager( clients, managers=managers) album_manager = managers.get('album') or models.AlbumManager(clients, managers=managers) block_manager = managers.get('block') or models.BlockManager(clients, managers=managers) card_manager = managers.get('card') or models.CardManager(clients, managers=managers) chat_manager = managers.get('chat') or models.ChatManager(clients,