示例#1
0
class CreateStepForm(forms.ModelForm):
    name = forms.CharField(widget=widgets.TextInput(
        attrs={'class': 'form-control'}))
    url = forms.URLField(
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        help_text=('Specify a URL to request outputs from, leave blank if '
                   'this step is only going to be used for waiting for '
                   'outputs from preceding steps'),
        required=False)
    timeout = forms.CharField(widget=widgets.Select(
        attrs={'class': 'form-control'}, choices=Step.TIMEOUT_CHOICES))
    inputs = pg_forms.SimpleArrayField(
        forms.CharField(),
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        required=False)
    outputs = pg_forms.SimpleArrayField(
        forms.CharField(),
        widget=widgets.TextInput(attrs={'class': 'form-control'}),
        required=False)
    headers = HTTPHeaderField(
        widget=HTTPHeaderWidget(attrs={'class': 'form-control'}),
        required=False)

    class Meta:
        model = Step
        fields = (
            'name',
            'url',
            'timeout',
            'inputs',
            'outputs',
            'headers',
        )
示例#2
0
class OrganizationForm(SanitizeFieldsForm, forms.ModelForm):
    urls = pg_forms.SimpleArrayField(
        forms.URLField(required=False),
        required=False,
        error_messages={'item_invalid': ""},
    )
    contacts = org_fields.ContactsField(form=ContactsForm, required=False)
    access = org_fields.PublicPrivateField()

    class Meta:
        model = Organization
        fields = ['name', 'description', 'urls', 'contacts', 'access']

    class Media:
        js = ('js/file-upload.js', 'js/sanitize.js')

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        self.fields['name'].error_messages['unique'] = _(
            "Organization with this name already exists.")

    def clean_name(self):
        name = self.cleaned_data['name']
        invalid_names = settings.CADASTA_INVALID_ENTITY_NAMES
        if slugify(name, allow_unicode=True) in invalid_names:
            raise forms.ValidationError(
                _("Organization name cannot be “Add” or “New”."))

        is_create = not self.instance.id
        queryset = Organization.objects.filter(name__iexact=name)
        if is_create:
            not_unique = queryset.exists()
        else:
            not_unique = queryset.exclude(id=self.instance.id).exists()
        if not_unique:
            raise forms.ValidationError(
                self.fields['name'].error_messages['unique'])

        return name

    def save(self, *args, **kwargs):
        instance = super().save(commit=False)
        is_create = not instance.id

        instance.save()

        if is_create:
            OrganizationRole.objects.create(organization=instance,
                                            user=self.user,
                                            admin=True)

        return instance
示例#3
0
class OrganizationForm(forms.ModelForm):
    urls = pg_forms.SimpleArrayField(
        forms.URLField(required=False),
        required=False,
        error_messages={'item_invalid': ""},
    )
    contacts = ContactsField(form=ContactsForm, required=False)
    access = PublicPrivateField()

    class Meta:
        model = Organization
        fields = ['name', 'description', 'urls', 'contacts', 'access']

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(OrganizationForm, self).__init__(*args, **kwargs)

    def clean_name(self):
        name = self.cleaned_data['name']
        invalid_names = settings.CADASTA_INVALID_ENTITY_NAMES
        if slugify(name, allow_unicode=True) in invalid_names:
            raise forms.ValidationError(
                _("Organization name cannot be “Add” or “New”."))
        return name

    def save(self, *args, **kwargs):
        instance = super(OrganizationForm, self).save(commit=False)
        is_create = not instance.id

        instance.save()

        if is_create:
            OrganizationRole.objects.create(
                organization=instance,
                user=self.user,
                admin=True
            )

        return instance
示例#4
0
class ProjectEditDetails(SanitizeFieldsForm, forms.ModelForm):
    urls = pg_forms.SimpleArrayField(
        forms.URLField(required=False),
        required=False,
        error_messages={'item_invalid': ""},
    )
    questionnaire = forms.CharField(required=False,
                                    widget=S3FileUploadWidget(
                                        upload_to='xls-forms',
                                        accepted_types=QUESTIONNAIRE_TYPES))
    original_file = forms.CharField(required=False,
                                    max_length=200,
                                    widget=forms.HiddenInput)
    access = org_fields.PublicPrivateField()
    contacts = org_fields.ContactsField(form=ContactsForm, required=False)

    class Media:
        js = ('js/file-upload.js', 'js/sanitize.js')

    class Meta:
        model = Project
        fields = [
            'name', 'description', 'access', 'urls', 'questionnaire',
            'contacts'
        ]

    def clean_questionnaire(self):
        new_form = self.data.get('questionnaire')
        current_form = self.initial.get('questionnaire')

        if (new_form is not None and new_form != current_form
                and self.instance.has_records):
            raise ValidationError(
                _("Data has already been contributed to this project. To "
                  "ensure data integrity, uploading a new questionnaire is "
                  "disabled for this project."))

    def save(self, *args, **kwargs):
        new_form = self.data.get('questionnaire')
        original_file = self.data.get('original_file')
        current_form = self.initial.get('questionnaire')

        if new_form:
            if current_form != new_form:
                Questionnaire.objects.create_from_form(
                    xls_form=new_form,
                    original_file=original_file,
                    project=self.instance)
        elif new_form is not None and not self.instance.has_records:
            self.instance.current_questionnaire = ''

        return super().save(*args, **kwargs)

    def clean_name(self):
        name = self.cleaned_data['name']

        # Check that name is not restricted
        invalid_names = settings.CADASTA_INVALID_ENTITY_NAMES
        if slugify(name, allow_unicode=True) in invalid_names:
            raise forms.ValidationError(
                _("Project name cannot be “Add” or “New”."))

        # Check that name is unique org-wide
        # (Explicit validation because we are using a wizard and the
        # unique_together validation cannot occur in the proper page)
        not_unique = Project.objects.filter(name__iexact=name).exclude(
            id=self.instance.id).exists()
        if not_unique:
            raise forms.ValidationError(
                _("Project with this name already exists"))

        return name