Как я копирую wsgi.input, если я хочу обработать данные POST несколько раз?

Существует много теории при тестировании случайности. Для очень простого теста на алгоритме перестановки карты Вы могли сделать много перестановок и затем работать, хи придала тесту квадратную форму, что вероятность каждой карты, поднимающейся в любом положении, была универсальна. Но это не тестирует это, последовательные карты не коррелируются так, Вы также хотели бы сделать тесты на этом.

Объем 2 из Искусства Knuth Программирования дают много тестов, которые Вы могли использовать в разделах 3.3.2 (Эмпирические тесты) и 3.3.4 (Спектральный Тест) и теория позади них.

7
задан joeforker 23 November 2009 в 14:18
поделиться

3 ответа

Взгляните на пакет WebOb . Он предоставляет функциональные возможности, позволяющие указать, что wsgi.input должен быть доступен для поиска. Это позволяет вам перематывать входной поток, чтобы контент можно было воспроизвести с помощью другого обработчика. Даже если вы не используете WebOb, то, как он это делает, должно быть поучительным, так как можно было бы поверить, что Ян сделал это надлежащим образом. Результаты поиска в документации см. здесь .

7
ответ дан 6 December 2019 в 10:00
поделиться

Вы можете попробовать поместить файловую реплику потока обратно в среду:

from cStringIO import StringIO

length = int(environ.get('CONTENT_LENGTH', '0'))
body = StringIO(environ['wsgi.input'].read(length))
environ['wsgi.input'] = body

Необходимость в этом - немного неприятный запах. В идеале только один фрагмент кода должен анализировать строку запроса и тело сообщения и доставлять результаты другим компонентам.

11
ответ дан 6 December 2019 в 10:00
поделиться

Если вы собираетесь прочитать его одним махом, вы всегда можете прочитать его, создать файл-подобный объект CStringIO для материала, который вы прочитали, а затем назначить его обратно, например это:

import cStringIO
import copy
lines = []
for line in environ['wsgi.input']:
    lines.append(line)
newlines = copy.copy(lines)
environ['wsgi.input'] = cStringIO.StringIO(''.join(newlines))

Скорее всего, есть более эффективный способ сделать это, но в целом я нахожу сообщения wsgi довольно хрупкими, если вы хотите сделать что-нибудь нетривиальное (например, прочитать многократное повторение данных сообщения) ...

1
ответ дан 6 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: