Issue #57, update the registration app to use Celery

This commit is contained in:
Roberto Rosario
2014-10-11 01:53:33 -04:00
parent dd1832d0c9
commit 47a3a9ff62
3 changed files with 22 additions and 8 deletions

View File

@@ -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()

View 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)

View File

@@ -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: