В наших целях мы хотели экспортировать каждую из страниц вики отдельно без верхнего / нижнего колонтитула и другого содержимого, специфичного для экземпляра.Для этой цели хорошо подойдет интерфейс XML-RPC.Вот скрипт Python 3.6+, который я создал для экспорта всей вики в файлы HTML в текущем каталоге.Обратите внимание, что этот метод не перезаписывает никаких гиперссылок, поэтому они будут полностью разрешены для сайта.
import os
import xmlrpc.client
import getpass
import urllib.parse
def add_auth(url):
host = urllib.parse.urlparse(url).netloc
realm = os.environ.get('TRAC_REALM', host)
username = getpass.getuser()
try:
import keyring
password = keyring.get_password(realm, username)
except Exception:
password = getpass.getpass(f"password for {username}@{realm}: ")
if password:
url = url.replace('://', f'://{username}:{password}@')
return url
def main():
trac_url = add_auth(os.environ['TRAC_URL'])
rpc_url = urllib.parse.urljoin(trac_url, 'login/xmlrpc')
trac = xmlrpc.client.ServerProxy(rpc_url)
for page in trac.wiki.getAllPages():
filename = f'{page}.html'.lstrip('/')
dir = os.path.dirname(filename)
dir and os.makedirs(dir, exist_ok=True)
with open(filename, 'w') as f:
doc = trac.wiki.getPageHTML(page)
f.write(doc)
__name__ == '__main__' and main()
Этот сценарий требует только Python 3.6, поэтому загрузите и сохраните в файле export-wiki.py, а затемустановите переменную окружения TRAC_URL и вызовите скрипт.Например, в Unix:
$ TRAC_URL=http://mytrac.mydomain.com python3.6 export-wiki.py
Будет запрошен пароль.Если пароль не требуется, просто нажмите Enter, чтобы обойти.Если требуется другое имя пользователя, также установите переменную среды USER.Поддержка ключей также доступна, но ее можно игнорировать.