Я работаю с приложением Django Pyroven и делаю некоторые важные изменения в его функциональности. В рамках этого я начал писать для него рамки тестирования, так как в настоящее время он не имеет модульных тестов. В качестве фона он использует University of Cambridge Raven service для аутентификации и предлагает сервер аутентификации для Django, чтобы использовать эту услугу.Разница во времени и Datetime в ошибке триггера python
Проблема, с которой я сталкиваюсь, проверяет токен WLS-Response от Ворона. Это формирует строку !
значений, разделенных, которые включают в себя поле времени в формате:
%Y%m%dT%H%M%SZ
В моем коде тестирования я создал это как:
raven_issue = datetime.now().strftime('%Y%m%dT%H%M%SZ')
, а затем вернулся, что в URL тестирования для обработки по представлению. Проблема связана с проверкой того, что это время не слишком далеко в прошлом для проверки ответа. Код, который проверяет это использует:
def parse_time(t):
"""Converts a time of the form '20110729T123456Z' to a number of seconds
since the epoch.
@exception ValueError if the time is not a valid Raven time"""
time_struct = time.strptime(t, "%Y%m%dT%H%M%SZ")
return calendar.timegm(time_struct)
Теперь, когда он передается строка выше от datetime.now() конструктор, проверка на этом проанализированного значения не удается:
# Check that the issue time is not in the future or too far in the past:
if self.issue > time.time() + PYROVEN_MAX_CLOCK_SKEW:
raise InvalidResponseError("The timestamp on the response is in the future")
if self.issue < time.time() - PYROVEN_MAX_CLOCK_SKEW - PYROVEN_TIMEOUT:
raise InvalidResponseError("The response has timed out")
Этот код не с моим тестом, утверждая, что ответ был исчерпан. Значения для PYROVEN_MAX_CLOCK_SKEW
и PYROVEN_TIMEOUT
составляют 2 с и 10 с соответственно.
Это задает вопрос, есть ли какая-то изменчивость в обработке времени, которую я не понимаю? Если я поместил генерируемое значение datetime.now()
с datetime.timedelta
из 2 часов в будущем, преобразуйте его в строку и передайте ее на проверку, которая не сработает, несмотря на то, что в будущем это будет время. Почему это, как предполагает логическое чтение кода?
Звуки как вопрос с часовым поясом для меня, вы случайно на GMT + 0200? –
Хм может быть - я Европа/Лондон (BST) – jvc26