コード例 #1
0
ファイル: csvapi.py プロジェクト: rogeriofalcone/anaf
    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 save(self, request, contact_type=None):
        "Process form and create DB objects as required"
        if self.instance:
            contact = self.instance
        else:
            contact = Contact()
            contact.contact_type = contact_type

        contact.name = unicode(self.cleaned_data['name'])

        if 'parent' in self.cleaned_data:
            contact.parent = self.cleaned_data['parent']

        if 'related_user' in self.cleaned_data:
            contact.related_user = self.cleaned_data['related_user']

        contact.save()

        if self.instance:
            contact.contactvalue_set.all().delete()
        for field in contact.contact_type.fields.all():
            for form_name in self.cleaned_data:
                if re.match(str("^" + field.name + "___\d+$"), form_name):
                    if isinstance(self.fields[form_name], forms.FileField):
                        value = ContactValue(field=field, contact=contact,
                                             value=self._handle_uploaded_file(form_name))
                        if isinstance(self.fields[form_name], forms.ImageField):
                            self._image_resize(value.value)
                    else:
                        if field.field_type == 'picture' and isinstance(self.fields[form_name], forms.ChoiceField) and \
                                        self.cleaned_data[form_name] != 'delete':
                            value = ContactValue(field=field, contact=contact, value=self.cleaned_data[form_name])
                        else:
                            value = ContactValue(field=field, contact=contact, value=self.cleaned_data[form_name])
                    value.save()
        return contact
コード例 #3
0
ファイル: integration.py プロジェクト: rogeriofalcone/anaf
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)