From db1f14b1d3972b668c323fc1c5096a608cc7b354 Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Tue, 21 Jun 2011 14:44:52 +0530 Subject: [PATCH 1/3] [IMP]import_google : Improvement in _get_tinydates() bzr revid: dbr@tinyerp.com-20110621091452-wlxkizgjicmgzb4d --- addons/import_google/wizard/import_google.py | 71 ++++++++++---------- 1 file changed, 37 insertions(+), 34 deletions(-) diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py index dbdf98002b8..a0dc08cbba0 100644 --- a/addons/import_google/wizard/import_google.py +++ b/addons/import_google/wizard/import_google.py @@ -22,6 +22,7 @@ import re import urllib import dateutil +import pytz from dateutil import * from pytz import timezone from datetime import datetime @@ -38,33 +39,33 @@ from import_base.import_framework import * from import_base.mapper import * class google_import(import_framework): - + gd_client = False calendars = False DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" TABLE_CONTACT = 'Contact' TABLE_ADDRESS ='Address' TABLE_EVENT = 'Events' - + def initialize(self): google = self.obj.pool.get('google.login') self.external_id_field = 'Id' - self.gd_client = google.google_login(self.context.get('user'), - self.context.get('password'), + self.gd_client = google.google_login(self.context.get('user'), + self.context.get('password'), self.context.get('instance')) - + if self.context.get('instance') and self.context.get('instance') == 'contact': - self.contact = self.context.get('contact') + self.contact = self.context.get('contact') if self.context.get('instance') and self.context.get('instance') == 'calendar': - self.calendars = self.context.get('calendars') - + self.calendars = self.context.get('calendars') + def get_mapping(self): - return { + return { self.TABLE_EVENT: self.get_event_mapping(), self.TABLE_CONTACT: self.get_contact_mapping(), self.TABLE_ADDRESS: self.get_address_mapping(), } - + def get_data(self, table): if table == "Contact": val = { @@ -79,15 +80,16 @@ class google_import(import_framework): self.TABLE_EVENT: self.get_events(), } return val.get(table) - - def _get_tinydates(self, stime, etime): + + def _get_tinydates(self, stime, etime,context): stime = dateutil.parser.parse(stime) etime = dateutil.parser.parse(etime) try: - au_dt = au_tz.normalize(stime.astimezone(au_tz)) + au_tz = context.get('au_tz') + au_dt = au_tz.normalize(stime.replace(tzinfo=pytz.utc).astimezone(au_tz)) timestring = datetime.datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S') - au_dt = au_tz.normalize(etime.astimezone(au_tz)) + au_dt = au_tz.normalize(etime.replace(tzinfo=pytz.utc).astimezone(au_tz)) timestring_end = datetime.datetime(*au_dt.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S') except: timestring = datetime.datetime(*stime.timetuple()[:6]).strftime('%Y-%m-%d %H:%M:%S') @@ -191,14 +193,16 @@ class google_import(import_framework): else: time_zone = tools.get_server_timezone() au_tz = timezone(time_zone) - event_vals = [] + context = self.context + context.update({'au_tz':au_tz}) + event_vals = [] for cal in self.calendars: events_query = gdata.calendar.service.CalendarEventQuery(user=urllib.unquote(cal.split('/')[~0])) events_query.start_index = 1 events_query.max_results = 1000 event_feed = self.gd_client.GetCalendarEventFeed(events_query.ToUri()) for feed in event_feed.entry: - event = { + event = { 'recurrency': "0", 'end_date' : False, 'end_type' : False, @@ -214,7 +218,7 @@ class google_import(import_framework): timestring = timestring_end = datetime.datetime.now().strftime(self.DATETIME_FORMAT) if feed.when: - timestring, timestring_end = self._get_tinydates(feed.when[0].start_time, feed.when[0].end_time) + timestring, timestring_end = self._get_tinydates(feed.when[0].start_time, feed.when[0].end_time,context) else: x = feed.recurrence.text.split(';') repeat_status = self._get_repeat_status(feed.recurrence.text) @@ -226,11 +230,11 @@ class google_import(import_framework): event.update(repeat_status) event.update({'id' : feed.id.text, - 'DateStart': timestring, + 'DateStart': timestring, 'DateEnd': timestring_end, 'Category':event_feed.title.text, 'Name': feed.title.text or 'No title', - 'Description': feed.content.text, + 'Description': feed.content.text, }) event_vals.append(event) return event_vals @@ -246,7 +250,7 @@ class google_import(import_framework): if val.get("recurrency"): val.update({"recurrency": "1"}) return val - + def get_event_mapping(self): return { 'model': 'crm.meeting', @@ -275,15 +279,15 @@ class google_import(import_framework): def get_contact(self): - table = self.context.get('table')[0] - datas = [] + table = self.context.get('table')[0] + datas = [] if self.context.get('group_name'): query = gdata.contacts.service.ContactsQuery() query.group = self.context.get('group_name') self.contact = self.gd_client.GetContactsFeed(query.ToUri()) - else: - self.contact = self.gd_client.GetContactsFeed() - while self.contact: + else: + self.contact = self.gd_client.GetContactsFeed() + while self.contact: for entry in self.contact.entry: data = {} data['id'] = entry.id.text @@ -308,12 +312,12 @@ class google_import(import_framework): if phone.rel == gdata.contacts.PHONE_MOBILE: data['mobile'] = phone.text if phone.rel == gdata.contacts.PHONE_WORK_FAX: - data['fax'] = phone.text - datas.append(data) + data['fax'] = phone.text + datas.append(data) next = self.contact.GetNextLink() - self.contact = next and self.gd_client.GetContactsFeed(next.href) or None + self.contact = next and self.gd_client.GetContactsFeed(next.href) or None return datas - + def get_partner_address(self,val): partner_id = False address_pool = self.obj.pool.get('res.partner.address') @@ -337,7 +341,7 @@ class google_import(import_framework): val.update({'Type':'contact'}) val.update({'id_new': val['id']+'address_contact' }) return self.import_object_mapping(field_map , val, 'res.partner.address', self.context.get('table')[0], val['id_new'], self.DO_NOT_FIND_DOMAIN) - + def get_contact_mapping(self): return { 'model': 'res.partner', @@ -349,8 +353,8 @@ class google_import(import_framework): 'supplier': 'supplier', 'address/id': self.get_partner_address, } - } - + } + def get_address_mapping(self): return { 'model': 'res.partner.address', @@ -365,6 +369,5 @@ class google_import(import_framework): 'fax': 'fax', 'function': 'function' } - - } + } From be640d3a1f33634e11e7b72c13db74e4dc0be0c4 Mon Sep 17 00:00:00 2001 From: "DBR (OpenERP)" Date: Tue, 21 Jun 2011 14:52:55 +0530 Subject: [PATCH 2/3] [IMP]import_google : Improvement in get_data() bzr revid: dbr@tinyerp.com-20110621092255-opxr9s421w1ezfo8 --- addons/import_google/wizard/import_google.py | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py index a0dc08cbba0..b200661335b 100644 --- a/addons/import_google/wizard/import_google.py +++ b/addons/import_google/wizard/import_google.py @@ -67,19 +67,13 @@ class google_import(import_framework): } def get_data(self, table): - if table == "Contact": - val = { - self.TABLE_CONTACT: self.get_contact(), - } - if table == "Address": - val = { - self.TABLE_ADDRESS: self.get_contact(), - } - elif table == "Events": - val = { - self.TABLE_EVENT: self.get_events(), - } - return val.get(table) + data_fetching_function = { + self.TABLE_CONTACT: self.get_contact, + self.TABLE_ADDRESS: self.get_contact, + self.TABLE_EVENT: self.get_events, + } + + return data_fetching_function.get(table)() def _get_tinydates(self, stime, etime,context): From ca3013a42f862d7b6aead8d6d93f0d6294364dca Mon Sep 17 00:00:00 2001 From: Jigar Amin Date: Wed, 22 Jun 2011 17:01:57 +0530 Subject: [PATCH 3/3] [IMP] import_google : refectroing for maintaining the partner and contact bzr revid: jam@tinyerp.com-20110622113157-mlm4cx4xza43wjtw --- addons/import_google/wizard/import_google.py | 55 +++++++++++--------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/addons/import_google/wizard/import_google.py b/addons/import_google/wizard/import_google.py index b200661335b..55631ba53c0 100644 --- a/addons/import_google/wizard/import_google.py +++ b/addons/import_google/wizard/import_google.py @@ -42,6 +42,7 @@ class google_import(import_framework): gd_client = False calendars = False + contact = False DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" TABLE_CONTACT = 'Contact' TABLE_ADDRESS ='Address' @@ -312,7 +313,28 @@ class google_import(import_framework): self.contact = next and self.gd_client.GetContactsFeed(next.href) or None return datas - def get_partner_address(self,val): + + + def get_address_id(self, val): + contact = self.xml_id_exist(self.TABLE_ADDRESS, val.get('id')) + if contact: + return str(contact) + return False + + def get_contact_mapping(self): + return { + 'model': 'res.partner', + 'dependencies': [self.TABLE_ADDRESS], + 'map': { + 'id':'id', + 'name': 'name', + 'customer': 'customer', + 'supplier': 'supplier', + 'address/id': self.get_address_id, + } + } + + def get_partner_id(self, val): partner_id = False address_pool = self.obj.pool.get('res.partner.address') company_pool = self.obj.pool.get('res.company') @@ -323,31 +345,11 @@ class google_import(import_framework): for rec in records: if rec.partner_id: partner_id = rec.partner_id - field_map = { - 'name': 'name', - 'type': 'Type', - 'city': 'city', - 'phone': 'phone', - 'mobile': 'mobile', - 'email': 'email', - 'fax': 'fax', - } - val.update({'Type':'contact'}) - val.update({'id_new': val['id']+'address_contact' }) - return self.import_object_mapping(field_map , val, 'res.partner.address', self.context.get('table')[0], val['id_new'], self.DO_NOT_FIND_DOMAIN) - - def get_contact_mapping(self): - return { - 'model': 'res.partner', - 'dependencies': [], - 'map': { - 'id':'id', - 'name': 'name', - 'customer': 'customer', - 'supplier': 'supplier', - 'address/id': self.get_partner_address, - } - } + return partner_id + contact = self.xml_id_exist(self.TABLE_CONTACT, val.get('id')) + if contact: + partner_id = self.get_mapped_id(self.TABLE_CONTACT, val.get('id')) + return partner_id def get_address_mapping(self): return { @@ -355,6 +357,7 @@ class google_import(import_framework): 'dependencies': [], 'map': { 'id':'id', + 'partner_id/.id': self.get_partner_id, 'name': 'name', 'city': 'city', 'phone': 'phone',