Python 冻结时间'ignore'不';t似乎无法在更复杂的设置中工作(Django&x2B;S3/boto)
我使用Django和S3作为文件存储(使用boto3/botocorelibs)。我有一个“管理”命令,可以创建一些Django实例-我使用的是冷冻枪,所以这些实例似乎是在过去创建的。但是,其中一些模型包含保存到S3的文件,这会引发一些异常:Python 冻结时间'ignore'不';t似乎无法在更复杂的设置中工作(Django&x2B;S3/boto),python,django,amazon-s3,python-import,freezegun,Python,Django,Amazon S3,Python Import,Freezegun,我使用Django和S3作为文件存储(使用boto3/botocorelibs)。我有一个“管理”命令,可以创建一些Django实例-我使用的是冷冻枪,所以这些实例似乎是在过去创建的。但是,其中一些模型包含保存到S3的文件,这会引发一些异常: ... File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 314, in _api_call return se
...
File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 314, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/home/rado/.virtualenvs/twisto/lib/python3.6/site-packages/botocore/client.py", line 612, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (RequestTimeTooSkewed) when calling the ListObjectsV2 operation: The difference between the request time and the current time is too large.
这是由于botocore.auth
模块中的一些身份验证代码检查时间差造成的。我尝试使用ignore
参数(freeze\u time(datetime\u过去,ignore=['botocore'])
来解决这个问题,但是没有帮助,botocore.auth
仍然使用FakeDatetime
(我使用带断点的调试器来查明问题)
我试图用一个简单的可复制的例子来重现这个问题,因此我提出了以下建议:
#test.py
从冷冻枪导入冷冻时间
从日期时间导入日期时间
在之间导入内容
导入测试时间——根据您的描述,我不清楚您在这种情况下使用冰枪的目的。我怀疑冰枪不是这个工作的合适工具,但正如前面提到的,我不清楚你想达到什么目的。您是否试图在S3中创建具有过去时间戳的对象?@Dunedan我添加了一个说明-我只希望模型本身以及它们包含的日期时间字段使用假时间保存。为什么不简单地使用日期时间字段的默认值参数来设置静态时间,而不是使用冷冻枪。这可能看起来像date\u created=models.DateTimeField(默认值=datetime.datetime(2020,1,1,1,1,1,1))
从您的描述中,我不清楚您在这个上下文中使用冰枪的目的。我怀疑冰枪不是这个工作的合适工具,但正如前面提到的,我不清楚你想达到什么目的。您是否试图在S3中创建具有过去时间戳的对象?@Dunedan我添加了一个说明-我只希望模型本身以及它们包含的日期时间字段使用假时间保存。为什么不简单地使用日期时间字段的默认值参数来设置静态时间,而不是使用冷冻枪。这可能看起来像date\u created=models.DateTimeField(默认值=datetime.datetime(2020,1,1,1,1,1,1))