ivknv / yadisk

Библиотека-клиент REST API Яндекс.Диска для Python / Yandex.Disk REST API client library for Python

Home Page:https://yadisk.readthedocs.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Не работает фильтр полей fields

Necrobsd opened this issue · comments

Делаю запрос:
y.listdir('/path', fields='name, type')
А в ответ приходят все поля. В чем может быть проблема? Я неправильно указываю список полей?
Версия yadisk 1.2.11

Параметр fields должен быть массивом (или чем-нибудь подобным):

y.listdir('/path', fields=["name", "type"])

В таком случае получаю ошибку:
list(y.listdir('/path', fields=["name"])) Traceback (most recent call last): File "<input>", line 1, in <module> File "/home/alex/.pyenv/versions/backup/lib/python3.5/site-packages/yadisk/functions/resources.py", line 292, in _listdir for child in result.embedded.items: AttributeError: 'NoneType' object has no attribute 'items'

Эта ошибка возникает потому что таких полей в ответе нет (хотя это и баг, поправлю как-нибудь).
Судя по всему, вместо "name" и "type" должно быть "embedded.name" и "embedded.type", тогда всё работает как надо:

y.listdir('/path', fields=["embedded.name", "embedded.type"])

Увы. Пришли также все поля.
Запрос:
list(y.listdir('app:/', fields=["embedded.name","embedded.type"]))
Ответ:
[<ResourceObject{'file': None, 'embedded': None, 'modified': datetime.datetime(2018, 9, 13, 13, 40, 26, tzinfo=datetime.timezone.utc), 'created': datetime.datetime(2018, 9, 13, 13, 40, 26, tzinfo=datetime.timezone.utc), 'exif': <EXIFObject{'date_time': None}>, 'md5': None, 'share': None, 'type': 'dir', 'custom_properties': None, 'revision': 1536846026647000, 'mime_type': None, 'comment_ids': <CommentIDsObject{'private_resource': '547528787:7f3b52d024474ce38b76ee0c262cdca90f02f06277724ea18d429aa747a8c5ae', 'public_resource': '547528787:7f3b52d024474ce38b76ee0c262cdca90f02f06277724ea18d429aa747a8c5ae'}>, 'public_url': None, 'antivirus_status': None, 'name': '2018_09_13__23_40_23_diff', 'path': 'disk:/Приложения/uploader/2018_09_13__23_40_23_diff', 'media_type': None, 'size': None, 'preview': None, 'resource_id': '547528787:7f3b52d024474ce38b76ee0c262cdca90f02f06277724ea18d429aa747a8c5ae', 'sha256': None, 'public_key': None}>]

ОК, теперь должно быть правильно.
Ещё один баг вскрылся :)

y.listdir('app:/', fields=["embedded.offset", "embedded.limit", "embedded.total",
                           "embedded.items.name", "embedded.items.type"])

"embedded.offset", "embedded.limit", "embedded.total" нужны, чтобы не было другой ошибки :).

Попробуйте последнюю версию с гитхаба:

pip install git+https://github.com/ivknv/yadisk

Заодно проверьте версию установленной библиотеки, теперь должно быть 1.2.12:

import yadisk

print(yadisk.__version__) # 1.2.12

В последней версии всё должно работать как нужно (никакие embedded больше не нужны):

y.listdir('/path', fields=["name", "type"])