Запретить Sphinx выполнять кэшированное свойство classmethodPython

Программы на Python
Ответить
Anonymous
 Запретить Sphinx выполнять кэшированное свойство classmethod

Сообщение Anonymous »

Я пишу пакет для взаимодействия с набором данных и имею код, который выглядит примерно так

Код: Выделить всё

from abc import ABC, ABCMeta, abstractmethod
from functools import cache
from pathlib import Path
from warnings import warn

class DatasetMetaClass(ABCMeta):
r"""Meta Class for Datasets"""

@property
@cache
def metaclass_property(cls):
r"""Compute an expensive property (for example: dataset statistics)."""
warn("Caching metaclass property...")
return "result"

# def __dir__(cls):
#     return list(super().__dir__()) + ['metaclass_property']

class DatasetBaseClass(metaclass=DatasetMetaClass):
r"""Base Class for datasets that all datasets must subclass"""

@classmethod
@property
@cache
def baseclass_property(cls):
r"""Compute an expensive property (for example: dataset statistics)."""
warn("Caching baseclass property...")
return "result"

class DatasetExampleClass(DatasetBaseClass, metaclass=DatasetMetaClass):
r"""Some Dataset Example."""
Проблема в том, что во время make html sphinx фактически выполняет свойство baseclass_property, что является очень дорогостоящей операцией. (Среди прочего: проверяет, существует ли набор данных локально, если нет, загружает его, предварительно обрабатывает, вычисляет статистику набора данных, косит газон и выносит мусор.)
Я заметил, что это так. не произойдет, если я сделаю это свойством метакласса, потому что свойство метакласса не отображается в вызове классов __dir__, что может быть, а может и не быть ошибкой. Добавление его в __dir__ вручную путем раскомментирования двух строк приводит к тому, что sphinx также обрабатывает свойство метакласса.
Вопросы:
  • Это ошибка в Sphinx? Учитывая, что @properties обычно обрабатываются нормально, кажется непреднамеренным, что он нарушается для @classmethod@property.
  • Какой вариант лучше всего - на данный момент - чтобы избежать этой проблемы? Могу ли я как-то сказать Sphinx не анализировать эту функцию? Я надеюсь, что есть возможность либо отключить sphinx для функции с помощью комментария, аналогичного # noqa, # type: ignore, # pylint Disable= и т. д., либо с помощью какого-либо @ nodoc декоратор.


Подробнее здесь: https://stackoverflow.com/questions/683 ... d-property
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»