我正在使用Django應用程序Pyroven,並且正在對其功能進行一些重大修改。作爲其中的一部分,我已經開始爲它編寫測試框架,因爲目前它沒有單元測試。作爲後臺,它使用University of Cambridge Raven service進行身份驗證,併爲Django提供身份驗證後端以利用此服務。python觸發器錯誤中的時間和日期時間差異
我遇到的問題是測試來自Raven的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
的值分別爲2s和10s。
這引出了一個問題,在處理時間上有一些變化,我不明白嗎?如果我將datetime.now()
生成的值與將來的2小時的datetime.timedelta
一起,將其轉換爲字符串並將其傳遞給驗證,儘管時間戳將來不會失敗,但應該如此。爲什麼這樣做,正如代碼的邏輯解讀所表明的那樣?
聲音像我的時區問題;你是在GMT + 0200嗎? –
嗯可能是 - 我是歐洲/倫敦(BST) – jvc26