Hello all, I am trying to use Google App Engine queues API, and I am having problems with this. It seems that in some part of the process the CSRF it's not working or it's getting problems with the api.
as I understand the api executes the task calling the url and making and http request in background. The complete url is the API is calling is → http://localhost.localdomain:8000/admin/cooking/recipe/36/chefworker/ When it raises this exception: Traceback (most recent call last): File "/home/mariocesar/Proyectos/Cooking/cooking/django/core/ handlers/base.py", line 100, in get_response response = callback(request, *callback_args, **callback_kwargs) File "/home/mariocesar/Proyectos/Cooking/cooking/django/views/ decorators/csrf.py", line 24, in wrapped_view resp.csrf_exempt = True AttributeError: 'NoneType' object has no attribute 'csrf_exempt' So, the csrf middleware, the cookie, some data or the response itself is missing from the request that the GAE api makes to execute the task in the background. How to solve this without disabling CSRF on Django? however, it's posible to have views for workers using djangoappengine at all? Down are the models.py and admin.py files I am using. **models.py** from django.db import models class Recipe(models.Model): name = models.CharField(max_length=140) description = models.TextField() cooking_time = models.PositiveIntegerField() status = models.CharField(max_length=40) def __unicode__(self): return self.name def cookthis(self): import time self.status = 'The chef is cooking this recipe' self.save() time.sleep(obj.cooking_time) self.status = 'It\'s done ! the recipe is ready to serve' self.save() **admin.py** import logging from django.contrib import admin, messages from django.http import HttpResponse from django.utils.functional import update_wrapper from django.contrib.admin.util import unquote from django.shortcuts import get_object_or_404, render_to_response from django import template from django.core.urlresolvers import reverse from google.appengine.api import taskqueue from google.appengine.api.taskqueue import TaskAlreadyExistsError from cooking.models import Recipe from django.views.decorators.csrf import csrf_exempt class AdminRecipe(admin.ModelAdmin): def get_urls(self): from django.conf.urls.defaults import patterns, url def wrap(view): def wrapper(*args, **kwargs): return self.admin_site.admin_view(view)(*args, **kwargs) return update_wrapper(wrapper, view) info = self.model._meta.app_label, self.model._meta.module_name urlpatterns = super(AdminRecipe, self).get_urls() myurls = patterns('', url(r'^(.+)/cook/$', wrap(self.cook_view), name='%s_%s_chefworker' % info), url(r'^(.+)/chefworker/$', wrap(self.chefworker_worker), name='%s_%s_chefworker' % info), ) return myurls + urlpatterns def cook_view(self, request, object_id, extra_context=None): obj = get_object_or_404(Recipe, pk=unquote(object_id)) if request.POST: try: taskqueue.add( name="recipie-%s" % obj.id, url=reverse('admin:cooking_recipe_chefworker', args=(obj.id,)) ) messages.add_message(request, messages.INFO, 'Chef is cooking the recipe.') except TaskAlreadyExistsError: messages.add_message(request, messages.ERROR, 'chef is already cooking that recipe.') context_instance = template.RequestContext(request, current_app=self.admin_site.name) return render_to_response("admin/cooking/recipe/ cook_view.html", {'object': obj}, context_instance=context_instance) #TODO: Add csrf token on form @csrf_exempt def chefworker_worker(self, request, object_id, extra_context=None): import time if request.POST: obj = get_object_or_404(Recipe, pk=unquote(object_id)) obj.cookthis() return HttpResponse('done') admin.site.register(Recipe, AdminRecipe) A VERY IMPORTANT NOTE: Was hard to debug this error, cause the dev_appserver logger was just raising 403 errors, no other info; so, I have to patch the file google/ appengine/api/taskqueue/taskqueue_stub.py line 574 and add "logging.info('response --- \n%s' % result)" to get the output of the exceptions. I would appreciate any help Best Regards -- You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en.
