def setup(app): """Called by Sphinx during phase 0 (initialization). :param sphinx.application.Sphinx app: Sphinx application object. :returns: Extension version. :rtype: dict """ # Used internally. For rebuilding all pages when one or versions fail. app.add_config_value('sphinxcontrib_versioning_versions', SC_VERSIONING_VERSIONS, 'html') # Needed for banner. app.config.html_static_path.append(STATIC_DIR) app.add_stylesheet('banner.css') # Tell Sphinx which config values can be set by the user. for name, default in Config(): app.add_config_value('scv_{}'.format(name), default, 'html') # Event handlers. app.connect('builder-inited', EventHandlers.builder_inited) app.connect('env-updated', EventHandlers.env_updated) app.connect('html-page-context', EventHandlers.html_page_context) return dict(version=__version__)
def config(monkeypatch): """Mock config from Click context. :param monkeypatch: pytest fixture. :return: Config instance. :rtype: sphinxcontrib.versioning.lib.Config """ instance = Config() ctx = type('', (), {'find_object': staticmethod(lambda _: instance)}) monkeypatch.setattr('click.get_current_context', lambda: ctx) return instance
def test_config(): """Test Config.""" config = Config() config.update( dict(invert=True, overflow=('-D', 'key=value'), root_ref='master', verbose=1)) # Verify values. assert config.banner_main_ref == 'master' assert config.greatest_tag is False assert config.invert is True assert config.overflow == ('-D', 'key=value') assert config.root_ref == 'master' assert config.verbose == 1 assert repr(config) == ( "<sphinxcontrib.versioning.lib.Config " "_program_state={}, verbose=1, root_ref='master', overflow=('-D', 'key=value')>" ) # Verify iter. actual = sorted(config) expected = [ ('banner_greatest_tag', False), ('banner_main_ref', 'master'), ('banner_recent_tag', False), ('chdir', None), ('git_root', None), ('greatest_tag', False), ('grm_exclude', tuple()), ('invert', True), ('local_conf', None), ('no_colors', False), ('no_local_conf', False), ('overflow', ('-D', 'key=value')), ('priority', None), ('push_remote', 'origin'), ('recent_tag', False), ('root_ref', 'master'), ('show_banner', False), ('sort', tuple()), ('verbose', 1), ('whitelist_branches', tuple()), ('whitelist_tags', tuple()), ] assert actual == expected # Verify contains, setitem, and pop. assert getattr(config, '_program_state') == dict() assert 'key' not in config config['key'] = 'value' assert getattr(config, '_program_state') == dict(key='value') assert 'key' in config assert config.pop('key') == 'value' assert getattr(config, '_program_state') == dict() assert 'key' not in config assert config.pop('key', 'nope') == 'nope' assert getattr(config, '_program_state') == dict() assert 'key' not in config # Test exceptions. with pytest.raises(AttributeError) as exc: config.update(dict(unknown=True)) assert exc.value.args[0] == "'Config' object has no attribute 'unknown'" with pytest.raises(AttributeError) as exc: config.update(dict(_program_state=dict(key=True))) assert exc.value.args[ 0] == "'Config' object does not support item assignment on '_program_state'" with pytest.raises(AttributeError) as exc: config.update(dict(invert=False)) assert exc.value.args[ 0] == "'Config' object does not support item re-assignment on 'invert'"