diff -r bd2918172bfd -r c31428f08daa app/soc/modules/ghop/tasks/task_update.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/modules/ghop/tasks/task_update.py Thu Aug 27 11:13:52 2009 +0200 @@ -0,0 +1,158 @@ +#!/usr/bin/python2.5 +# +# Copyright 2009 the Melange authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Appengine Tasks related to GHOP Task handling. +""" + +__authors__ = [ + '"Madhusudan.C.S" ' + ] + + +import logging +import os + +from google.appengine.api.labs import taskqueue +from google.appengine.ext import db + +from django import http +from django.utils.translation import ugettext + +from soc.tasks.helper import error_handler +from soc.views.helper import redirects + +from soc.modules.ghop.logic.models import task as ghop_task_logic + + +DEF_TASK_UPDATE_SUBJECT_FMT = ugettext('[GHOP Task Update] %(title)s') + + +def getDjangoURLPatterns(): + """Returns the URL patterns for the tasks in this module. + """ + + patterns = [ + (r'^tasks/ghop/task/update$', + 'soc.modules.ghop.tasks.task_update.updateGHOPTask'), + (r'^tasks/ghop/task/update/student_status$', + 'soc.modules.ghop.tasks.task_update.updateTasksPostStudentSignUp')] + + return patterns + + +def spawnUpdateTask(entity): + """Spawns a task to update the state of the task. + """ + + update_params = { + 'ghop_task_key': entity.key().name(), + } + update_url = '/tasks/ghop/task/update' + + new_task = taskqueue.Task(eta=entity.deadline, + params=update_params, + url=update_url) + new_task.add('ghop-update') + + +def updateGHOPTask(request, *args, **kwargs): + """Method executed by Task Queue API to update a GHOP Task to + relevant state. + + Expects the ghop_task_key entry to be present in the POST dict. + + Args: + request: the standard Django HTTP request object + """ + + post_dict = request.POST + + key_name = post_dict.get('ghop_task_key') + + if not key_name: + # invalid task data, log and return OK + return error_handler.logErrorAndReturnOK( + 'Invalid updateGHOPTask data: %s' % post_dict) + + entity = ghop_task_logic.logic.getFromKeyNameOr404(key_name) + + entity, comment_entity, ws_entity = ghop_task_logic.logic.updateTaskStatus( + entity) + + if entity: + # TODO(madhusudan): does this really mean an unsuccessful update? + # return OK + return http.HttpResponse() + + +def updateTasksPostStudentSignUp(request, *args, **kwargs): + """Appengine task that updates the GHOP Tasks after the student signs up. + + Expects the following to be present in the POST dict: + student_key: Specifies the student key name who registered + + Args: + request: Django Request object + """ + from soc.modules.ghop.logic.models import student as ghop_student_logic + + post_dict = request.POST + + student_key = post_dict.get('student_key') + + if not student_key: + # invalid student data, log and return OK + return error_handler.logErrorAndReturnOK( + 'Invalid Student data: %s' % post_dict) + + student_entity = ghop_student_logic.logic.getFromKeyNameOr404(student_key) + + # retrieve all tasks currently assigned to the user + task_fields = { + 'user': student_entity.user, + } + task_entities = ghop_task_logic.logic.getForFields(task_fields) + + # TODO(madhusudan) move this to the Task Logic + # Make sure the tasks store references to the student as well as + # closing all tasks that are AwaitingRegistration. + for task_entity in task_entities: + task_entity.student = student_entity + if task_entity.status == 'AwaitingRegistration': + task_entities.remove(task_entity) + + properties = {'status': 'Closed'} + changes = [ugettext('User-MelangeAutomatic'), + ugettext('Action-Student registered'), + ugettext('Status-%s' % (properties['status']))] + + comment_properties = { + 'parent': task_entity, + 'scope_path': task_entity.key().name(), + 'created_by': None, + 'changes': changes, + 'content': ugettext( + '(The Melange Automated System has detected that the student ' + 'has signed up for the program and hence has closed this task.'), + } + + ghop_task_logic.logic.updateEntityPropertiesWithCWS( + task_entity, properties, comment_properties) + + db.put(task_entities) + + # return OK + return http.HttpResponse()