diff --git a/mayan/apps/registration/models.py b/mayan/apps/registration/models.py index 0e5bd52f9b..037a3920c4 100644 --- a/mayan/apps/registration/models.py +++ b/mayan/apps/registration/models.py @@ -8,9 +8,10 @@ from django.utils.translation import ugettext_lazy as _ from solo.models import SingletonModel +from installation.models import Installation from lock_manager import Lock, LockError -from .literals import FORM_SUBMIT_URL, FORM_KEY, FORM_RECEIVER_FIELD, TIMEOUT +from .literals import FORM_KEY, FORM_RECEIVER_FIELD, FORM_SUBMIT_URL, TIMEOUT from .exceptions import AlreadyRegistered @@ -51,15 +52,13 @@ class RegistrationSingleton(SingletonModel): def is_registered(self): return self.registered - def register(self, form): - from installation.models import Installation - + def register(self, form_data): if self.is_registered: raise AlreadyRegistered installation = Installation.objects.get() dictionary = {} - dictionary.update(form.cleaned_data) + dictionary.update(form_data) dictionary.update({ 'uuid': installation.uuid }) @@ -75,8 +74,8 @@ class RegistrationSingleton(SingletonModel): else: try: requests.post(FORM_SUBMIT_URL, data={'formkey': FORM_KEY, FORM_RECEIVER_FIELD: self.registration_data}, timeout=TIMEOUT) - except (requests.exceptions.Timeout, requests.exceptions.ConnectionError): - pass + except Exception: + raise else: self.registered = True self.save() diff --git a/mayan/apps/registration/tasks.py b/mayan/apps/registration/tasks.py new file mode 100644 index 0000000000..5a76d35222 --- /dev/null +++ b/mayan/apps/registration/tasks.py @@ -0,0 +1,14 @@ +import requests + +from mayan.celery import app + +from .exceptions import AlreadyRegistered +from .models import RegistrationSingleton + + +@app.task(ignore_result=True, max_retries=None, rate_limit='1/m', throws=(AlreadyRegistered,)) +def task_registration_register(form_data): + try: + RegistrationSingleton.register(form_data) + except (requests.exceptions.Timeout, requests.exceptions.ConnectionError) as exception: + raise self.retry(exc=exception) diff --git a/mayan/apps/registration/views.py b/mayan/apps/registration/views.py index 2d76722381..291ce8df6f 100644 --- a/mayan/apps/registration/views.py +++ b/mayan/apps/registration/views.py @@ -10,6 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from .exceptions import AlreadyRegistered from .forms import RegistrationForm from .models import RegistrationSingleton +from .tasks import task_registration_register def form_view(request): @@ -19,7 +20,7 @@ def form_view(request): form = RegistrationForm(request.POST) if form.is_valid(): try: - registration.register(form) + task_registration_register.apply_async(args=[form.cleaned_data], queue='tools') messages.success(request, _(u'Thank you for registering.')) return HttpResponseRedirect(reverse('main:home')) except AlreadyRegistered: