"""Export Request.""" import json from sales.constants.exceptions import InvalidMessageError REQUIRED_MESSAGE_FIELDS = [ 'callback_url', 'destination_s3_bucket', 'destination_s3_path', 'sales_file_id', 'source_table_name'] class ExportRequest(): """Model export message.""" def __init__(self, payload): """Validate and set message fields.""" if not payload: raise InvalidMessageError('Empty Message Received') message = json.loads(payload) self.validate(message) self.errors = [] self.destination_s3_bucket = message.get('destination_s3_bucket') self.destination_s3_path = message.get('destination_s3_path') self.sales_file_id = str(message.get('sales_file_id')) self.source_table_name = message.get('source_table_name') self.callback_url = message.get('callback_url') if not self.callback_url.startswith('/'): self.callback_url = '/{}'.format(self.callback_url) def validate(self, message): """Validate message body.""" set1 = set(message.keys()) set2 = set(REQUIRED_MESSAGE_FIELDS) diff = set1 ^ set2 if diff: raise InvalidMessageError('Invalid Message Keys. {}'.format(diff)) def add_error(self, message): """Add an error message.""" self.errors.append(message) def get_response_data(self): """Format the response payload.""" return json.dumps({ 'callback_url': self.callback_url, 'destination_s3_bucket': self.destination_s3_bucket, 'destination_s3_path': self.destination_s3_path, 'sales_file_id': self.sales_file_id, 'source_table_name': self.source_table_name, 'errors': self.errors, })