我使用ia-包装器在EuroPython2014上镜像了一批来自archive.org的视频。正如在#64中讨论的那样,上一次上载的元数据将显示在后续的上载中。
我仔细阅读并编辑了archive.org界面中的描述(这只是一些视频),但我希望下次会议镜像时不要发生这种情况。我有一个解决办法(在调用upload时显式地设置头)。我真的很想知道头dict是如何从以前的调用中填充的。
当我运行它时,当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)发布于 2014-08-17 20:50:26
您已经被Python:“最少的惊讶”和可变的默认参数中的“可变默认值”绊倒了
改变这一点:
def upload_file(self, body, headers={}, ...):对此:
def upload_file(self, body, headers=None, ...):
if headers is None:
headers = {}https://stackoverflow.com/questions/25351440
复制相似问题