예제 #1
0
def edit_account_info(request):
    if request.user.is_authenticated and request.user.patient.role == "Patient":
        if request.POST:
            user_form = UserForm(
                request.POST,
                instance=request.user,
            )
            patient_form = PatientForm(request.POST,
                                       instance=request.user.patient)
            if user_form.is_valid() and patient_form.is_valid():
                username = request.POST['username']
                password = request.POST['password']
                user = authenticate(username=username, password=password)
                if user is not None:
                    if not all(x.isdigit()
                               for x in request.POST["phone_number"]):
                        return render(
                            request, 'customer/edit_account_info.html', {
                                'other_errors':
                                ErrorDict({
                                    "Phone Number":
                                    ErrorDict({
                                        '':
                                        "Phone number should be made of digits only"
                                    })
                                })
                            })
                    user = user_form.save(commit=False)
                    user.set_password(request.POST["password"])
                    user.save()
                    patient = patient_form.save(commit=False)
                    patient.user = user
                    patient.save()
                    login(request, user)
                else:
                    return render(
                        request, 'customer/edit_account_info.html', {
                            'user_form_error':
                            user_form.errors,
                            'patient_form_error':
                            patient_form.errors,
                            'other_errors':
                            ErrorDict({
                                "Password":
                                ErrorDict({'': "Wrong Password"})
                            })
                        })
                return redirect('/customer/account/')
            else:
                return render(
                    request, 'customer/edit_account_info.html', {
                        'user_form_error': user_form.errors,
                        'patient_form_error': patient_form.errors
                    })
        return render(request, 'customer/edit_account_info.html')
    return redirect('/customer/login')
예제 #2
0
 def _clean_fields(self):
     super()._clean_fields()
     if settings.SEND_CONFIRMATION_EMAIL:
         uid = self.cleaned_data.get('uid', None)
         if self.errors and uid not in (None, ''):
             try:
                 self.cleaned_data.update(
                     secure_pickle.loads(cache.get(uid)))
                 self._errors = ErrorDict()
             except TypeError:  # nocv
                 self._errors = ErrorDict()
예제 #3
0
def edit_doctor(request, doctor_pk):
    if request.user.is_authenticated and request.user.manager.role == "Manager":
        doctor_info = Doctor.objects.get(pk=doctor_pk)
        if request.POST:
            user_form = UserForm(request.POST, instance=doctor_info.user)
            doctor_form = DoctorForm(request.POST, instance=doctor_info)
            if user_form.is_valid() and doctor_form.is_valid():
                if int(request.POST["age"]) <= int(
                        request.POST["years_of_experience"]):
                    return render(
                        request, 'manager/edit_doctor.html', {
                            'doctor':
                            doctor_info,
                            'other_errors':
                            ErrorDict({
                                "Years of Experience":
                                ErrorDict({
                                    '':
                                    "Years of experience cannot be equal or greater than age"
                                })
                            })
                        })
                if not all(x.isdigit() for x in request.POST["phone_number"]):
                    return render(
                        request, 'manager/edit_doctor.html', {
                            'doctor':
                            doctor_info,
                            'other_errors':
                            ErrorDict({
                                "Phone Number":
                                ErrorDict({
                                    '':
                                    "Phone number should be made of digits only"
                                })
                            })
                        })
                user = user_form.save(commit=False)
                user.save(update_fields=[
                    'username', 'first_name', 'last_name', 'email'
                ])
                doctor_form.save()
                return redirect('/manager/get_report')
            else:
                return render(
                    request, 'manager/edit_doctor.html', {
                        'user_form_error': user_form.errors,
                        'doctor_form_error': doctor_form.errors,
                        'doctor': doctor_info
                    })
        return render(request, 'manager/edit_doctor.html',
                      {'doctor': doctor_info})
    return redirect('/')
예제 #4
0
 def test_error_dict_is_json_serializable(self):
     init_errors = ErrorDict([
         (
             "__all__",
             ErrorList([
                 ValidationError("Sorry this form only works on leap days.")
             ]),
         ),
         ("name", ErrorList([ValidationError("This field is required.")])),
     ])
     min_value_error_list = ErrorList([
         ValidationError("Ensure this value is greater than or equal to 0.")
     ])
     e = ErrorDict(
         init_errors,
         date=ErrorList([
             ErrorDict({
                 "day": min_value_error_list,
                 "month": min_value_error_list,
                 "year": min_value_error_list,
             }),
         ]),
     )
     e["renderer"] = ErrorList([
         ValidationError(
             "Select a valid choice. That choice is not one of the "
             "available choices."),
     ])
     self.assertJSONEqual(
         json.dumps(e),
         {
             "__all__": ["Sorry this form only works on leap days."],
             "name": ["This field is required."],
             "date": [
                 {
                     "day":
                     ["Ensure this value is greater than or equal to 0."],
                     "month":
                     ["Ensure this value is greater than or equal to 0."],
                     "year":
                     ["Ensure this value is greater than or equal to 0."],
                 },
             ],
             "renderer": [
                 "Select a valid choice. That choice is not one of the "
                 "available choices."
             ],
         },
     )
예제 #5
0
    def _patch(self, data):
        '''
        Update an instance from supplied data.
        '''

        self._errors = errors = ErrorDict()

        for name in self._field_names:
            if self._fields[name].readonly:
                continue
            try:
                value = data[name]
            except KeyError:
                continue
            try:
                setattr(self, name, value)
            except ValidationError as e:
                if name not in errors:
                    errors[name] = ErrorList()
                errors[name].append(e)

        # Allow a final pass of cleaning
        self._clean(data, full=False)

        if self._errors:
            raise ValidationError(self._errors)

        return self._obj
 def is_valid(self):
     # need to make one of the detail forms required, depending on our value
     if "is_completion_date_known" in self.data.keys():
         is_completion_date_known = self.data["is_completion_date_known"]
         required_form = self.detail_form_for_key(is_completion_date_known)
         if required_form:
             form_is_valid = super().is_valid()
             # we need the detail form field to be required for validation,
             # but not on the client as then they can't change their minds…
             required_form.make_field_required()
             required_form_is_valid = required_form.is_valid()
             required_form.make_field_not_required()
             # now ensure that any errors on the contained forms are also on the containing form
             if self._errors is None:
                 self._errors = ErrorDict()
             if required_form.errors is not None:
                 for field, error in required_form.errors.items():
                     self._errors[f"{required_form.prefix}-{field}"] = error
             return all(
                 (
                     form_is_valid,
                     required_form_is_valid,
                 )
             )
     return super().is_valid()
예제 #7
0
    def _clean_dependency(self, name=None):
        if name is None:
            names = self._cleaned_data.keys()
        else:
            names = [name]

        errors = ErrorDict()
        for name in names:
            if name in self._dependency:
                try:
                    field, pairs = self._dependency[name]
                    try:
                        _ = field.clean(self._cleaned_data[name])
                    except forms.ValidationError:
                        continue
                    for sub_name, sub_field in pairs:
                        _ = sub_field.clean(
                            self._cleaned_data[sub_name])  # NOQA
                except forms.ValidationError as exc:
                    error_dict = TextErrorDict([(sub_name, exc.messages)])
                    errors[name] = [error_dict]
                    del self._cleaned_data[name]

        if errors:
            raise forms.ValidationError(errors)
예제 #8
0
 def get(self, request, *args, **kwargs):
     errors = ErrorDict()
     errors[NON_FIELD_ERRORS] = ErrorList([
         ValidationError(
             _('Your feedback could not be sent, please try again later'))
     ])
     return self.make_response(errors=errors)
예제 #9
0
 def security_errors(self):
     """Return just those errors associated with security"""
     errors = ErrorDict()
     for f in ["honeypot", "timestamp", "security_hash"]:
         if f in self.errors:
             errors[f] = self.errors[f]
     return errors
예제 #10
0
    def test__post_clean(self, secret, monkeypatch):

        form = APIKeyAdminCreateForm(data={
            "name": "Test Secret Key",
            "secret": secret
        })

        # Manually invoking internals of Form.full_clean() to isolate
        # Form._post_clean
        form._errors = ErrorDict()
        form.cleaned_data = {}
        form._clean_fields()
        form._clean_form()

        # assert form is valid but instance is not yet saved in the db.
        assert form.instance.pk is None
        assert form.is_valid() is True

        # assert that the instance does not have the owner account populated
        assert form.instance.djstripe_owner_account is None

        # Invoke _post_clean()
        form._post_clean()

        if secret.startswith("sk_"):
            assert form.instance.type == enums.APIKeyType.secret
            assert (form.instance.djstripe_owner_account.id ==
                    FAKE_PLATFORM_ACCOUNT["id"])
        elif secret.startswith("rk_"):
            assert form.instance.type == enums.APIKeyType.restricted
            assert form.instance.djstripe_owner_account is None
예제 #11
0
def merge_form_errors(forms_to_merge=None):
    forms_to_merge = forms_to_merge or []

    form_errors = ErrorDict()
    for form in forms_to_merge:
        # check if form
        if isinstance(form, BaseForm):
            for field, errors in form.errors.items():
                if field == NON_FIELD_ERRORS:
                    key = NON_FIELD_MESSAGE
                else:
                    key = form.fields[field].label
                form_errors[key] = errors

        # check if formset
        if isinstance(form, BaseFormSet):
            for inner_form in form.forms:
                for field, errors in inner_form.errors.items():
                    if field == NON_FIELD_ERRORS:
                        key = NON_FIELD_MESSAGE
                    else:
                        key = inner_form.fields[field].label
                        if not key:
                            key = 'Other'

                    form_errors[key] = errors

    return form_errors
예제 #12
0
 def _add_error(self, message, field=NON_FIELD_ERRORS):
     try:
         self._errors[field].append(message)
     except (KeyError, TypeError):
         if not self._errors:
             self._errors = ErrorDict()
         self._errors[field] = self.error_class([message])
예제 #13
0
def addmodelpage(request):
    p_id = ''
    if request.method == 'POST':
        if 'pk' in request.GET:
            """Обновление данных модели"""
            category = Category.objects.get(pk=int(request.GET['pk']))
            form = AddPostModelForm(request.POST, request.FILES, instance=category)
            if form.is_valid():
                form.save()
        else:
            """ Создание новой модель """
            form = AddPostModelForm(request.POST, request.FILES)
            if form.is_valid():
                _values = form.cleaned_data
                p = Category(**_values)
                p.save()
                p_id = '?pk=' + str(p.id)
    else:
        if 'pk' in request.GET:
            """ Отображение существующей модели """
            p = Category.objects.values().get(pk=int(request.GET['pk']))
            form = AddPostModelForm(p)
            p_id = '?pk=' + str(p.get('id'))
            form._errors = ErrorDict()  # отключение валидации полей
        else:
            """ Отображение новой модель """
            form = AddPostModelForm()

    return render(request, 'forms/addpage.html', {'form': form, 'p_id': p_id, 'title': 'Добавление статьи'})
예제 #14
0
 def __init__(self, *args, **kwargs):
     check_roles = kwargs.pop('check_roles', False)
     super(BaseUserFormSet, self).__init__(*args, **kwargs)
     if not check_roles:
         return
     for form in self.forms:
         if not form.initial:
             continue
         user = form.initial['user']
         site = form.initial['current_site']
         roles_with_sites = get_user_roles_on_sites_ids(user)
         roles_for_current_site = []
         for role_id, sites_ids in roles_with_sites.items():
             if site.id in sites_ids:
                 roles_for_current_site.append(role_id)
         if len(roles_for_current_site) <= 1:
             continue
         role_names = Role.objects.filter(
             id__in=roles_for_current_site).values_list('name', flat=True)
         form._errors = ErrorDict()
         form._errors['__all__'] = ErrorList([
             'User %s has multiple roles: %s. '
             'A user can\'t have multiple roles in the same site. '
             'Unassign this user until this error disappears.' % (
                 user.email or user.username, ', '.join(role_names))])
예제 #15
0
def add_file(request: HttpRequest, department_id: int):
    dep: Department = Department.objects.get(id=department_id)
    form = DepartmentFileForm()
    errors: ErrorDict = ErrorDict()

    if request.method == 'POST':
        form = DepartmentFileForm(
            request.POST or None, request.FILES or None, instance=None)

        if form.is_valid():
            obj: DepartmentFile = form.save(commit=False)
            obj.uploader = request.user
            obj.department = dep
            obj.save()

            return redirect(department, dep.pk)

        else:
            errors = form.errors

    context = {
        'errors': errors,
        'form': form,
    }
    return render(request, 'dashboard/upload-file.html', context)
예제 #16
0
def task(request, dept_id, task_id=None):
    dept = Department.objects.get(id=dept_id)
    task = Task.objects.get(id=task_id) if not task_id == None else None
    form = TaskForm(instance=task)
    errors: ErrorDict = ErrorDict()

    if request.method == 'POST':
        if not task_id == None:
            task = Task.objects.get(id=task_id)
            form = TaskForm(request.POST or None, instance=task)

        else:
            form = TaskForm(request.POST)

        if form.is_valid():
            obj = form.save() if task_id == None else form.save(commit=False)
            obj.department.add(dept)
            obj.creator = request.user
            obj.save()

            return redirect(department, dept.id)

        else:
            errors = form.errors

    context = {
        'form': form,
        'task': task,
        'errors': errors,
        'dept_id': dept_id,
    }

    return render(request, 'dashboard/task_v2.html', context)
예제 #17
0
 def _post_clean(self):
     """
     Rewrite the error dictionary, so that its keys correspond to the model fields.
     """
     super(NgModelFormMixin, self)._post_clean()
     if self._errors and self.prefix:
         self._errors = ErrorDict((self.add_prefix(name), value) for name, value in self._errors.items())
예제 #18
0
 def full_clean(self):
     if self.is_bound and self.type_is_empty():
         # skip any other validation in this case
         self._errors = ErrorDict()
         self.cleaned_data = {}
     else:
         super(EventRepeatForm, self).full_clean()
예제 #19
0
 def full_clean(self):
     """
     Clean all of self._data and populate self._errors and self._cleaned_data.
     """
     self._errors = ErrorDict()
     self._cleaned_data = {}
     self._clean_fields()
예제 #20
0
 def full_clean(self):
     if not self.find_enabled_value():
         self.cleaned_data = {
             'enabled': False,
         }
         self._errors = ErrorDict()
     else:
         return super(AccountForm, self).full_clean()
예제 #21
0
파일: forms.py 프로젝트: msaelices/met
    def is_valid(self):
        result = super(ChartForm, self).is_valid()

        if result:
            result = self.cleaned_data['fromDate'] <= self.cleaned_data['toDate']
            if not result:
                errors = ErrorDict()
                errors['toDate'] = 'End date must not be before Start date'
                self._errors = errors
            else:
                result = (self.cleaned_data['toDate'] -
                          self.cleaned_data['fromDate']).days < 12
                if not result:
                    errors = ErrorDict()
                    errors['fromDate'] = 'The maximum number of days shown in the chart is 11 days'
                    self._errors = errors

        return result
예제 #22
0
    def full_clean(self):
        self._errors = ErrorDict()
        if not self.is_bound:  # Stop further processing.
            return
        self.cleaned_data = {}
        # If the form is permitted to be empty, and none of the form data has
        # changed from the initial data, short circuit any validation.
        if self.empty_permitted and not self.has_changed():
            return

        self._clean_fields()
        if not self.cleaned_data.get('reviewer_submitted', True):
            self._errors = ErrorDict()
        if self.instance.invitation.review.is_complete:
            self.add_error(field=None, error='Feedback cannot be updated on a completed review')
        # FIXME: we should not rely on internal marked methods, need to clean this up
        self._clean_form()
        self._post_clean()
예제 #23
0
 def clean(self):
     """Override the clean method, in order to ensure that forms for
     creating new objects are not marked as invalid if there is no
     data relevant to them."""
     if self.is_new_form and not self.has_post_data():
         self._errors = ErrorDict()
         self.cleaned_data = {}
     else:
         self.cleaned_data = super(EditForm, self).clean()
     return self.cleaned_data
예제 #24
0
def nice_errors(form, non_field_msg='General form errors'):
    nice_errors = ErrorDict()
    if isinstance(form, forms.BaseForm):
        for field, errors in list(form.errors.items()):
            if field == NON_FIELD_ERRORS:
                key = non_field_msg
            else:
                key = form.fields[field].label
            nice_errors[key] = errors
    return nice_errors
예제 #25
0
    def security_errors(self):
        '''
        Include the reCAPTCHA field in security errors.
        '''
        errors = ErrorDict()
        for field_name in ['spam_protection', 'timestamp', 'security_hash']:
            if field_name in self.errors:
                errors[field_name] = self.errors[field_name]

        return errors
예제 #26
0
 def clean(self):
     super().clean()
     if settings.SEND_CONFIRMATION_EMAIL:
         uid = self.cleaned_data.get('uid', False)
         if uid and not cache.get(uid, False):
             self._errors = ErrorDict()
             self.add_error(
                 'uid',
                 _('Confirmation link is invalid or expired, please register again'
                   ))
예제 #27
0
def validation_error_as_text(error):
    """
    Given a ValidationError object, return a string representing the errors.
    """
    try:
        ed = ErrorDict(error.message_dict)
        return ed.as_text()
    except AttributeError:
        el = ErrorList(error.messages)
        return el.as_text()
예제 #28
0
파일: forms.py 프로젝트: krzywon/NEMO
def nice_errors(form, non_field_msg="General form errors"):
    result = ErrorDict()
    if isinstance(form, BaseForm):
        for field, errors in form.errors.items():
            if field == NON_FIELD_ERRORS:
                key = non_field_msg
            else:
                key = form.fields[field].label
            result[key] = errors
    return result
예제 #29
0
def validate_formset(question_group, formset):
    if question_group.required:
        answers = extract_form_answers(question_group, formset)
        # Needed to unset all of the errors
        formset._errors = ErrorDict()
        formset.cleaned_data = formset.data

        if not (any(answers)) or not ('on' in six.itervalues(answers)):
            return False
    return True
예제 #30
0
def add_patient(request):
    if request.user.is_authenticated and request.user.manager.role == "Manager":
        if request.POST:
            user_form = UserForm(request.POST)
            patient_form = PatientForm(request.POST)
            if user_form.is_valid() and patient_form.is_valid():
                user = user_form.save(commit=False)
                password = request.POST["password"]
                try:
                    password_validation.validate_password(password)
                except Exception as e:
                    errAsDict = {
                        'password': ErrorDict({'': '\n'.join(e.messages)})
                    }
                    return render(request, 'manager/add_patient.html',
                                  {'user_form_error': ErrorDict(errAsDict)})
                passwordConfirm = request.POST["passwordConfirm"]
                if password != passwordConfirm:
                    return render(
                        request, 'manager/add_patient.html', {
                            'other_errors':
                            ErrorDict({
                                "Password":
                                ErrorDict({'': "Passwords do not match"})
                            })
                        })
                user.set_password(password)
                user.save()
                patient = patient_form.save(commit=False)
                patient.user = user
                patient.role = "Patient"
                patient.save()
                return redirect('/manager/get_report')
            else:
                return render(
                    request, 'manager/add_patient.html', {
                        'user_form_error': user_form.errors,
                        'patient_form_error': patient_form.errors
                    })
        else:
            return render(request, 'manager/add_patient.html')
    return redirect('/')