importlib.resources.abc – Абстрактные базовые классы для ресурсов

Источник: Lib/importlib/resources/abc.py


Added in version 3.11.

class importlib.resources.abc.ResourceReader

Заменено на TraversableResources.

Значение abstract base class, обеспечивающее возможность чтения ресурсов.

С точки зрения этого букваря, ресурс - это двоичный артефакт, который поставляется в составе пакета. Обычно это что-то вроде файла данных, который находится рядом с __init__.py файлом пакета. Цель этого класса - помочь абстрагироваться от доступа к таким файлам данных, чтобы не имело значения, хранится ли пакет и его файл(ы) данных в файле zip, а не в файловой системе.

Для любого из методов этого класса аргумент resource должен быть path-like object, который концептуально представляет собой просто имя файла. Это означает, что в аргумент resource не должны включаться пути к подкаталогам. Это происходит потому, что в качестве «каталога» выступает местоположение пакета, для которого предназначен считыватель. Отсюда метафора для каталогов и имен файлов - пакеты и ресурсы, соответственно. Именно поэтому ожидается, что экземпляры этого класса будут напрямую соотноситься с конкретным пакетом (вместо того, чтобы потенциально представлять несколько пакетов или модуль).

Загрузчики, которые хотят поддерживать чтение ресурсов, должны предоставлять метод get_resource_reader(fullname), который возвращает объект, реализующий интерфейс этого ABC. Если модуль, указанный в fullname, не является пакетом, этот метод должен возвращать None. Объект, совместимый с данным ABC, должен возвращаться только в том случае, если указанный модуль является пакетом.

Утратил актуальность с версии 3.12, удален в версии 3.14: Вместо этого используйте importlib.resources.abc.TraversableResources.

abstractmethod open_resource(resource)

Возвращает открытое значение, file-like object для бинарного чтения ресурса.

Если ресурс не может быть найден, выдается сообщение FileNotFoundError.

abstractmethod resource_path(resource)

Возвращает путь файловой системы к ресурсу.

Если ресурс конкретно не существует в файловой системе, поднимите FileNotFoundError.

abstractmethod is_resource(name)

Возвращает True, если имя name считается ресурсом. Возвращается FileNotFoundError, если имя name не существует.

abstractmethod contents()

Возвращает iterable строк над содержимым пакета. Обратите внимание, что не обязательно, чтобы все имена, возвращаемые итератором, были реальными ресурсами, например, допустимо возвращать имена, для которых is_resource() будет ложным.

Разрешение возвращать имена, не относящиеся к ресурсам, необходимо для ситуаций, когда способ хранения пакета и его ресурсов известен априори и имена, не относящиеся к ресурсам, могут быть полезны. Например, возврат имен подкаталогов разрешен для того, чтобы, когда известно, что пакет и ресурсы хранятся в файловой системе, можно было напрямую использовать имена этих подкаталогов.

Абстрактный метод возвращает итерабельную таблицу, не содержащую элементов.

class importlib.resources.abc.Traversable

Объект с подмножеством методов pathlib.Path, подходящих для обхода каталогов и открытия файлов.

Для представления объекта в файловой системе используйте importlib.resources.as_file().

name

Абстрактное. Базовое имя этого объекта без каких-либо родительских ссылок.

abstractmethod iterdir()

Yield Traversable objects in self.

abstractmethod is_dir()

Возвращает True, если self является каталогом.

abstractmethod is_file()

Возвращает True, если self - это файл.

abstractmethod joinpath(*pathsegments)

Обход каталогов в соответствии с pathsegments и возврат результата в виде Traversable.

Каждый аргумент pathsegments может содержать несколько имен, разделенных прямыми косыми чертами (/, posixpath.sep). Например, эквивалентными являются следующие:

files.joinpath('subdir', 'subsuddir', 'file.txt')
files.joinpath('subdir/subsuddir/file.txt')

Обратите внимание, что некоторые реализации Traversable могут быть не обновлены до последней версии протокола. Для совместимости с такими реализациями предоставьте один аргумент без разделителей путей для каждого вызова joinpath. Например:

files.joinpath('subdir').joinpath('subsubdir').joinpath('file.txt')

Изменено в версии 3.11: joinpath принимает несколько сегментов пути, и эти сегменты могут содержать прямые косые черты в качестве разделителей путей. Ранее принимался только один аргумент child.

abstractmethod __truediv__(child)

Возвращает дочерний объект Traversable в self. Эквивалентно joinpath(child).

abstractmethod open(mode='r', *args, **kwargs)

mode может быть „r“ или „rb“ для открытия в текстовом или двоичном виде. Возвращает хэндл, пригодный для чтения (то же, что и pathlib.Path.open).

При открытии в виде текста принимает параметры кодировки, подобные тем, что принимает io.TextIOWrapper.

read_bytes()

Прочитайте содержимое self в виде байтов.

read_text(encoding=None)

Прочитайте содержимое себя как текст.

class importlib.resources.abc.TraversableResources

Абстрактный базовый класс для считывателей ресурсов, способных обслуживать интерфейс importlib.resources.files(). Подклассы ResourceReader и предоставляет конкретные реализации абстрактных методов ResourceReader. Поэтому любой загрузчик, поставляющий TraversableResources, также поставляет ResourceReader.

Загрузчики, которые хотят поддерживать чтение ресурсов, должны реализовать этот интерфейс.

abstractmethod files()

Возвращает объект importlib.resources.abc.Traversable для загруженного пакета.