Python Dropbox API v2: ошибка при передаче SharedLinkSettings - PullRequest
0 голосов
/ 24 мая 2018

В моем классе Python у меня есть функция, которая генерирует CSV-файл, загружает этот файл в Dropbox, а затем пытается создать общую ссылку на загруженный файл со сроком действия 5 минут.

Я пытаюсь следовать приведенному примеру здесь ;мой код ниже:

    # Helper upload function
    def upload_file(self, dbx, file_from, file_to):
        """upload a file to Dropbox using API v2
        """

        with open(file_from, 'rb') as f:
            dbx.files_upload(f.read(), file_to, mode=WriteMode('overwrite'))


    # Target function
    def generate_expiring_dropbox_link(self, local_path, dbx_path):

        dbx = dropbox.Dropbox(self.temp_dropbox_token)

        expires = datetime.datetime.now() + datetime.timedelta(minutes=5)
        requested_visibility = dropbox.sharing.RequestedVisibility.team_only

        desired_shared_link_settings = dropbox.sharing.SharedLinkSettings(requested_visibility=requested_visibility, 
                                                            expires=expires)

        # open the file and upload it
        self.upload_file(dbx, local_path, dbx_path)

        shared_link_metadata = dbx.sharing_create_shared_link_with_settings(path=dbx_path, settings=desired_shared_link_settings)

        return shared_link_metadata

Я постоянно получаю ошибку API, связанную с настройками общей ссылки:

    dropbox.exceptions.ApiError: ApiError('************', CreateSharedLinkWithSettingsError('settings_error', SharedLinkSettingsError('invalid_settings', None)))

Я не могу найти много документации по этому вопросу;кто-нибудь сталкивался с этим / нашел решение?Просто интересно, есть ли исправление на основе Python или лучше обернуть HTTP-запрос.Я использую Python 3.6 и Dropbox 8.9.0.

1 Ответ

0 голосов
/ 24 мая 2018

API Dropbox ожидает время UTC.Вы указываете местное время, которое может быть в прошлом относительно времени UTC.Если это так, API отклонит настройки, поскольку срок действия не может быть в прошлом.

Таким образом, вместо:

    expires = datetime.datetime.now() + datetime.timedelta(minutes=5)

Do:

    expires = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
...