From 8162d367f08c7f2949c4e3477aae063e0a4193e3 Mon Sep 17 00:00:00 2001 From: Marc Durepos Date: Fri, 28 Mar 2025 08:46:27 -0400 Subject: [PATCH] remove debug info logging from account_email_to_pdf --- account_email_to_pdf/models/account_move.py | 52 +------------------ .../tests/test_email_to_pdf.py | 51 ++++-------------- 2 files changed, 11 insertions(+), 92 deletions(-) diff --git a/account_email_to_pdf/models/account_move.py b/account_email_to_pdf/models/account_move.py index 29e5d51..7d471e1 100644 --- a/account_email_to_pdf/models/account_move.py +++ b/account_email_to_pdf/models/account_move.py @@ -1,4 +1,3 @@ -import base64 import logging import os import subprocess @@ -65,16 +64,10 @@ class AccountMove(models.Model): # Check if the content is plain text (not HTML) # More comprehensive check for HTML content is_html = bool(re.search(r" """ - _logger.info(f"Wrapped HTML content length: {len(html_content)}") # Check if wkhtmltopdf is installed wkhtmltopdf_bin = find_in_path("wkhtmltopdf") @@ -112,7 +104,6 @@ class AccountMove(models.Model): # Write the HTML content to the temporary file with closing(os.fdopen(html_file_fd, "wb")) as html_file: encoded_content = html_content.encode("utf-8") - _logger.info(f"Encoded HTML content length: {len(encoded_content)}") html_file.write(encoded_content) # Close the PDF file descriptor as wkhtmltopdf will write to it @@ -129,7 +120,6 @@ class AccountMove(models.Model): command.append(html_file_path) command.append(pdf_file_path) - _logger.info(f"Running wkhtmltopdf command: {' '.join(command)}") process = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) @@ -139,27 +129,12 @@ class AccountMove(models.Model): _logger.error( "wkhtmltopdf failed with error code %s: %s", process.returncode, err ) - if out: - _logger.info( - f"wkhtmltopdf stdout: {out.decode('utf-8', errors='replace')[:200]}" - ) - if err: - _logger.error( - f"wkhtmltopdf stderr: {err.decode('utf-8', errors='replace')}" - ) return False # Read the generated PDF try: with open(pdf_file_path, "rb") as pdf_file: pdf_content = pdf_file.read() - - _logger.info( - f"Successfully read PDF file, size: {len(pdf_content)} bytes" - ) - if pdf_content: - _logger.info(f"PDF file starts with: {pdf_content[:20]}") - return pdf_content except Exception as e: _logger.exception("Error reading generated PDF file: %s", e) @@ -168,7 +143,6 @@ class AccountMove(models.Model): except Exception as e: _logger.exception("Error during PDF generation: %s", e) return False - finally: # Clean up temporary files try: @@ -201,7 +175,6 @@ class AccountMove(models.Model): # Check if body is empty or None if not body: - _logger.warning("Email body is empty, using placeholder content") body = "

This email did not contain any body content.

" # Check if the body is plain text based on content-type @@ -211,50 +184,35 @@ class AccountMove(models.Model): # Try to get content type from various places in the message dict if "content-type" in message_dict: content_type = message_dict["content-type"].lower() - _logger.info(f"Found content-type directly in message_dict: {content_type}") # Try to get from headers headers = message_dict.get("headers", {}) - _logger.info(f"Headers type: {type(headers)}") if not content_type and headers: if isinstance(headers, dict): content_type = headers.get("Content-Type", "").lower() - _logger.info(f"Found Content-Type in headers dict: {content_type}") elif isinstance(headers, list): - _logger.info(f"Headers is a list with {len(headers)} items") for header in headers: - _logger.info(f"Header item: {header}") if ( isinstance(header, tuple) and len(header) >= 2 and header[0].lower() == "content-type" ): content_type = header[1].lower() - _logger.info( - f"Found Content-Type in headers list: {content_type}" - ) break # Try to determine from the body content if we still don't have a content type if not content_type: if re.search(r" tags and wrap in paragraph tags # Escape HTML special characters to prevent injection body = f"
{escape(body)}
" - _logger.info(f"Converted plain text body length: {len(body)}") - _logger.info(f"First 100 chars of converted body: {body[:100]}") # Create HTML content for the PDF html_content = f""" @@ -283,15 +241,9 @@ class AccountMove(models.Model): """ # Convert HTML to PDF - _logger.info(f"HTML content length before PDF conversion: {len(html_content)}") - _logger.info(f"First 200 chars of HTML content: {html_content[:200]}") - pdf_content = self._html_to_pdf(html_content) - if pdf_content: - _logger.info(f"PDF generation successful, size: {len(pdf_content)} bytes") - _logger.info(f"PDF starts with: {pdf_content[:20]}") - else: + if not pdf_content: _logger.error("PDF generation failed") return False @@ -301,8 +253,6 @@ class AccountMove(models.Model): # Note: No need to base64 encode the PDF content here # When this attachment is added to message_dict["attachments"], Odoo expects raw binary data # Odoo will handle the base64 encoding when creating the actual ir.attachment record - _logger.info(f"Raw PDF length: {len(pdf_content)} bytes") - attachment = { "name": filename, "datas": pdf_content, diff --git a/account_email_to_pdf/tests/test_email_to_pdf.py b/account_email_to_pdf/tests/test_email_to_pdf.py index e7ef8e2..f4adec3 100644 --- a/account_email_to_pdf/tests/test_email_to_pdf.py +++ b/account_email_to_pdf/tests/test_email_to_pdf.py @@ -2,9 +2,6 @@ from odoo.tests.common import TransactionCase from odoo.tools.misc import find_in_path from datetime import datetime import base64 -import logging - -_logger = logging.getLogger(__name__) class TestHtmlToPdf(TransactionCase): @@ -110,18 +107,12 @@ class TestHtmlToPdf(TransactionCase): # Simple plain text content plain_text = "This is a plain text email.\nIt has no HTML formatting.\nJust plain text content.\n\nRegards,\nTest Sender" - # Log the input content - _logger.info(f"Input plain text content: {plain_text}") + # Call the method to convert plain text to PDF pdf_content = self.account_move._html_to_pdf(plain_text) - # Log the result - if pdf_content: - _logger.info(f"PDF content generated, size: {len(pdf_content)} bytes") - _logger.info(f"PDF starts with: {pdf_content[:20]}") - else: - _logger.error("Failed to generate PDF from plain text") + # Verify the PDF was created self.assertTrue( @@ -130,7 +121,6 @@ class TestHtmlToPdf(TransactionCase): # Verify it's a valid PDF is_pdf = pdf_content and pdf_content.startswith(b"%PDF-") - _logger.info(f"Is valid PDF: {is_pdf}") self.assertTrue(is_pdf, "Content should be a valid PDF") self.assertTrue(len(pdf_content) > 100, "PDF should have reasonable size") @@ -236,7 +226,7 @@ Content-Transfer-Encoding: 7bit the mail alias and verifies that an account move is created with a PDF attachment generated from the email content. """ - _logger.info("Starting test_plain_text_email_to_pdf_full_flow") + # Get the current timestamp timestamp = datetime.now().strftime("%Y%m%d%H%M%S") @@ -278,24 +268,13 @@ Content-Transfer-Encoding: 7bit ) # Process the email through the mail gateway - _logger.info("Processing plain text email through mail gateway") - _logger.info(f"Raw email length: {len(raw_email)}") - _logger.info(f"Raw email first 200 chars: {raw_email[:200]}") - try: - self.env["mail.thread"].with_context(fetchmail_server_id=1).message_process( - model=None, - message=raw_email, - save_original=True, - strip_attachments=False, - ) - _logger.info("Email processing completed successfully") - except Exception as e: - _logger.error(f"Error during email processing: {str(e)}") - import traceback - - _logger.error(f"Traceback: {traceback.format_exc()}") - raise + self.env["mail.thread"].with_context(fetchmail_server_id=1).message_process( + model=None, + message=raw_email, + save_original=True, + strip_attachments=False, + ) # Count account moves after the test move_count_after = self.env["account.move"].search_count( @@ -328,16 +307,7 @@ Content-Transfer-Encoding: 7bit # Verify PDF content if possible if attachment: - _logger.info(f"Found PDF attachment: {attachment.name}") pdf_data = base64.b64decode(attachment.datas) if attachment.datas else b"" - _logger.info(f"PDF data size: {len(pdf_data)} bytes") - - if pdf_data: - _logger.info(f"PDF data starts with: {pdf_data[:20]}") - is_valid_pdf = pdf_data.startswith(b"%PDF-") - _logger.info(f"Is valid PDF: {is_valid_pdf}") - else: - _logger.error("PDF data is empty") self.assertTrue( pdf_data.startswith(b"%PDF-"), @@ -346,5 +316,4 @@ Content-Transfer-Encoding: 7bit self.assertTrue( len(pdf_data) > 100, "PDF from plain text should have reasonable size" ) - else: - _logger.error("No PDF attachment found") +