'Form processor'

def save(self, *args, **kwargs):

    profile = None
    if self.invitation:
        django_user = django_auth.User(username=self.cleaned_data['username'], password='')
        django_user.set_password(self.cleaned_data['password'])
        django_user.save()
        try:
            profile = django_user.profile
        except:
            profile = User()
            profile.user = django_user
        profile.name = django_user.username
        profile.default_group = self.invitation.default_group
        profile.save()
        try:
            contact_type = ContactType.objects.get((Q(name='Person') | Q(slug='person')))
        except:
            contact_type = ContactType.objects.all()[0]
        try:
            contact = profile.get_contact()
            if (not contact):
                contact = Contact()
        except:
            contact = Contact()
        contact.name = self.cleaned_data['name']
        contact.contact_type = contact_type
        contact.related_user = profile
        contact.save()
        try:
            emailfield = contact_type.fields.filter(field_type='email')[0]
            email = ContactValue(value=self.invitation.email, field=emailfield, contact=contact)
            email.save()
        except:
            pass
        widget = Widget(user=profile, perspective=profile.get_perspective(), module_name='treeio.core', widget_name='widget_welcome')
        widget.save()
    return profile
