From 5d251c741faf139301d3c626ca1753d225fbd15f Mon Sep 17 00:00:00 2001 From: "tfr@openerp.com" <> Date: Wed, 25 May 2011 15:24:55 +0200 Subject: [PATCH] [IMP] email notfication + [FIX] instance name not hard coded anymore bzr revid: tfr@openerp.com-20110525132455-kcspd1huwj36jubs --- addons/import_base/import_framework.py | 141 +++++++++---------------- 1 file changed, 51 insertions(+), 90 deletions(-) diff --git a/addons/import_base/import_framework.py b/addons/import_base/import_framework.py index 0e4f4c00b7f..385e86ee847 100644 --- a/addons/import_base/import_framework.py +++ b/addons/import_base/import_framework.py @@ -26,7 +26,6 @@ import tools from threading import Thread import datetime -from reportlab.lib import logger import logging pp = pprint.PrettyPrinter(indent=4) @@ -56,8 +55,10 @@ class import_framework(Thread): self.module_name = module_name self.context = context or {} self.email = email_to_notify + self.table_list = [] self.initialize() + """ Abstract Method to be implemented in @@ -221,7 +222,7 @@ class import_framework(Thread): @return: a unique xml id for record, the xml_id will be the same given the same table and same name To be used to avoid duplication of data that don't have ids """ - sugar_instance = "sugarcrm" #TODO need to be changed we information is known in the wizard + sugar_instance = self.instance_name name = name.replace('.', '_').replace(',', '_') return sugar_instance + "_" + table + "_" + name @@ -325,13 +326,18 @@ class import_framework(Thread): def set_table_list(self, table_list): + """ + Set the list of table to import, this method should be call before run + @param table_list: the list of external table to import + ['Leads', 'Opportunity'] + """ self.table_list = table_list def run(self): - """Import all data into openerp, - this is the Entry point to launch the process of import - @param table_list: the list of external table to import - ['Leads', 'Opportunity'] + """ + Import all data into openerp, + this is the Entry point to launch the process of import + """ @@ -343,7 +349,8 @@ class import_framework(Thread): for table in self.table_list: to_import = self.get_mapping()[table].get('import', True) if not table in imported: - self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported) + res = self._resolve_dependencies(self.get_mapping()[table].get('dependencies', []), imported) + result.extend(res) if to_import: (position, warning) = self._import_table(table) result.append((table, position, warning)) @@ -361,109 +368,63 @@ class import_framework(Thread): import dependencies recursively and avoid to import twice the same table """ + result = [] for dependency in dep: if not dependency in imported: to_import = self.get_mapping()[dependency].get('import', True) self._resolve_dependencies(self.get_mapping()[dependency].get('dependencies', []), imported) if to_import: - self._import_table(dependency) + (position, warning) = self._import_table(dependency) + result.append((dependency, position, warning)) imported.add(dependency) + return result def _send_notification_email(self, result): - if not self.email: - return - subject = "Openerp has finish to import your data at %s" % self.date_ended + if not self.email: + return tools.email_send( 'import_sugarcrm@module.openerp', self.email, - subject, - self._get_email_body(result), + self.get_email_subject(result), + self.get_email_body(result), ) logger = logging.getLogger('import_sugarcam') logger.info("Import finished, notification email sended") - def _get_email_body(self, result): - header = "The import of sugarcrm data \n instance name : %s \n started at %s is finished at %s" % (self.instance_name, self.data_started, self.date_ended) - body = "" + def get_email_subject(self, result): + """ + This method define the subject of the email send by openerp at the end of import + @param result: a list of tuple + (table_name, number_of_record_created/updated, warning) for each table + @return the subject of the mail + + """ + return "Import of your data finished at %s" % self.date_ended + + def get_email_body(self, result): + """ + This method define the body of the email send by openerp at the end of import. The body is separated in two part + the header (@see get_body_header), and the generate body with the list of table and number of record imported. + If you want to keep this it's better to overwrite get_body_header + @param result: a list of tuple + (table_name, number_of_record_created/updated, warning) for each table + @return the subject of the mail + + """ + + body = "started at %s and finished at %s \n" % (self.data_started, self.date_ended) for (table, nb, warning) in result: if not warning: warning = "with no warning" else: warning = "with warning : %s" % warning body += "%s records were imported from table %s, %s \n" % (nb, table, warning) - return header + "\n\n" + body + return self.get_body_header(result) + "\n\n" + body + def get_body_header(self, result): + """ + @return the first sentences written in the mail's body + """ + return "The import of data \n instance name : %s \n" % self.instance_name -class dummy_import(import_framework): - """ - this is a really simple exemple to show how to use the framework - """ - - TABLE_LEAD = 'Leads' - TABLE_STAGE = 'Stage' - TABLE_USER = 'User' - - def get_lead_status(self, sugar_val): - fields = ['name', 'type'] - name = 'lead_' + sugar_val.get('status', '') - data = [sugar_val.get('status', ''), 'lead'] - return self.import_object(fields, data, 'crm.case.stage', self.TABLE_STAGE, name, [('type', '=', 'lead'), ('name', 'ilike', sugar_val.get('status', ''))]) - - - - - lead_state = { - 'New' : 'draft', - 'Assigned':'open', - 'In Progress': 'open', - 'Recycled': 'cancel', - 'Dead': 'done', - } - - def get_mapping(self): - return { - self.TABLE_LEAD : { - 'model' : 'crm.lead', - 'dependencies' : [self.TABLE_USER], - 'map' : { - 'name' : 'name', - 'stage_id/id' : self.get_lead_status, - 'state' : mapper.map_val('status', self.lead_state), - 'user_id/id' : mapper.ref(self.TABLE_USER, 'assigned_user_id'), - } - - }, - self.TABLE_USER : { - 'model' : 'res.users', - 'map' : { - 'name' : 'name', - 'login' : 'name' - } - } - } - - - #DUMMY way to get data, just demonstration - def get_data(self, table): - if table == self.TABLE_LEAD: - return self.get_lead() - if table == self.TABLE_USER: - return self.get_user() - - - def get_lead(self): - return [ - {'id' : 'lead1', - 'name' : 'name1', - 'status' : 'Assigned', - 'assigned_user_id' : 'user1'}, - {'id' : 'lead2', - 'name' : 'name2' - }, - ] - - def get_user(self): - return [{ - 'id' : 'user1', - 'name' : 'name1', - }] +#For example of use see import_sugarcrm \ No newline at end of file