예제 #1
0
파일: csvapi.py 프로젝트: alejo8591/maker
    def parse_contacts(self, contacts):
        "Break down CSV file into fields"
        
        for row in contacts:
            
            #Tidy up keys (iterkeys strip())
            
            try:
                type = row['type']
            except Exception:
                pass #Set type to default type

            try:
                name = row['name']
            except Exception:
                try:
                    firstname = row['firstname']
                    surname = row['surname']
                    name = firstname + " " + surname
                except Exception:
                    continue    
                
            contact_type = ContactType.objects.filter(name=type)
            if contact_type:
                contact_type = contact_type[0]
                
            # Create a new contact if it doesn't exist
            contact_exists = Contact.objects.filter(name=name, contact_type__name=type, trash=False)
            
            #TODO: If one does exist then append the data on that contact
            
            if not contact_exists:
                                
                contact = Contact()
                contact.name = name
                contact.contact_type = contact_type
                contact.auto_notify = False
                contact.save()
            
                fields = contact_type.fields.filter(trash=False)
                           
                for field in fields:
                    if field.name in row:
                        x = row[field.name]
                        if field.field_type == 'email':
                            x = self.verify_email(x)
                        if field.field_type == 'url':
                            x = self.verify_url(x)
                        if x:
                            contact_value = ContactValue()
                            contact_value.field = field
                            contact_value.contact = contact
                            contact_value.value = x
                            contact_value.save()                       
예제 #2
0
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)