0
class timetravel(object):
"""
Fast forward in time with simulated CRON jobs (used for unit testing)
"""
delta = None
def __init__(self, *args):
self.initial_now = datetime.now()
if isinstance(args[0], timedelta):
self.delta = delta
elif isinstance(args[0], datetime):
self.now = args[0]
if args[0] > self.initial_now:
self.delta = args[0] - self.initial_now
else:
self.delta = self.initial_now - args[0]
else:
print("Please provide a datetime or timedelta object as argument")
#self.now = self.initial_now
#self.freezer = freeze_time(self.now)
#self.freezer.start()
def __enter__(self):
# Traveling in the past, we don't run cron jobs backward
if self.now < self.initial_now:
self.now = self.now - self.delta
self.freezer = freeze_time(self.now)
self.freezer.start()
# Traveling in the future, run cron jobs
else:
self.now = self.initial_now
self.freezer = freeze_time(self.now)
self.freezer.start()
hours = self.delta.total_seconds()/60/60
weekday = self.now.weekday()
month = self.now.month
year = self.now.year
for i in range(1, int(hours)+1):
call_command('cron', hourly=True, verbosity=0)
if weekday != self.now.weekday():
weekday = self.now.weekday()
call_command('cron', daily=True)
if self.now.weekday() == 6 and weekday != self.now.weekday():
call_command('cron', weekly=True)
if self.now.month != month:
month = self.now.month
call_command('cron', monthly=True)
if self.now.year != year:
year = self.now.year
call_command('cron', yearly=True)
self.freezer.stop()
self.now = self.now + timedelta(hours=1)
self.freezer = freeze_time(self.now)
self.freezer.start()
return self.now
def __exit__(self, *args):
self.freezer.stop()
で定義されていない、私はデルタはクラス
Traceback (most recent call last):
File "...", line 42, in test_timetravel
with timetravel(datetime.timedelta(days=2)) as now:
File ".../utils/testing.py", line 23, in __init__
self.delta = delta
NameError: global name 'delta' is not defined
を得る私が言うことはできません。
2この問題を解決するにはどうすればよいですか?実際には、私はプログラミングでは新しいです。だから、引数として
timetravel
に挿入する必要があるものの良い例は何でしょうか?
私はあなたに書いている:
は、だからあなたのコードでは、単に行を削除する必要があります。ここで良い結果を得るには、観察する必要があるいくつかの原則があります。 (1)あなたが経験している困難を実証するのに必要な最低限のコードの長さを短縮してください。 (2)関連文書を読み、前の答えを見て、自分で答えを見つけることができるかどうかを見てください。 (あなたはあなたの最初の質問に対する答えを得ることができるはずです。)(3)あなたのコードが何をしたいかについて正確にしてください。この場合、あなたは何を「渡す」ことができ、結果はどうなるでしょうか? –