我使用ia-wrapper大师在Archive.org上镜像了EuroPython2014的一批视频。如#64中所述,上一次上传的元数据会显示在后续的上传中。
我浏览了一下并手动编辑了archive.org界面中的描述(这只是一些视频),但是我希望下次我镜像会议时不会发生这种情况。我有一个解决方法(在调用Upload时明确设置了标头。)我真的很想知道仍然从以前的调用中填充标头字典的方式。
当我运行此命令时,item.py L579在调用upload_file时未在kwargs中传递标头。 (我什至逐步使用了pycharm的调试器)。
到底他妈发生了什么?
如果您想尝试一下,下面的代码将对其进行演示。pip install -e git+https://github.com/jjjake/ia-wrapper.git@9b7b951cfb0e9266f329c9fa5a2c468a92db75f7#egg=internetarchive-master
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
import internetarchive as ia
import os
from tempfile import NamedTemporaryFile
ACCESS_KEY = os.environ.get('IAS3_ACCESS_KEY')
SECRET_KEY = os.environ.get('IAS3_SECRET_KEY')
now = datetime.datetime.utcnow().strftime('%Y_%m_%d_%H%M%S')
item = ia.Item('test_upload_iawrapper_first_%s' % now)
item2 = ia.Item('test_upload_iawrapper_second_%s' % now)
def upload(item, metadata):
with NamedTemporaryFile() as fh:
fh.write('testing archive_uploader')
item.upload(fh.name,
metadata=metadata,
access_key=ACCESS_KEY,
secret_key=SECRET_KEY,
# adding headers={} is a workaround
)
upload(item,
metadata={
'collection': 'test_collection',
'description': 'not an empty description',
})
upload(item2,
metadata={
'collection': 'test_collection',
# you can also comment out description and get hte same result
'description': '',
})
print 'visit https://archive.org/details/{}'.format(item.identifier)
print 'visit https://archive.org/details/{}'.format(item2.identifier)
最佳答案
您已经在Python中绊倒了“可变默认值”陷阱:"Least Astonishment" and the Mutable Default Argument
更改此:
def upload_file(self, body, headers={}, ...):
对此:
def upload_file(self, body, headers=None, ...):
if headers is None:
headers = {}
关于python - 为什么使用ia-wrapper将后续项目上传到archive.org时,过时的 header 值仍然存在?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25351440/