Почему устаревшие значения заголовка все еще присутствуют при загрузке последующего элемента в archive.org с использованием ia-wrapper?

Я отразил партию видео с EuroPython2014 на archive.org, используя мастер ia-wrapper. Как обсуждено в # 64, метаданные от предыдущей загрузки обнаруживаются при последующей загрузке.

Я просмотрел и вручную отредактировал описания в интерфейсе archive.org (это было всего несколько видеороликов), но я бы хотел, чтобы этого не произошло в следующий раз, когда я буду зеркально отображать конференцию. У меня есть обходной путь (явно задайте заголовки при вызове upload.) Я действительно очень хотел бы знать, как это, что заголовок по-прежнему заполнен из предыдущих вызовов.

Когда я запускаю это, item.py L579 не передает заголовки в kwargs при вызове upload_file. (Я даже прошел через использование отладчика 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: "Наименьшее изумление" и аргумент изменяемого по умолчанию

Изменить это:

def upload_file(self, body, headers={}, ...):

к этому:

def upload_file(self, body, headers=None, ...):
    if headers is None:
        headers = {}
Другие вопросы по тегам