Я написал программу на Python 3 и использую Sphinx для ее документирования. Autodoc Sphinx великолепен, однако он работает только с Python 2. Некоторые модули прекрасно работают в autodoc, а модули — нет. Некоторые примеры: Python 2 жалуется на метаклассы в стиле Python 3 и некоторые модули, которые больше не существуют в Python 2, такие как configparser. Это раздражает, так как он не может импортировать строки документации из этого файла.
Я не хочу переписывать всю программу на Python 2, но хочу использовать autodoc.
Одной из моих идей была небольшая программа, которая читала каждый файл Python и удаляла всю функциональность, но просто оставляла основные функции и классы с их строками документации (поскольку autodoc импортирует каждый модуль и считывает строку документации конкретной функции или класса).
import configparser
import os
class TestClass:
"""
I am a class docstring.
"""
def method(self, argument):
"""
I am a method docstring.
"""
#Some code here
print(os.getcwd())
def TestFunction():
"""
I am a function docstring.
"""
#Some more useless code here
return os.path.join("foo", "bar")
в...
class TestClass:
"""
I am a class docstring.
"""
def method(self, argument):
"""
I am a method docstring.
"""
pass
def TestFunction():
"""
I am a function docstring.
"""
pass
Таким образом, обработанный код может быть прочитан autodoc, но при этом будут сохранены строки документации, что мне действительно нужно. Это лучший способ сделать это, и есть ли у кого-нибудь какие-либо предложения относительно того, как написать небольшую программу, которая преобразует код.
Я могу очень легко решить проблему метакласса с помощью некоторых регулярных выражений, но я борюсь с остальными.
m = re.search("\(metaclass=.*\)", file_content)
if m:
file_content = "".join(file_content[:m.start()], file_content[m.end():])
Будет ли полезен модуль ast?
Спасибо.