Как изменить обработчик blobstoreupload, чтобы допустить статус 200?

Говорят, что в GAE SDK 1.5.4 удалено требование о том, что обработчик blobstoreuploadhandler должен возвращать перенаправление, а на производстве это якобы уже сделано, чтобы обработчик мог сделать «обычный» ответ на шаблон с переменными шаблона. Мне нужна эта возможность с dev_appserver, и поэтому я спрашиваю, как я могу изменить dev_appserver, чтобы разрешить обработчику отображать шаблон с переменными шаблона. Я предполагаю, что код, который мне нужно изменить, находится в файле http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/tools/dev_appserver_blobstore.py, но я не знаю, что нужно изменить. Не подскажете, как сделать так, чтобы обработчик мог нормально отвечать?

  def EndRedirect(self, redirected_outfile, original_outfile):
      """Handle the end of upload complete notification.

      Makes sure the application upload handler returned an appropriate status
      code.
      """
      response = dev_appserver.RewriteResponse(redirected_outfile)
      logging.info('Upload handler returned %d', response.status_code)

      if (response.status_code in (301, 302, 303) and
          (not response.body or len(response.body.read()) == 0)):
        contentless_outfile = cStringIO.StringIO()


        contentless_outfile.write('Status: %s\n' % response.status_code)
        contentless_outfile.write(''.join(response.headers.headers))
        contentless_outfile.seek(0)
        dev_appserver.URLDispatcher.EndRedirect(self,
                                                contentless_outfile,
                                                original_outfile)
      else:
        logging.error(
            'Invalid upload handler response. Only 301, 302 and 303 '
            'statuses are permitted and it may not have a content body.')
        original_outfile.write('Status: 500\n\n')

Обновление: решение опубликовано по этой ссылке https://groups.google.com/forum/#!topic/google-appengine-python/vnvhUG1-UN0


person Niklas R.    schedule 27.08.2011    source источник
comment
Нельзя ли просто дождаться 1.5.4 или пока протестировать в продакшене?   -  person Nick Johnson    schedule 29.08.2011
comment
Вы пытались просто добавить 200 в список (301, 302, 303)?   -  person cope360    schedule 30.08.2011
comment
Спасибо за ответ. Да, я могу подождать. И да, я пытался просто добавить 200 в список, и это не помогло, так что, возможно, это не тривиально, и вместо этого лучше работать над своим собственным кодом и просто сохранить 2 версии метода, который я хочу обновить (это был беспорядочный класс, который я Я получаю помощь в codereview.stack...) Я могу просто дождаться 1.5.4 или протестировать в производстве.   -  person Niklas R.    schedule 30.08.2011
comment
Пожалуйста, опубликуйте решение как ответ и примите его.   -  person agf    schedule 02.09.2011


Ответы (1)


Решение было опубликовано, и я мог убедиться, что это сработало:

def EndRedirect(self, dispatched_output, original_output):

"""Handle the end of upload complete notification. Makes sure the application upload handler returned an appropriate status code. """

    response = dev_appserver.RewriteResponse(dispatched_output)

    logging.info('Upload handler returned %d', response.status_code)
    outfile = cStringIO.StringIO()
    outfile.write('Status: %s\n' % response.status_code)

    if response.body and len(response.body.read()) > 0:
      response.body.seek(0)
      outfile.write(response.body.read())
    else:
      outfile.write(''.join(response.headers.headers))

    outfile.seek(0)

dev_appserver.URLDispatcher.EndRedirect(self,outfile,original_output)
person Niklas R.    schedule 07.09.2011