为啥使用 ia-wrapper 将后续项目上传到 archive.org 时仍然存在陈旧的标头值?

Posted

技术标签:

【中文标题】为啥使用 ia-wrapper 将后续项目上传到 archive.org 时仍然存在陈旧的标头值?【英文标题】:Why are stale header values still around when uploading a subsequent Item to archive.org using ia-wrapper?为什么使用 ia-wrapper 将后续项目上传到 archive.org 时仍然存在陈旧的标头值? 【发布时间】:2014-08-17 16:54:13 【问题描述】:

我使用 ia-wrapper 的 master 在 archive.org 上镜像了一批来自 EuroPython2014 的视频。正如#64 中所讨论的,之前上传的元数据会显示在后续上传中。

我检查并手动编辑了 archive.org 界面中的描述(这只是其中的一些视频),但我希望下次我镜像会议时不要发生这种情况。我有一个解决方法(在调用上传时显式设置标题。)我真的很想知道标题字典仍然是从以前的调用中填充的。

当我运行它时,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)

【问题讨论】:

【参考方案1】:

您在 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 = 

【讨论】:

以上是关于为啥使用 ia-wrapper 将后续项目上传到 archive.org 时仍然存在陈旧的标头值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将一个 MERN 堆栈项目完全上传到 Github? (在其他地方找不到解决方案)

为啥我的项目没有从 Visual Studio 上传到 github?

为啥使用“--requirements_file”将依赖项上传到 GCS?

为啥 Android 使用 pinImages 将可变位图的纹理上传到 GPU?

为啥我的多文件上传器(使用 Carrierwave 和 Cloudinary)上传文件正常,但没有将所有文件附加到模型/表格?

使用机械化将文件上传到 Sharepoint 失败,我不知道为啥