Skip to Content
Menu
You need to be registered to interact with the community.
This question has been flagged
1 Odgovori
1164 Prikazi

in odoo 17, I want to override tools.mail.email_normalize, please tell me how to do?

Avatar
Opusti
Avtor

Thank you for patiently responding to so much content, but I have tested this method and it has not been effective

Best Answer

To override the tools.mail.email_normalize function in Odoo 17 Community Edition, follow these steps:

Step-by-Step Guide

1. Understand the Original Function

Locate the tools.mail.email_normalize function in the Odoo source code. It’s likely defined in the mail module under the tools package. Examine its behavior and identify how it processes email addresses.

Example:

pythonCopy codefrom odoo.tools import email_normalize

def email_normalize(email):
    # Example implementation in Odoo
    email = email.strip().lower()
    return email

2. Create a Custom Module

If you don’t already have a custom module, create one. Use the following structure:

markdownCopy codecustom_module/
├── __init__.py
├── __manifest__.py
└── models/
    ├── __init__.py
    └── email_normalize_override.py

Example __manifest__.py:

pythonCopy code{
    'name': 'Custom Email Normalize Override',
    'version': '1.0',
    'depends': ['mail'],
    'author': 'Your Name',
    'installable': True,
    'auto_install': False,
}

3. Override the Function

In the email_normalize_override.py file, override the email_normalize function:

pythonCopy codefrom odoo import tools

# Save a reference to the original function if needed
original_email_normalize = tools.mail.email_normalize

# Override the function
def custom_email_normalize(email):
    # Custom logic to process the email
    email = email.strip().lower()
    if '@example.com' in email:
        email = email.replace('@example.com', '@customdomain.com')
    return email

# Replace the original function with the custom one
tools.mail.email_normalize = custom_email_normalize

4. Add the File to the Module Initialization

In the __init__.py of the models directory, ensure the file is loaded:

pythonCopy codefrom . import email_normalize_override

5. Install the Module

  • Update the module list:
    bashCopy code./odoo-bin -u all
    
  • Install your custom module from the Odoo interface or using:
    bashCopy code./odoo-bin -d your_database_name -i custom_module
    

6. Test the Override

Test your changes by calling the tools.mail.email_normalize function in a shell or from Odoo itself.

Example:

pythonCopy codefrom odoo.tools.mail import email_normalize
print(email_normalize('User@Example.com'))

It should reflect the new behavior defined in your custom function.

Notes

  • Overriding Odoo core functions should be done cautiously as updates or changes in core logic might affect your customizations.
  • Consider using monkey-patching responsibly and documenting the changes clearly in your code.

By following these steps, you can successfully override the tools.mail.email_normalize function in Odoo 17 CE.

Avatar
Opusti
Related Posts Odgovori Prikazi Aktivnost
1
mar. 25
892
1
dec. 24
853
1
nov. 24
1296
2
avg. 24
2492
3
jun. 24
1656