import locale import os from datetime import date from aws_lambda_powertools import Logger from aws_lambda_powertools.utilities.data_classes import ( EventBridgeEvent, event_source, ) from aws_lambda_powertools.utilities.typing import LambdaContext from jinja2 import Environment, FileSystemLoader from layercake.dateutils import fromisoformat from layercake.dynamodb import DynamoDBPersistenceLayer, KeyPair from weasyprint import HTML from boto3clients import dynamodb_client from config import ORDER_TABLE logger = Logger(__name__) order_layer = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client) curdir = os.path.dirname(__file__) env = Environment(loader=FileSystemLoader(curdir)) locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') def currency(value: float | int) -> str: return locale.currency(value, grouping=True) def datetime_format(dt: date, fmt='%H:%M %d-%m-%y'): if isinstance(dt, str): dt = fromisoformat(dt) # type: ignore return dt.strftime(fmt) env.filters['datetime_format'] = datetime_format env.filters['currency'] = currency @event_source(data_class=EventBridgeEvent) @logger.inject_lambda_context def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool: new_image = event.detail['new_image'] _, start_date, _, end_date, *_ = new_image['sk'].split('#') result = order_layer.collection.query( KeyPair( pk=new_image['id'], sk=f'START#{start_date}#END#{end_date}#ENROLLMENT', ), ) template = env.get_template('tmpl.html') html_rendered = template.render( start_date=start_date, end_date=end_date, items=result['items'], ) HTML(string=html_rendered, base_url='').write_pdf('cert.pdf') return order_layer.update_item( key=KeyPair(new_image['id'], new_image['sk']), update_expr='SET #status = :status', expr_attr_names={'#status': 'status'}, expr_attr_values={':status': 'CLOSED'}, )