首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在使用ia-包装器将后续项上载到archive.org时,陈旧的标头值仍然存在?

为什么在使用ia-包装器将后续项上载到archive.org时,陈旧的标头值仍然存在?
EN

Stack Overflow用户
提问于 2014-08-17 16:54:13
回答 1查看 54关注 0票数 1

我使用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

代码语言:javascript
复制
#! /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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-17 20:50:26

您已经被Python:“最少的惊讶”和可变的默认参数中的“可变默认值”绊倒了

改变这一点:

代码语言:javascript
复制
def upload_file(self, body, headers={}, ...):

对此:

代码语言:javascript
复制
def upload_file(self, body, headers=None, ...):
    if headers is None:
        headers = {}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25351440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档