user8010538
user8010538

Reputation:

TypeError: %d format: a number is required, not datetime.timedelta

Here is the code and the Traceback :

@staff_member_required
@require_http_methods(['POST'])
def fax_contract(request, pk=None):
    if request.is_ajax() and pk:
        print("Sending contract for request {}".format(pk))

        try:
            contract = Contract.objects.get(pk=pk)
        except Contract.DoesNotExist:
            return HttpResponseNotFound(_('Contract not found'))

        now = datetime.datetime.now()
        last_faxed = contract.request.last_faxed_at
        if last_faxed and (now - last_faxed) < settings.LOANWOLF_FAX_GRACE_TIME:
            return JsonResponse({
                'error': True,
                'reload': False,
                'message': _('Please wait at least %(minutes)d minutes to resend the contracts') % {
                    'minutes': settings.LOANWOLF_FAX_GRACE_TIME},
            })
        else:
            contract.request.last_faxed_at = datetime.datetime.now()
            contract.request.save()
            subject, msg = ('', '')
            # TODO: audit log
            try:
                send_mail = send_mail(subject, msg,
                    settings.LOANWOLF_FAX_EMAIL_FROM,
                    settings.LOANWOLF_FAX_EMAIL_TO.format(contract.request.customerprofile.fax),
                    fail_silently=False)
                return JsonResponse({'success': True, 'reload': True})
            except Exception as e:
                return JsonResponse({'error': True, 'message': str(e)})

and

Traceback (most recent call last):
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/contrib/staticfiles/handlers.py", line 63, in __call__
    return self.application(environ, start_response)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__
    response = self.get_response(request)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 124, in get_response
    response = self._middleware_chain(request)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
    response = response_for_exception(request, exc)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
    response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 128, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django_extensions/management/technical_response.py", line 6, in null_technical_500_response
    six.reraise(exc_type, exc_value, tb)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/exception.py", line 39, in inner
    response = get_response(request)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
    response = self._get_response(request)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/views/decorators/http.py", line 40, in inner
    return func(request, *args, **kwargs)
  File "/home/jeremie/Projects/24-django/loanwolf/contracts/views.py", line 71, in fax_contract
    'minutes': settings.LOANWOLF_FAX_GRACE_TIME},
  File "/home/jeremie/Projects/24-django/venv/lib/python2.7/site-packages/django/utils/functional.py", line 159, in __mod__
    return six.text_type(self) % rhs
TypeError: %d format: a number is required, not datetime.timedelta

The problem is clearly located where LOANWOLF_FAX_GRACE_TIME is defined. So here is that line : LOANWOLF_FAX_GRACE_TIME = timedelta(minutes=5).

In fact, I have a button that each time we press on it, it will a fax to a certain place. We want to prevent that someone will send to much copy of the fax. So we want to insert a time interval of five minutes between each tentative of sending a fax. How could I fix this issue here.

Upvotes: 0

Views: 699

Answers (1)

Ozgur Vatansever
Ozgur Vatansever

Reputation: 52103

Formatter expects an integer whereas you pass a timedelta instance instead. You can convert it to seconds and then divide it by 60:

...
  'minutes': settings.LOANWOLF_FAX_GRACE_TIME.seconds // 60
})

Upvotes: 1

Related Questions