Issue #57, update the registration app to use Celery
This commit is contained in:
@@ -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()
|
||||
|
||||
14
mayan/apps/registration/tasks.py
Normal file
14
mayan/apps/registration/tasks.py
Normal file
@@ -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)
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user