Beispiel #1
0
def main():
    parser = argparse.ArgumentParser(
        prog='sphinx-build-confluence',
        add_help=False,
        description='Sphinx extension to output Atlassian Confluence content.',
    )

    parser.add_argument('action', nargs='?')
    parser.add_argument('--color',
                        default='auto',
                        action='store_const',
                        const='yes')
    parser.add_argument('--help', '-h', action='store_true')
    parser.add_argument('--no-color',
                        '-N',
                        dest='color',
                        action='store_const',
                        const='no')
    parser.add_argument('--verbose', '-V', action='count', default=0)
    parser.add_argument('--version',
                        action='version',
                        version='%(prog)s ' + version)
    parser.add_argument('--work-dir')

    args, _ = parser.parse_known_args()
    if args.help:
        print(usage())
        sys.exit(0)

    if args.color == 'no' or (args.color == 'auto'
                              and 'MSYSTEM' not in os.environ
                              and not color_terminal()):
        nocolor()

    # pre-load logging support if sphinx is not loaded (to prevent blank lines)
    logger.initialize(preload=True)

    # invoke a desired command mainline
    if args.action == 'report':
        rv = report_main(parser)
    elif args.action == 'wipe':
        rv = wipe_main(parser)
    else:
        rv = build_main(parser)

    return rv
Beispiel #2
0
def main():
    parser = argparse.ArgumentParser(
        prog='sphinx-build-confluence',
        add_help=False,
        description='Sphinx extension to output Atlassian Confluence content.')

    parser.add_argument('action', nargs='?')
    parser.add_argument('--help', '-h', action='store_true')
    parser.add_argument('--no-color', '-N', dest='color')
    parser.add_argument('--verbose', '-V', action='count', default=0)
    parser.add_argument('--version',
                        action='version',
                        version='%(prog)s ' + version)
    parser.add_argument('--work-dir')

    args, _ = parser.parse_known_args()
    if args.help:
        print(usage())
        sys.exit(0)

    logger.initialize(preload=True)
    if args.color == 'no' or (args.color == 'auto' and not color_terminal()):
        nocolor()
    # disable color (on windows) by default when using virtualenv since it
    # appears to be causing issues
    elif getattr(sys, 'base_prefix', sys.prefix) != sys.prefix:
        if sys.platform == 'win32':
            nocolor()

    # invoke a desired command mainline
    if args.action == 'report':
        rv = report_main(parser)
    elif args.action == 'wipe':
        rv = wipe_main(parser)
    else:
        rv = build_main(parser)

    return rv
Beispiel #3
0
def setup(app):
    ConfluenceLogger.initialize()

    app.require_sphinx('1.8')
    app.add_builder(ConfluenceBuilder)
    app.add_builder(ConfluenceReportBuilder)
    app.add_builder(SingleConfluenceBuilder)

    # Images defined by data uri schemas can be resolved into generated images
    # after a document's post-transformation stage. After a document's doctree
    # has been resolved, re-check for any images that have been translated.
    def assetsDocTreeResolvedHook(app, doctree, docname):
        app.builder.assets.processDocument(doctree, docname, True)

    def builderInitedHook(app):
        if type(app.builder) == ConfluenceBuilder:
            app.connect('doctree-resolved', assetsDocTreeResolvedHook)

    app.connect('builder-inited', builderInitedHook)

    # remove math-node-migration post-transform as this extension manages both
    # future and legacy math implementations (removing this transform removes
    # a warning notification to the user)
    for transform in app.registry.get_post_transforms():
        if transform.__name__ == 'MathNodeMigrator':
            app.registry.get_post_transforms().remove(transform)
            break

    # ##########################################################################
    """(configuration - essential)"""
    """Enablement of publishing."""
    app.add_config_value('confluence_publish', None, False)
    """API key/password to login to Confluence API with."""
    app.add_config_value('confluence_server_pass', None, False)
    """URL of the Confluence instance to publish to."""
    app.add_config_value('confluence_server_url', None, False)
    """Username to login to Confluence API with."""
    app.add_config_value('confluence_server_user', None, False)
    """Confluence Space to publish to."""
    app.add_config_value('confluence_space_name', None, False)
    """(configuration - generic)"""
    """Add page and section numbers if doctree has :numbered: option"""
    app.add_config_value('confluence_add_secnumbers', None, False)
    """Default alignment for tables, figures, etc."""
    app.add_config_value('confluence_default_alignment', None, 'env')
    """File to get page header information from."""
    app.add_config_value('confluence_header_file', None, False)
    """File to get page footer information from."""
    app.add_config_value('confluence_footer_file', None, False)
    """Enablement of the maximum document depth (before inlining)."""
    app.add_config_value('confluence_max_doc_depth', None, False)
    """Enablement of publishing pages into a hierarchy from a master toctree."""
    app.add_config_value('confluence_page_hierarchy', None, False)
    """Show previous/next buttons (bottom, top, both, None)."""
    app.add_config_value('confluence_prev_next_buttons_location', None, False)
    """Suffix to put after section numbers, before section name"""
    app.add_config_value('confluence_secnumber_suffix', None, False)
    """(configuration - publishing)"""
    """Request for publish password to come from interactive session."""
    app.add_config_value('confluence_ask_password', None, False)
    """Request for publish username to come from interactive session."""
    app.add_config_value('confluence_ask_user', None, False)
    """Explicitly prevent auto-generation of titles for titleless documents."""
    app.add_config_value('confluence_disable_autogen_title', None, False)
    """Explicitly prevent page notifications on update."""
    app.add_config_value('confluence_disable_notifications', None, False)
    """Define a series of labels to apply to all published pages."""
    app.add_config_value('confluence_global_labels', None, False)
    """Enablement of configuring master as space's homepage."""
    app.add_config_value('confluence_master_homepage', None, False)
    """Root/parent page's name to publish documents into."""
    app.add_config_value('confluence_parent_page', None, False)
    """Perform a dry run of publishing to inspect what publishing will do."""
    app.add_config_value('confluence_publish_dryrun', None, '')
    """Publish only new content (no page updates, etc.)."""
    app.add_config_value('confluence_publish_onlynew', None, '')
    """Postfix to apply to title of published pages."""
    app.add_config_value('confluence_publish_postfix', None, False)
    """Prefix to apply to published pages."""
    app.add_config_value('confluence_publish_prefix', None, False)
    """Enablement of purging legacy child pages from a parent page."""
    app.add_config_value('confluence_purge', None, False)
    """Enablement of purging legacy child pages from a master page."""
    app.add_config_value('confluence_purge_from_master', None, False)
    """docname-2-title dictionary for title overrides."""
    app.add_config_value('confluence_title_overrides', None, 'env')
    """Timeout for network-related calls (publishing)."""
    app.add_config_value('confluence_timeout', None, False)
    """Whether or not new content should be watched."""
    app.add_config_value('confluence_watch', None, False)
    """(configuration - advanced publishing)"""
    """Register additional mime types to be selected for image candidates."""
    app.add_config_value('confluence_additional_mime_types', None, False)
    """Whether or not labels will be appended instead of overwriting them."""
    app.add_config_value('confluence_append_labels', None, False)
    """Forcing all assets to be standalone."""
    app.add_config_value('confluence_asset_force_standalone', None, False)
    """Tri-state asset handling (auto, force push or disable)."""
    app.add_config_value('confluence_asset_override', None, False)
    """File/path to Certificate Authority"""
    app.add_config_value('confluence_ca_cert', None, False)
    """Path to client certificate to use for publishing"""
    app.add_config_value('confluence_client_cert', None, False)
    """Password for client certificate to use for publishing"""
    app.add_config_value('confluence_client_cert_pass', None, False)
    """Disable SSL validation with Confluence server."""
    app.add_config_value('confluence_disable_ssl_validation', None, False)
    """Ignore adding a titlefix on the index document."""
    app.add_config_value('confluence_ignore_titlefix_on_index', None, False)
    """Root/parent page's identifier to publish documents into."""
    app.add_config_value('confluence_parent_page_id_check', None, False)
    """Proxy server needed to communicate with Confluence server."""
    app.add_config_value('confluence_proxy', None, False)
    """Subset of documents which are allowed to be published."""
    app.add_config_value('confluence_publish_allowlist', None, False)
    """Subset of documents which are denied to be published."""
    app.add_config_value('confluence_publish_denylist', None, False)
    """Authentication passthrough for Confluence REST interaction."""
    app.add_config_value('confluence_server_auth', None, False)
    """Cookie(s) to use for Confluence REST interaction."""
    app.add_config_value('confluence_server_cookies', None, False)
    """(configuration - advanced processing)"""
    """Filename suffix for generated files."""
    app.add_config_value('confluence_file_suffix', None, False)
    """Translation of docname to a filename."""
    app.add_config_value('confluence_file_transform', None, False)
    """Configuration for named JIRA Servers"""
    app.add_config_value('confluence_jira_servers', None, True)
    """Translation of a raw language to code block macro language."""
    app.add_config_value('confluence_lang_transform', None, False)
    """Link suffix for generated files."""
    app.add_config_value('confluence_link_suffix', None, False)
    """Translation of docname to a (partial) URI."""
    app.add_config_value('confluence_link_transform', None, False)
    """Remove a detected title from generated documents."""
    app.add_config_value('confluence_remove_title', None, False)
    """(configuration - undocumented)"""
    """Enablement for aggressive descendents search (for purge)."""
    app.add_config_value('confluence_adv_aggressive_search', None, False)
    """Enablement of the children macro for hierarchy mode."""
    app.add_config_value('confluence_adv_hierarchy_child_macro', None, False)
    """List of node types to ignore if no translator support exists."""
    app.add_config_value('confluence_adv_ignore_nodes', None, False)
    """Unknown node handler dictionary for advanced integrations."""
    app.add_config_value('confluence_adv_node_handler', None, '')
    """List of optional features/macros/etc. restricted for use."""
    app.add_config_value('confluence_adv_restricted', None, False)
    """Enablement of tracing processed data."""
    app.add_config_value('confluence_adv_trace_data', None, False)
    """Do not cap sections to a maximum of six (6) levels."""
    app.add_config_value('confluence_adv_writer_no_section_cap', None, False)
    """(configuration - deprecated)"""
    # replaced by confluence_publish_allowlist
    app.add_config_value('confluence_publish_subset', None, False)

    # ##########################################################################
    """JIRA directives"""
    """Adds the custom nodes needed for JIRA directives"""
    if not docutils.is_node_registered(jira):
        app.add_node(jira)
    if not docutils.is_node_registered(jira_issue):
        app.add_node(jira_issue)
    """Wires up the directives themselves"""
    app.add_directive('jira', JiraDirective)
    app.add_directive('jira_issue', JiraIssueDirective)
    """Confluence directives"""
    """Adds the custom nodes needed for Confluence directives"""
    if not docutils.is_node_registered(confluence_metadata):
        app.add_node(confluence_metadata)
    """Wires up the directives themselves"""
    app.add_directive('confluence_expand', ConfluenceExpandDirective)
    app.add_directive('confluence_metadata', ConfluenceMetadataDirective)

    # hook onto configuration initialization to finalize its state before
    # passing it to the builder (e.g. handling deprecated options)
    app.connect('config-inited', handle_config_inited)

    # inject the compatible autosummary nodes if the extension is loaded
    def inject_autosummary_notes_hook(app):
        for ext in app.extensions.values():
            if ext.name == 'sphinx.ext.autosummary':
                add_autosummary_nodes(app)
                break

    app.connect('builder-inited', inject_autosummary_notes_hook)

    # lazy bind sphinx.ext.imgmath to provide configuration options
    #
    # If 'sphinx.ext.imgmath' is not already explicitly loaded, bind it into the
    # setup process to a configurer can use the same configuration options
    # outlined in the sphinx.ext.imgmath in this extension. This applies for
    # Sphinx 1.8 and higher which math support is embedded; for older versions,
    # users will need to explicitly load 'sphinx.ext.mathbase'.
    if (imgmath is not None
            and 'sphinx.ext.imgmath' not in app.config.extensions):
        imgmath.setup(app)

    return {
        'version': __version__,
        'parallel_read_safe': True,
        'parallel_write_safe': True,
    }
Beispiel #4
0
def setup(app):
    ConfluenceLogger.initialize()

    app.require_sphinx('1.8')
    app.add_builder(ConfluenceBuilder)
    app.add_builder(ConfluenceReportBuilder)
    app.add_builder(SingleConfluenceBuilder)

    # register this extension's locale
    package_dir = path.abspath(path.dirname(__file__))
    locale_dir = path.join(package_dir, 'locale')
    app.add_message_catalog(MESSAGE_CATALOG_NAME, locale_dir)

    # ##########################################################################

    # (configuration - essential)
    # Enablement of publishing.
    app.add_config_value('confluence_publish', None, '')
    # PAT to authenticate to Confluence API with.
    app.add_config_value('confluence_publish_token', None, '')
    # API key/password to login to Confluence API with.
    app.add_config_value('confluence_server_pass', None, '')
    # URL of the Confluence instance to publish to.
    app.add_config_value('confluence_server_url', None, '')
    # Username to login to Confluence API with.
    app.add_config_value('confluence_server_user', None, '')
    # Confluence Space to publish to.
    app.add_config_value('confluence_space_key', None, '')

    # (configuration - generic)
    # Add page and section numbers if doctree has :numbered: option
    app.add_config_value('confluence_add_secnumbers', None, 'env')
    # Default alignment for tables, figures, etc.
    app.add_config_value('confluence_default_alignment', None, 'env')
    # Enablement of a generated domain index documents
    app.add_config_value('confluence_domain_indices', None, '')
    # File to get page header information from.
    app.add_config_value('confluence_header_file', None, 'env')
    # File to get page footer information from.
    app.add_config_value('confluence_footer_file', None, 'env')
    # Enablement of a generated search documents
    app.add_config_value('confluence_include_search', None, '')
    # Enablement of the maximum document depth (before inlining).
    app.add_config_value('confluence_max_doc_depth', None, 'env')
    # Enablement of a "page generated" notice.
    app.add_config_value('confluence_page_generation_notice', None, 'env')
    # Enablement of publishing pages into a hierarchy from a root toctree.
    app.add_config_value('confluence_page_hierarchy', None, False)
    # Show previous/next buttons (bottom, top, both, None).
    app.add_config_value('confluence_prev_next_buttons_location', None, 'env')
    # Suffix to put after section numbers, before section name
    app.add_config_value('confluence_secnumber_suffix', None, 'env')
    # Enablement of a "Edit/Show Source" reference on each document
    app.add_config_value('confluence_sourcelink', None, 'env')
    # Enablement of a generated index document
    app.add_config_value('confluence_use_index', None, '')
    # Enablement for toctrees for singleconfluence documents.
    app.add_config_value('singleconfluence_toctree', None, 'singleconfluence')

    # (configuration - publishing)
    # Request for publish password to come from interactive session.
    app.add_config_value('confluence_ask_password', None, '')
    # Request for publish username to come from interactive session.
    app.add_config_value('confluence_ask_user', None, '')
    # Explicitly prevent auto-generation of titles for titleless documents.
    app.add_config_value('confluence_disable_autogen_title', None, '')
    # Explicitly prevent page notifications on update.
    app.add_config_value('confluence_disable_notifications', None, '')
    # Define a series of labels to apply to all published pages.
    app.add_config_value('confluence_global_labels', None, '')
    # Enablement of configuring root as space's homepage.
    app.add_config_value('confluence_root_homepage', None, '')
    # Parent page's name or identifier to publish documents under.
    app.add_config_value('confluence_parent_page', None, '')
    # Perform a dry run of publishing to inspect what publishing will do.
    app.add_config_value('confluence_publish_dryrun', None, '')
    # Publish only new content (no page updates, etc.).
    app.add_config_value('confluence_publish_onlynew', None, '')
    # Postfix to apply to title of published pages.
    app.add_config_value('confluence_publish_postfix', None, 'env')
    # Prefix to apply to published pages.
    app.add_config_value('confluence_publish_prefix', None, 'env')
    # Root page's identifier to publish documents into.
    app.add_config_value('confluence_publish_root', None, '')
    # Enablement of purging legacy child pages from a parent page.
    app.add_config_value('confluence_purge', None, '')
    # Enablement of purging legacy child pages from a root page.
    app.add_config_value('confluence_purge_from_root', None, '')
    # docname-2-title dictionary for title overrides.
    app.add_config_value('confluence_title_overrides', None, 'env')
    # Timeout for network-related calls (publishing).
    app.add_config_value('confluence_timeout', None, '')
    # Whether or not new content should be watched.
    app.add_config_value('confluence_watch', None, '')

    # (configuration - advanced publishing)
    # Register additional mime types to be selected for image candidates.
    app.add_config_value('confluence_additional_mime_types', None, 'env')
    # Whether or not labels will be appended instead of overwriting them.
    app.add_config_value('confluence_append_labels', None, '')
    # Forcing all assets to be standalone.
    app.add_config_value('confluence_asset_force_standalone', None, 'env')
    # Tri-state asset handling (auto, force push or disable).
    app.add_config_value('confluence_asset_override', None, '')
    # File/path to Certificate Authority
    app.add_config_value('confluence_ca_cert', None, '')
    # Path to client certificate to use for publishing
    app.add_config_value('confluence_client_cert', None, '')
    # Password for client certificate to use for publishing
    app.add_config_value('confluence_client_cert_pass', None, '')
    # Disable SSL validation with Confluence server.
    app.add_config_value('confluence_disable_ssl_validation', None, '')
    # Ignore adding a titlefix on the index document.
    app.add_config_value('confluence_ignore_titlefix_on_index', None, 'env')
    # Parent page's identifier to publish documents under.
    app.add_config_value('confluence_parent_page_id_check', None, '')
    # Proxy server needed to communicate with Confluence server.
    app.add_config_value('confluence_proxy', None, '')
    # Subset of documents which are allowed to be published.
    app.add_config_value('confluence_publish_allowlist', None, '')
    # Enable debugging for publish requests.
    app.add_config_value('confluence_publish_debug', None, '')
    # Duration (in seconds) to delay each API request.
    app.add_config_value('confluence_publish_delay', None, '')
    # Subset of documents which are denied to be published.
    app.add_config_value('confluence_publish_denylist', None, '')
    # Disable adding `rest/api` to REST requests.
    app.add_config_value('confluence_publish_disable_api_prefix', None, '')
    # Header(s) to use for Confluence REST interaction.
    app.add_config_value('confluence_publish_headers', None, '')
    # Manipulate a requests instance.
    app.add_config_value('confluence_request_session_override', None, '')
    # Authentication passthrough for Confluence REST interaction.
    app.add_config_value('confluence_server_auth', None, '')
    # Cookie(s) to use for Confluence REST interaction.
    app.add_config_value('confluence_server_cookies', None, '')
    # Comment added to confluence version history.
    app.add_config_value('confluence_version_comment', None, '')

    # (configuration - advanced processing)
    # Filename suffix for generated files.
    app.add_config_value('confluence_file_suffix', None, 'env')
    # Translation of docname to a filename.
    app.add_config_value('confluence_file_transform', None, 'env')
    # Configuration for named JIRA Servers
    app.add_config_value('confluence_jira_servers', None, 'env')
    # Translation of a raw language to code block macro language.
    app.add_config_value('confluence_lang_transform', None, 'env')
    # Macro configuration for Confluence-managed LaTeX content.
    app.add_config_value('confluence_latex_macro', None, 'env')
    # Link suffix for generated files.
    app.add_config_value('confluence_link_suffix', None, 'env')
    # Translation of docname to a (partial) URI.
    app.add_config_value('confluence_link_transform', None, 'env')
    # Mappings for documentation mentions to Confluence keys.
    app.add_config_value('confluence_mentions', None, 'env')
    # Inject navigational hints into the documentation.
    app.add_config_value('confluence_navdocs_transform', None, '')
    # Remove a detected title from generated documents.
    app.add_config_value('confluence_remove_title', None, 'env')

    # (configuration - undocumented)
    # Enablement for aggressive descendents search (for purge).
    app.add_config_value('confluence_adv_aggressive_search', None, '')
    # List of node types to ignore if no translator support exists.
    app.add_config_value('confluence_adv_ignore_nodes', None, '')
    # Unknown node handler dictionary for advanced integrations.
    app.add_config_value('confluence_adv_node_handler', None, '')
    # Enablement of permitting raw html blocks to be used in storage format.
    app.add_config_value('confluence_adv_permit_raw_html', None, 'env')
    # List of optional features/macros/etc. restricted for use.
    app.add_config_value('confluence_adv_restricted', None, 'env')
    # Enablement of tracing processed data.
    app.add_config_value('confluence_adv_trace_data', None, '')
    # Do not cap sections to a maximum of six (6) levels.
    app.add_config_value('confluence_adv_writer_no_section_cap', None, 'env')

    # (configuration - deprecated)
    # replaced by confluence_root_homepage
    app.add_config_value('confluence_master_homepage', None, '')
    # replaced by confluence_publish_allowlist
    app.add_config_value('confluence_publish_subset', None, '')
    # replaced by confluence_purge_from_root
    app.add_config_value('confluence_purge_from_master', None, '')
    # replaced by confluence_space_key
    app.add_config_value('confluence_space_name', None, '')

    # ##########################################################################

    # hook onto configuration initialization to finalize its state before
    # passing it to the builder (e.g. handling deprecated options)
    app.connect('config-inited', handle_config_inited)

    # hook on a builder initialization event, to perform additional
    # configuration required when a user is using a confluence builder
    app.connect('builder-inited', confluence_builder_inited)

    return {
        'version': __version__,
        'parallel_read_safe': True,
        'parallel_write_safe': True,
    }