Ejemplo n.º 1
0
def recalculateGCIStudentRanking(request, *args, **kwargs):
    """Recalculates GCI Student Ranking for the specified student.
  """

    student = gci_student_logic.getFromKeyName(kwargs['key_name'])
    if not student:
        return responses.terminateTask()

    # find ranking entity for the student and clear it
    filter = {'student': student}
    ranking = gci_student_ranking_logic.getForFields(filter=filter,
                                                     unique=True)
    ranking.points = 0
    ranking.tasks = []
    ranking.put()

    # get all the tasks that the student has completed
    filter = {
        'student': student,
        'status': 'Closed',
    }
    tasks = gci_task_logic.getForFields(filter=filter)

    for task in tasks:
        gci_student_ranking_logic.updateRanking(task)

    return responses.terminateTask()
Ejemplo n.º 2
0
def recalculateGCIStudentRanking(request, *args, **kwargs):
  """Recalculates GCI Student Ranking for the specified student.
  """

  student = gci_student_logic.getFromKeyName(kwargs['key_name'])
  if not student:
    return responses.terminateTask()

  # find ranking entity for the student and clear it
  filter = {
      'student': student
      }
  ranking = gci_student_ranking_logic.getForFields(filter=filter,
      unique=True)
  ranking.points = 0
  ranking.tasks = []
  ranking.put()

  # get all the tasks that the student has completed
  filter = {
      'student': student,
      'status': 'Closed',
      }
  tasks = gci_task_logic.getForFields(filter=filter)

  for task in tasks:
    gci_student_ranking_logic.updateRanking(task)

  return responses.terminateTask()
Ejemplo n.º 3
0
def sendParentalFormMail(request, *args, **kwargs):
  """Method executed by Task Queue API to send remainder email to
  existing students for sending parental consent forms.

  Optionally accepts the start_key entry to be present in the
  POST dict.

  Args:
    request: the standard Django HTTP request object
  """

  post_dict = request.POST

  program_key = post_dict.get('program_key')
  if not program_key:
    return error_handler.logErrorAndReturnOK(
        'The program key is not specified: %s' % post_dict)

  program = gci_program_logic.getFromKeyName(program_key)
  if not program:
    return error_handler.logErrorAndReturnOK(
        'Invalid program key specified: %s' % program_key)

  fields = {
      'scope': program,
      'parental_form_mail': False,
      }

  start_key = post_dict.get('start_key', None)

  if start_key:
    # retrieve the last student entity that was converted
    start = gci_student_logic.getFromKeyName(start_key)

    if not start:
      # invalid starting student key specified, log and return OK
      return error_handler.logErrorAndReturnOK(
          'Invalid Student Key specified: %s' %(start_key))

    fields['__key__ >'] = start.key()

  # get the first batch_size number of StudentProjects
  entities = gci_student_logic.getForFields(fields, limit=DEF_BATCH_SIZE)

  for entity in entities:
    gci_notifications.sendParentalConsentFormRequired(
        entity.user, entity.scope)
    gci_student_logic.updateEntityProperties(
        entity, {'parental_form_mail': True})

  if len(entities) == DEF_BATCH_SIZE:
    # spawn new task starting from the last
    new_start = entities[DEF_BATCH_SIZE-1].key().id_or_name()

    # pass along these params as POST to the new task
    task_params = {
        'start_key': new_start,
        'program_key': program_key,
        }

    new_task = taskqueue.Task(params=task_params,
                              url=DEF_SPAWN_TASK_URL)
    new_task.add('mail')

  # return OK
  return HttpResponse('OK')