def _do_sync(data, user): "Run updates" resource_id = data.info.application.id.raw contact_type = _get_contact_type(user) for item in data.result: item_id = None if 'id' in item.raw: item_id = item.id.raw dups = _find_duplicates(resource_id, item, user) if dups: for contact in dups: transaction.commit() try: fields = contact.contact_type.fields contact.add_nuvius_resource(resource_id, item_id) if item.name.raw: contact.name = item.name.raw if item.email: fs = fields.filter(field_type='email') if fs: for iemail in item.email: values = contact.contactvalue_set.filter( field__in=fs, value=iemail.raw) if not values: value = ContactValue(contact=contact, field=fs[0], value=iemail.raw) value.save() if item.phone: fs = fields.filter(field_type='phone') if fs: for iphone in item.phone: values = contact.contactvalue_set.filter( field__in=fs, value=iphone.raw) if not values: value = ContactValue(contact=contact, field=fs[0], value=iphone.raw) value.save() if item.address: fs = fields.filter(name='address') if fs: for iaddress in item.address: values = contact.contactvalue_set.filter( field__in=fs, value__icontains=iaddress.raw) if not values: value = ContactValue(contact=contact, field=fs[0], value=iaddress.raw) value.save() if item.website: fs = fields.filter(name='website') if fs: for iwebsite in item.website: values = contact.contactvalue_set.filter( field__in=fs, value__icontains=iwebsite.raw) if not values: value = ContactValue(contact=contact, field=fs[0], value=iwebsite.raw) value.save() contact.auto_notify = False contact.save() transaction.commit() except KeyboardInterrupt: transaction.rollback() break except: transaction.rollback() else: if contact_type and item.name.raw: transaction.commit() try: contact = Contact(contact_type=contact_type) contact.add_nuvius_resource(resource_id, item_id) contact.name = item.name.raw contact.auto_notify = False contact.set_user(user) contact.save() fields = contact_type.fields if item.email: fs = fields.filter(field_type='email') if fs: for iemail in item.email: value = ContactValue(contact=contact, field=fs[0], value=iemail.raw) value.save() if item.phone: fs = fields.filter(field_type='phone') if fs: for iphone in item.phone: value = ContactValue(contact=contact, field=fs[0], value=iphone.raw) value.save() if item.address: fs = fields.filter(name='address') if fs: for iaddress in item.address: value = ContactValue(contact=contact, field=fs[0], value=iaddress.raw) value.save() if item.website: fs = fields.filter(name='website') if fs: for iwebsite in item.website: value = ContactValue(contact=contact, field=fs[0], value=iwebsite.raw) value.save() transaction.commit() except KeyboardInterrupt: transaction.rollback() break except: transaction.rollback() _clean_missing(resource_id, data.result, user)
def _do_sync(data, user): "Run updates" resource_id = data.info.application.id.raw contact_type = _get_contact_type(user) for item in data.result: item_id = None if 'id' in item.raw: item_id = item.id.raw dups = _find_duplicates(resource_id, item, user) if dups: for contact in dups: transaction.commit() try: fields = contact.contact_type.fields contact.add_nuvius_resource(resource_id, item_id) if item.name.raw: contact.name = item.name.raw if item.email: fs = fields.filter(field_type='email') if fs: for iemail in item.email: values = contact.contactvalue_set.filter( field__in=fs, value=iemail.raw) if not values: value = ContactValue( contact=contact, field=fs[0], value=iemail.raw) value.save() if item.phone: fs = fields.filter(field_type='phone') if fs: for iphone in item.phone: values = contact.contactvalue_set.filter( field__in=fs, value=iphone.raw) if not values: value = ContactValue( contact=contact, field=fs[0], value=iphone.raw) value.save() if item.address: fs = fields.filter(name='address') if fs: for iaddress in item.address: values = contact.contactvalue_set.filter( field__in=fs, value__icontains=iaddress.raw) if not values: value = ContactValue( contact=contact, field=fs[0], value=iaddress.raw) value.save() if item.website: fs = fields.filter(name='website') if fs: for iwebsite in item.website: values = contact.contactvalue_set.filter( field__in=fs, value__icontains=iwebsite.raw) if not values: value = ContactValue( contact=contact, field=fs[0], value=iwebsite.raw) value.save() contact.auto_notify = False contact.save() transaction.commit() except KeyboardInterrupt: transaction.rollback() break except: transaction.rollback() else: if contact_type and item.name.raw: transaction.commit() try: contact = Contact(contact_type=contact_type) contact.add_nuvius_resource(resource_id, item_id) contact.name = item.name.raw contact.auto_notify = False contact.set_user(user) contact.save() fields = contact_type.fields if item.email: fs = fields.filter(field_type='email') if fs: for iemail in item.email: value = ContactValue( contact=contact, field=fs[0], value=iemail.raw) value.save() if item.phone: fs = fields.filter(field_type='phone') if fs: for iphone in item.phone: value = ContactValue( contact=contact, field=fs[0], value=iphone.raw) value.save() if item.address: fs = fields.filter(name='address') if fs: for iaddress in item.address: value = ContactValue( contact=contact, field=fs[0], value=iaddress.raw) value.save() if item.website: fs = fields.filter(name='website') if fs: for iwebsite in item.website: value = ContactValue( contact=contact, field=fs[0], value=iwebsite.raw) value.save() transaction.commit() except KeyboardInterrupt: transaction.rollback() break except: transaction.rollback() _clean_missing(resource_id, data.result, user)