forked from platypush/platypush
180 lines
5.5 KiB
Python
180 lines
5.5 KiB
Python
import inspect
|
|
import os
|
|
|
|
from platypush.backend import Backend
|
|
from platypush.context import get_plugin
|
|
from platypush.plugins import Plugin
|
|
from platypush.utils.manifest import get_manifests
|
|
|
|
|
|
def _get_inspect_plugin():
|
|
p = get_plugin('inspect')
|
|
assert p, 'Could not load the `inspect` plugin'
|
|
return p
|
|
|
|
|
|
def get_all_plugins():
|
|
manifests = {mf.component_name for mf in get_manifests(Plugin)}
|
|
return {
|
|
plugin_name: plugin_info
|
|
for plugin_name, plugin_info in _get_inspect_plugin().get_all_plugins().output.items()
|
|
if plugin_name in manifests
|
|
}
|
|
|
|
|
|
def get_all_backends():
|
|
manifests = {mf.component_name for mf in get_manifests(Backend)}
|
|
return {
|
|
backend_name: backend_info
|
|
for backend_name, backend_info in _get_inspect_plugin().get_all_backends().output.items()
|
|
if backend_name in manifests
|
|
}
|
|
|
|
|
|
def get_all_events():
|
|
return _get_inspect_plugin().get_all_events().output
|
|
|
|
|
|
def get_all_responses():
|
|
return _get_inspect_plugin().get_all_responses().output
|
|
|
|
|
|
# noinspection DuplicatedCode
|
|
def generate_plugins_doc():
|
|
plugins_index = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'plugins.rst')
|
|
plugins_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'platypush', 'plugins')
|
|
all_plugins = sorted(plugin for plugin in get_all_plugins().keys())
|
|
|
|
for plugin in all_plugins:
|
|
plugin_file = os.path.join(plugins_dir, plugin + '.rst')
|
|
if not os.path.exists(plugin_file):
|
|
plugin = 'platypush.plugins.' + plugin
|
|
header = '``{}``'.format('.'.join(plugin.split('.')[2:]))
|
|
divider = '=' * len(header)
|
|
body = '\n.. automodule:: {}\n :members:\n'.format(plugin)
|
|
out = '\n'.join([header, divider, body])
|
|
|
|
with open(plugin_file, 'w') as f:
|
|
f.write(out)
|
|
|
|
with open(plugins_index, 'w') as f:
|
|
f.write('''
|
|
Plugins
|
|
=======
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Plugins:
|
|
|
|
''')
|
|
|
|
for plugin in all_plugins:
|
|
f.write(' platypush/plugins/' + plugin + '.rst\n')
|
|
|
|
|
|
# noinspection DuplicatedCode
|
|
def generate_backends_doc():
|
|
backends_index = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'backends.rst')
|
|
backends_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'platypush', 'backend')
|
|
all_backends = sorted(backend for backend in get_all_backends().keys())
|
|
|
|
for backend in all_backends:
|
|
backend_file = os.path.join(backends_dir, backend + '.rst')
|
|
if not os.path.exists(backend_file):
|
|
backend = 'platypush.backend.' + backend
|
|
header = '``{}``'.format('.'.join(backend.split('.')[2:]))
|
|
divider = '=' * len(header)
|
|
body = '\n.. automodule:: {}\n :members:\n'.format(backend)
|
|
out = '\n'.join([header, divider, body])
|
|
|
|
with open(backend_file, 'w') as f:
|
|
f.write(out)
|
|
|
|
with open(backends_index, 'w') as f:
|
|
f.write('''
|
|
Backends
|
|
========
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Backends:
|
|
|
|
''')
|
|
|
|
for backend in all_backends:
|
|
f.write(' platypush/backend/' + backend + '.rst\n')
|
|
|
|
|
|
# noinspection DuplicatedCode
|
|
def generate_events_doc():
|
|
from platypush.message import event as event_module
|
|
events_index = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'events.rst')
|
|
events_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'platypush', 'events')
|
|
all_events = sorted(event for event in get_all_events().keys() if event)
|
|
|
|
for event in all_events:
|
|
event_file = os.path.join(events_dir, event + '.rst')
|
|
if not os.path.exists(event_file):
|
|
header = '``{}``'.format(event)
|
|
divider = '=' * len(header)
|
|
body = '\n.. automodule:: {}.{}\n :members:\n'.format(event_module.__name__, event)
|
|
out = '\n'.join([header, divider, body])
|
|
|
|
with open(event_file, 'w') as f:
|
|
f.write(out)
|
|
|
|
with open(events_index, 'w') as f:
|
|
f.write('''
|
|
Events
|
|
======
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Events:
|
|
|
|
''')
|
|
|
|
for event in all_events:
|
|
f.write(' platypush/events/' + event + '.rst\n')
|
|
|
|
|
|
# noinspection DuplicatedCode
|
|
def generate_responses_doc():
|
|
from platypush.message import response as response_module
|
|
responses_index = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'responses.rst')
|
|
responses_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'docs', 'source', 'platypush', 'responses')
|
|
all_responses = sorted(response for response in get_all_responses().keys() if response)
|
|
|
|
for response in all_responses:
|
|
response_file = os.path.join(responses_dir, response + '.rst')
|
|
if not os.path.exists(response_file):
|
|
header = '``{}``'.format(response)
|
|
divider = '=' * len(header)
|
|
body = '\n.. automodule:: {}.{}\n :members:\n'.format(response_module.__name__, response)
|
|
out = '\n'.join([header, divider, body])
|
|
|
|
with open(response_file, 'w') as f:
|
|
f.write(out)
|
|
|
|
with open(responses_index, 'w') as f:
|
|
f.write('''
|
|
Responses
|
|
=========
|
|
|
|
.. toctree::
|
|
:maxdepth: 2
|
|
:caption: Responses:
|
|
|
|
''')
|
|
|
|
for response in all_responses:
|
|
f.write(' platypush/responses/' + response + '.rst\n')
|
|
|
|
|
|
generate_plugins_doc()
|
|
generate_backends_doc()
|
|
generate_events_doc()
|
|
generate_responses_doc()
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|