def form_valid(self, form):
        if self.model.objects.all().count() > settings.MAX_REGISTERS:
            date_now = datetime.now()
            date_clean = datetime(date_now.year, date_now.month, date_now.day,
                                  date_now.hour) + timedelta(hours=1)
            date_diff = date_clean - date_now
            errors = form._errors.setdefault("location", ErrorList())
            errors.append(
                _("Ha llegado al limite de registros. Quedan {} minutos para reestablecer la base de datos"
                  .format(date_diff.seconds / 60)))
            return super(PhoneCreate, self).form_invalid(form)

        if self._pk is not None:
            contact = get_object_or_404(Contact, pk=self._pk)
            form.instance.contact = contact
        return super(PhoneCreate, self).form_valid(form)
Exemple #2
0
    def clean(self, value):
        cleaned_data = []
        errors = {}
        for i, child in enumerate(value):  # child is a BoundBlock instance
            try:
                cleaned_data.append(
                    (child.block.name, child.block.clean(child.value)))
            except ValidationError as e:
                errors[i] = ErrorList([e])

        if errors:
            # The message here is arbitrary - outputting error messages is delegated to the child blocks,
            # which only involves the 'params' list
            raise StreamBlockValidationError(block_errors=errors)

        return StreamValue(self, cleaned_data)
Exemple #3
0
    def form_valid(self, form):
        challenge = self.request.challenge
        form.instance.user = self.request.user
        form.instance.challenge = challenge
        try:
            redirect = super().form_valid(form)
            if challenge.require_participant_review:
                # Note, sending an email here rather than in signals as
                # the function requires the request.
                send_participation_request_notification_email(
                    self.request, self.object)
            return redirect

        except ValidationError as e:
            form._errors[NON_FIELD_ERRORS] = ErrorList(e.messages)
            return super().form_invalid(form)
Exemple #4
0
def import_tasks(request):
    """ View in the admin """
    if request.method == 'POST':
        form = ImportForm(request.POST, request.FILES)
        if form.is_valid():
            try:
                Task.import_Tasks(form.files['file'], request.user, form.cleaned_data['is_template'])
                messages.success(request, "The import was successful.")
                return HttpResponseRedirect(reverse('admin:tasks_task_changelist'))
            except Exception as e:
                from django.forms.utils import ErrorList
                msg = "An Error occured. The import file was probably malformed: %s" % str(e)
                form._errors["file"] = ErrorList([msg])
    else:
        form = ImportForm()
    return render(request, 'admin/tasks/task/import.html', {'form': form, 'title':"Import Task"  })
Exemple #5
0
    def clean(self):
        cleaned_data = super(AddLdapGroupsForm, self).clean()
        groupname_pattern = cleaned_data.get("groupname_pattern")
        dn = cleaned_data.get("dn")

        try:
            if dn:
                validate_dn(groupname_pattern)
            else:
                validate_groupname(groupname_pattern)
        except ValidationError as e:
            errors = self._errors.setdefault('groupname_pattern', ErrorList())
            errors.append(e.message)
            raise forms.ValidationError(e.message)

        return cleaned_data
 def clean(self, value):
     ret = super(MapBlock, self).clean(value)
     if not any([
             bool(value.get(val))
             for val in ('people', 'events', 'projects', 'groups')
     ]):
         errors = dict([
             (val,
              ErrorList(
                  [_('At least one type of Map object must be chosen!')]))
             for val in ('people', 'events', 'projects', 'groups')
         ])
         raise ValidationError(
             _('At least one type of Map object must be chosen!'),
             params=errors)
     return ret
Exemple #7
0
    def form_valid(self, form):
        main_key = UserProfile.objects.get_auth_key(self.request.user)
        auth_key = form.cleaned_data['authenticate_key']

        totp = pyotp.TOTP(main_key)

        is_valid = totp.verify(auth_key)

        if is_valid:
            self.request.session['is_authenticated'] = True
            return super(AuthenticateUserView, self).form_valid(form)

        form_errors = form._errors.setdefault('authenticate_key', ErrorList())
        form_errors.append("Invalid autnentication code")

        return super(AuthenticateUserView, self).form_invalid(form)
Exemple #8
0
def update_attestations(request):
    """ View in the admin """
    if request.method == 'POST':
        form = ImportForm(request.POST, request.FILES)
        if form.is_valid():
            try:
                Attestation.update_Attestations(request, form.files['file'])
                return render(request, 'admin/attestation/update.html', {
                    'form': form,
                    'title': "Update Attestations"
                })
            except Exception, e:
                from django.forms.utils import ErrorList
                msg = "An Error occured. The import file was propably malformed.: %s" % str(
                    e)
                form._errors["file"] = ErrorList([msg])
Exemple #9
0
 def perform_action(self):
     """
     Upload the files
     """
     errors = ErrorList()
     for file in self.files.getlist('file_field'):
         try:
             ProjectFiles().fput(self.file_dir, file)
         except FileExistsError:
             errors.append(
                 format_html('Item named <i>{}</i> already exists',
                             file.name))
         except OSError:
             errors.append(
                 format_html('Unable to upload <i>{}</i>', file.name))
     return 'Your files have been uploaded', errors
Exemple #10
0
    def perform_action(self):
        """
        Create the folder
        """
        errors = ErrorList()
        name = self.cleaned_data['folder_name']

        file_path = os.path.join(self.file_dir, name)
        try:
            ProjectFiles().mkdir(file_path)
        except FileExistsError:
            errors.append(
                format_html('Item named <i>{}</i> already exists', name))
        except OSError:
            errors.append(format_html('Unable to create <i>{}</i>', name))
        return 'Your folder has been created', errors
Exemple #11
0
    def is_valid(self, *args, **kwargs):
        is_valid = super().is_valid(*args, **kwargs)
        DEFAULT_FILTERS = [
            "exclude_fields", "fields", "limit", "minimal", "offset", "page_size", "ordering"
        ]
        for field in self.data.keys():
            if field in DEFAULT_FILTERS:
                continue

            if field not in self.filters:
                errors = self.form._errors.get("errors", ErrorList())
                errors.extend(["Invalid Filter: '{field}'".format(field=field)])
                self.form._errors["errors"] = errors
                is_valid = False

        return is_valid
    def validate(self, value, errors=None):
        '''Performs validation of the StreamBlock.'''
        if errors is None:
            errors = {}
        non_block_errors = ErrorList()

        if self.meta.min_num is not None and self.meta.min_num > len(value):
            non_block_errors.append(
                ValidationError(
                    _('The minimum number of items is %d') %
                    self.meta.min_num))
        elif self.required and len(value) == 0:
            non_block_errors.append(
                ValidationError(_('This field is required.')))

        if self.meta.max_num is not None and self.meta.max_num < len(value):
            non_block_errors.append(
                ValidationError(
                    _('The maximum number of items is %d') %
                    self.meta.max_num))

        if self.meta.block_counts:
            block_counts = collections.defaultdict(int)
            for item in value:
                block_counts[item.block_type] += 1

            for block_name, min_max in self.meta.block_counts.items():
                block = self.child_blocks[block_name]
                max_num = min_max.get('max_num', None)
                min_num = min_max.get('min_num', None)
                block_count = block_counts[block_name]
                if min_num is not None and min_num > block_count:
                    non_block_errors.append(
                        ValidationError('{}: {}'.format(
                            block.label,
                            _('The minimum number of items is %d') % min_num)))
                if max_num is not None and max_num < block_count:
                    non_block_errors.append(
                        ValidationError('{}: {}'.format(
                            block.label,
                            _('The maximum number of items is %d') % max_num)))

        if errors or non_block_errors:
            # The message here is arbitrary - outputting error messages is delegated to the child blocks,
            # which only involves the 'params' list
            raise StreamBlockValidationError(block_errors=errors,
                                             non_block_errors=non_block_errors)
Exemple #13
0
def login(request):
    next_redirect = request.GET.get('next')

    if request.user.is_authenticated():
        if not next_redirect:
            return HttpResponseRedirect(
                reverse('profile', kwargs={'user_id': request.user.id}))
        else:
            return HttpResponseRedirect(next_redirect)

    if request.method == 'POST':
        # create a form instance and populate it with data from the request:
        form = LoginForm(request.POST)
        # check whether it's valid:
        if form.is_valid():

            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')

            if '@' in username and '.' in username:
                uqs = User.objects.filter(email=username)
                username = uqs.first().username

            user = djauth.authenticate(username=username, password=password)

            if user is None:
                errors = form._errors.setdefault(NON_FIELD_ERRORS, ErrorList())
                errors.append(u"Could not authenticate you.")

            else:
                djauth.login(request, user)
                next_redirect = request.POST.get('next')
                if not next_redirect:
                    return HttpResponseRedirect(
                        reverse('profile', kwargs={'user_id':
                                                   request.user.id}))
                else:
                    return HttpResponseRedirect(next_redirect)

    # if a GET (or any other method) we'll create a blank form
    else:
        form = LoginForm()

    return render(request, 'auth/login.html', {
        'form': form,
        'next': next_redirect
    })
Exemple #14
0
    def clean(self, value):
        clean_data = {}
        errors = ErrorList()
        if not value or isinstance(value, dict):
            if not value or not [
                    v for v in value.values() if v not in self.empty_values
            ]:
                if self.required:
                    raise ValidationError(self.error_messages['required'])
                else:
                    return {}
        else:
            raise ValidationError(self.error_messages['invalid'])

        # sort out required => at least one element must be in there
        for key, val in value.items():
            # ignore empties. Can they even come up here?
            if key in self.empty_values and val in self.empty_values:
                continue

            try:
                val = self.contained_field.clean(val)
            except ValidationError as e:
                # Collect all validation errors in a single list, which we'll
                # raise at the end of clean(), rather than raising a single
                # exception for the first error we encounter.
                errors.extend(e.messages)

            try:
                self._validate_key(key)
            except ValidationError as e:
                # Collect all validation errors in a single list, which we'll
                # raise at the end of clean(), rather than raising a single
                # exception for the first error we encounter.
                errors.extend(e.messages)

            clean_data[key] = val

            if self.contained_field.required:
                self.contained_field.required = False

        if errors:
            raise ValidationError(errors)

        self.validate(clean_data)
        self.run_validators(clean_data)
        return clean_data
Exemple #15
0
    def clean(self, value):
        cleaned = super(ConferenceRegistrationForm, self).clean(value)
        question = cleaned.get('govdelivery_question_id')
        answer = cleaned.get('govdelivery_answer_id')

        # Question and answer values must both exist or neither exist
        if (question and not answer) or (answer and not question):
            raise ValidationError(
                'Validation error in Conference Registration Form: '
                'GovDelivery question ID requires answer ID, and vice versa.',
                params={
                    'govdelivery_answer_id':
                    ErrorList(
                        ['Required if a GovDelivery question ID is entered.'])
                })

        return cleaned
Exemple #16
0
def edit_profile(request):
    if request.method == "POST":
        form = EditProfileForm(request.POST)
        if form.is_valid():
            if not request.user.check_password(form.cleaned_data['password']):
                form._errors['password'] = ErrorList(
                    [u'The password you entered is incorrect.'])
            else:
                request.user.email = form.cleaned_data['email']
                if form.cleaned_data['password1']:
                    request.user.set_password(form.cleaned_data['password1'])
                request.user.save()
                return HttpResponseRedirect('/settings/')
    else:
        form = EditProfileForm()
        form.fields['email'].initial = request.user.email
    return TemplateResponse(request, "edit_profile_form.html", {'form': form})
Exemple #17
0
 def form_valid(self, *args, **kwargs):
     
     form = kwargs['form']
     new_name = form.cleaned_data['new_name']
     pool = CondorPool.objects.get(id=kwargs['pool_id'])
     assert pool.user == self.request.user 
     
     existing_pools = CondorPool.objects.filter(user=self.request.user).filter(name=new_name)
     
     if existing_pools.count()>0:
         form._errors[NON_FIELD_ERRORS] = ErrorList(['A pool with this name already exists'])
         return self.form_invalid(self, *args, **kwargs)
     
     pool.name = new_name
     pool.save()
     self.success_url = reverse_lazy('pool_details', kwargs={'pool_id': kwargs['pool_id']})
     return super(PoolRenameView, self).form_valid(*args, **kwargs)
Exemple #18
0
    def form_valid(self, form):
        x = PHDBachelorPOS.objects.filter(
            ((Q(state="AdvisorPending") | Q(state="DGSPending")) &
             (Q(owner=self.request.user))))
        y = PHDMasterPOS.objects.filter(
            ((Q(state="AdvisorPending") | Q(state="DGSPending")) &
             (Q(owner=self.request.user))))
        if (len(x) + len(y) > 0):
            form._errors[forms.forms.NON_FIELD_ERRORS] = ErrorList([
                u'Students may only resubmit a form if they do not have a current form under review.'
            ])
            return self.form_invalid(form)

        user = self.request.user
        form.instance.owner = user
        form.instance.state = "AdvisorPending"
        return super(PHDMSUpdateView, self).form_valid(form)
Exemple #19
0
    def clean(self):
        super(ProductDataForm, self).clean()
        if self.instance:
            redirect_to = self.data.get("redirect_to", "")
            if redirect_to != "":
                lfs.core.utils.set_redirect_for(
                    self.instance.get_absolute_url(), redirect_to)
            else:
                lfs.core.utils.remove_redirect_for(
                    self.instance.get_absolute_url())

        if self.data.get("active_base_price", 0):
            if self.data.get("base_price_amount", "") == "":
                self.errors["base_price_amount"] = ErrorList(
                    [_(u"This field is required.")])

        return self.cleaned_data
Exemple #20
0
 def form_valid(self, form):
     opts = {
         'use_https': self.request.is_secure(),
         'token_generator': self.token_generator,
         'from_email': self.from_email,
         'email_template_name': self.email_template_name,
         'subject_template_name': self.subject_template_name,
         'request': self.request,
         'html_email_template_name': self.html_email_template_name,
         'extra_email_context': self.extra_email_context,
     }
     is_saved = form.save(**opts)
     if is_saved == 0:
         form._errors[forms.forms.NON_FIELD_ERRORS] = ErrorList(
             [u'Email does not exist.'])
         return self.form_invalid(form)
     return super().form_valid(form)
Exemple #21
0
 def clean(self):
     # Run subject validation if it exists
     org = self.cleaned_data.get('organization')
     # If there is no org simply return data.
     # Error will be caught downstream
     if not org:
         return self.cleaned_data
     validations = org.subjectvalidation_set.all()
     if validations:
         for check in validations:
             sid = self.cleaned_data.get('organization_subject_id')
             valid = re.match(check.regex, sid)
             if not valid:
                 self._errors["subject"] = ErrorList([
                     "Subject identifier does not meet validation rules for this organization."
                 ])
     return self.cleaned_data
Exemple #22
0
    def save(self):
        """
        Attempts to move the node using the selected target and
        position.

        If an invalid move is attempted, the related error message will
        be added to the form's non-field errors and the error will be
        re-raised. Callers should attempt to catch ``InvalidNode`` to
        redisplay the form with the error, should it occur.
        """
        try:
            self.node.move_to(self.cleaned_data['target'],
                              self.cleaned_data['position'])
            return self.node
        except InvalidMove as e:
            self.errors[NON_FIELD_ERRORS] = ErrorList(e)
            raise
Exemple #23
0
    def clean(self, value):
        result = []
        errors = []
        for child_val in value:
            try:
                result.append(self.child_block.clean(child_val))
            except ValidationError as e:
                errors.append(ErrorList([e]))
            else:
                errors.append(None)

        if any(errors):
            # The message here is arbitrary - outputting error messages is delegated to the child blocks,
            # which only involves the 'params' list
            raise ValidationError('Validation error in ListBlock', params=errors)

        return result
Exemple #24
0
    def form_valid_bridge(self, form, field, model, related_field,
                          error_message):
        """
        call from form_valid.
        @form: it is form of form_valid (type: form)
        @field: name of the form field referring to the brigde (type: string)
        @model: form's model (type class)
        @related_field: name of the related_name of the brigde (type: string)
        @error_message: list of message errors (type list)
            one item, example:
            ["The selected entry is not available anymore, please, try again!", ]
        """
        # get instance of selected external object
        external = form.cleaned_data[field]
        object_edit = model.objects.get(pk=form.instance.pk)
        if object_edit.external == external:
            answer = super(GenUpdateBridge, self).form_valid(form)
        else:
            related_object = get_external_model(model).objects.filter(
                **{
                    "pk": external.pk,
                    "{}__isnull".format(related_field): False
                }).exclude(**{
                    "{}".format(related_field): form.instance,
                }).first()
            if not related_object:
                # form valid
                try:
                    with transaction.atomic():
                        result = super(GenUpdateBridge, self).form_valid(form)
                        field = object_edit.external
                        setattr(field, related_field, None)
                        field.save()
                        setattr(external, related_field, form.instance)
                        external.save()
                    # Return success url
                    answer = HttpResponseRedirect(self.get_success_url())
                except CodenerixException:
                    answer = super(GenUpdateBridge, self).form_invalid(form)
            else:
                errors = form._errors.setdefault(field, ErrorList())
                errors.append(error_message[0])
                answer = super(GenUpdateBridge, self).form_invalid(form)

        # Return result
        return answer
Exemple #25
0
    def clean(self, value):
        """
        Validates every value in the given list. A value is validated against
        the corresponding Field in self.fields.

        Only allows for exactly 1 valid value to be submitted, this is what
        gets returned by compress.

        example to use directy (instead of using FileOrURLField):
            MutuallyExclusiveValueField(
                fields=(forms.TypedChoiceField(choices=[(1,1), (2,2)], coerce=int),
                        forms.IntegerField()))
        """
        clean_data = []
        errors = ErrorList()
        if not value or isinstance(value, (list, tuple)):
            if not value or not [
                    v for v in value if v not in self.empty_values
            ]:
                if self.required:
                    raise ValidationError(self.error_messages['required'],
                                          code='required')
                else:
                    return self.compress([])
        else:
            raise ValidationError(self.error_messages['invalid'],
                                  code='invalid')
        for i, field in enumerate(self.fields):
            try:
                field_value = value[i]
            except IndexError:
                field_value = None
            try:
                clean_data.append(field.clean(field_value))
            except ValidationError as e:
                # Collect all validation errors in a single list, which we'll
                # raise at the end of clean(), rather than raising a single
                # exception for the first error we encounter.
                errors.extend(e.messages)
        if errors:
            raise ValidationError(errors)

        out = self.compress(clean_data)
        self.validate(out)
        self.run_validators(out)
        return out
Exemple #26
0
def login_view(request):
    """
    Standard Django login, with additions:
        Lowercase the login email (username)
        Check user has accepted ToS, if any.
    """
    if request.method == "POST":
        redirect_to = request.POST.get('next', request.GET.get('next', False))
        if not redirect_to:
            redirect_to = reverse('seed:home')

        form = LoginForm(request.POST)
        if form.is_valid():
            new_user = authenticate(
                username=form.cleaned_data['email'].lower(),
                password=form.cleaned_data['password'])
            if new_user is not None and new_user.is_active:
                # TODO: the ToS haven't worked for awhile, reneable?
                # determine if user has accepted ToS, if one exists
                # try:
                #     user_accepted_tos = has_user_agreed_latest_tos(new_user)
                # except NoActiveTermsOfService:
                #     there's no active ToS, skip interstitial
                # user_accepted_tos = True
                #
                # if user_accepted_tos:
                login(request, new_user)
                return HttpResponseRedirect(redirect_to)
                # else:
                #     store login info for django-tos to handle
                # request.session['tos_user'] = new_user.pk
                # request.session['tos_backend'] = new_user.backend
                # context = RequestContext(request)
                # context.update({
                #     'next': redirect_to,
                #     'tos': TermsOfService.objects.get_current_tos()
                # })
                # return render(request, 'tos/tos_check.html', context)
            else:
                errors = ErrorList()
                errors = form._errors.setdefault(NON_FIELD_ERRORS, errors)
                errors.append('Username and/or password were invalid.')
    else:
        form = LoginForm()

    return render(request, 'landing/login.html', locals())
Exemple #27
0
 def form_valid(self, *args, **kwargs):
     
     form = kwargs['form']
     new_name = form.cleaned_data['new_name']
     key = AWSAccessKey.objects.get(id=kwargs['key_id'])
     assert key.user == self.request.user 
     
     existing_keys = AWSAccessKey.objects.filter(user=self.request.user).filter(name=new_name)
     
     if existing_keys.count()>0:
         form._errors[NON_FIELD_ERRORS] = ErrorList(['A key with this name already exists'])
         return self.form_invalid(self, *args, **kwargs)
     
     key.name = new_name
     key.save()
     self.success_url = reverse_lazy('my_account_keys',)
     return super(KeysRenameView, self).form_valid(*args, **kwargs)
Exemple #28
0
    def clean(self, value):
        result = [
        ]  # build up a list of (name, value) tuples to be passed to the StructValue constructor
        errors = {}
        for name, val in value.items():
            try:
                result.append((name, self.child_blocks[name].clean(val)))
            except ValidationError as e:
                errors[name] = ErrorList([e])

        if errors:
            # The message here is arbitrary - StructBlock.render_form will suppress it
            # and delegate the errors contained in the 'params' dict to the child blocks instead
            raise ValidationError('Validation error in StructBlock',
                                  params=errors)

        return self._to_struct_value(result)
    def get(self, request, *args, **kwargs):
        ''' Receives the request '''

        ctx = {}
        # if 'loggedin_user_credentials' in request.session:
        #     ctx = request.session['loggedin_user_credentials']

        if not len(ctx):
            Obj = Photographer.objects.get(user_ref=request.user)
            ctx.update({
                "username": request.user.username,
                "firstname": Obj.firstname,
                "lastname": Obj.lastname,
                "businessname": request.user.businessname,
                "instagram_link1": Obj.instagram_link1,
                "primary_contact_number": request.user.primary_contact_number,
                "countryval": request.user.country.id,
                "city": request.user.city,
                "email": request.user.email,
                "website_link": Obj.website_link
            })
            # self.request.session['loggedin_user_credentials'] = ctx

        CountryQuerySet = Country.objects.all().order_by('name')
        editform = self.editform(ctx)

        editform.errors['firstname'] = ""
        editform.errors['city'] = ""
        editform.errors['primary_contact_number'] = ""
        editform.errors['businessname'] = ""
        editform.errors['email'] = ErrorList()
        editform.errors['username'] = ""
        editform.errors['countryval'] = ""

        ctx.update({'country': CountryQuerySet})
        ctx.update({'editform': editform})

        try:
            PhotographerObj = Photographer.objects.get(user_ref=request.user)
            if len(PhotographerObj.image.all()):
                ctx.update({"show_profile": "1"})
        except:
            ctx.update({"show_profile": "0"})

        return Response(ctx, template_name='my-profile.html')
Exemple #30
0
def add_video(request, pk, suggest):
    form = VideoForm()
    search_form = SearchForm()
    try:
        hall = Hall.objects.get(pk=pk)
    except NameError:
        return redirect('home')
    if (hall.user != request.user) and (suggest == 0):
        raise Http404

    if request.method == 'POST':
        # Create
        form = VideoForm(request.POST)
        if form.is_valid():
            if not suggest:
                video = Video()
            else:
                video = SuggestionVideo()
            video.hall = hall
            video.url = form.cleaned_data['url']
            parsed_url = urllib.parse.urlparse(video.url)
            video_id = urllib.parse.parse_qs(parsed_url.query).get('v')
            if video_id:
                video.youtube_id = video_id[0]
                response = requests.get(
                    f"https://www.googleapis.com/youtube/v3/videos?part=snippet&id={ video_id[0] }&key={YOUTUBE_API_KEY}"
                )
                json = response.json()
                title = json['items'][0]['snippet']['title']
                video.title = title
                thumb_url = json['items'][0]['snippet']['thumbnails'][
                    'medium']['url']
                video.thumbnail_url = thumb_url
                video.save()
                return redirect('detail_hall', hall.id)
            else:
                errors = form._errors.setdefault('url', ErrorList())
                errors.append('Needs to be valid Youtube URL')

    return render(request, 'halls/add_video.html', {
        'form': form,
        'search_form': search_form,
        'hall': hall,
        'suggest': suggest
    })