diff --git a/docs/manuals/en/new_main_reference/source/DocumentationStyleGuide/BareosSpecificFormatting/BareosConfiguration.rst b/docs/manuals/en/new_main_reference/source/DocumentationStyleGuide/BareosSpecificFormatting/BareosConfiguration.rst index b81e06c1ca0..2e1cafbd694 100644 --- a/docs/manuals/en/new_main_reference/source/DocumentationStyleGuide/BareosSpecificFormatting/BareosConfiguration.rst +++ b/docs/manuals/en/new_main_reference/source/DocumentationStyleGuide/BareosSpecificFormatting/BareosConfiguration.rst @@ -68,11 +68,6 @@ This will get displayed as :config:option:`dir/job` -TODO -~~~~ - - * needs implmentation - Resource Name ------------- @@ -86,10 +81,6 @@ This will get displayed as :config:option:`dir/job = backup-client1` -TODO -~~~~ - - * needs implmentation Resource Directive ------------------ @@ -168,7 +159,3 @@ This will get displayed as :config:option:`dir/job/AlwaysIncrementalJobRetention = 900` -TODO -^^^^ - - * needs implmentation diff --git a/docs/manuals/en/new_main_reference/source/_extensions/bareos-ext.py b/docs/manuals/en/new_main_reference/source/_extensions/bareos-ext.py index b3d6c4b5b07..a6f44ae86a7 100644 --- a/docs/manuals/en/new_main_reference/source/_extensions/bareos-ext.py +++ b/docs/manuals/en/new_main_reference/source/_extensions/bareos-ext.py @@ -55,16 +55,36 @@ def get_config_directive(text): ''' This function generates from the signature the different required formats of a configuration directive. - The signature (text) must be given as + The signature (text) must be given (depending on the type) as: - // + // = - For example: + Examples for the different types: + + Daemon: + dir + + Resource Type: + dir/job + + Resource Name: + dir/job = backup-client1 + + (Reference to a) Resource Directive: dir/job/TlsAlwaysIncrementalMaxFullAcl + + Resource Directive With Value: + dir/job/TlsAlwaysIncrementalMaxFullAcl = False ''' + logger = logging.getLogger(__name__) - displaynametemplate = u'{Directive} ({Dmn}->{Resource})' - indextemplate = u'Configuration Directive; ' + displaynametemplate + displayTemplateDaemon = u'{Daemon}' + displayTemplateResourceType = u'{Resource} ({Dmn})' + displayTemplateResourceName = u'{Resource} ({Dmn}) = {value}' + displayTemplateResourceDirective = u'{Directive} ({Dmn}->{Resource})' + displayTemplateResourceDirectiveWithValue = u'{Directive} ({Dmn}->{Resource}) = {value}' + indextemplate = u'Configuration Directive; ' + displayTemplateResourceDirective + internaltargettemplate = u'{dmn}/{resource}/{CamelCaseDirective}' # Latex: directiveDirJobCancel%20Lower%20Level%20Duplicates # The follow targettemplate will create identical anchors as Latex, @@ -72,20 +92,22 @@ def get_config_directive(text): # targettemplate = u'directive{dmn}{resource}{directive}' targettemplate = u'config-{Dmn}_{Resource}_{CamelCaseDirective}' - input_daemon = None - input_resource = None + result = { + 'signature': text, + } + try: - input_daemon, input_resource, input_directive = text.split('/', 2) + key, value = text.split('=', 1) + result['value'] = value.strip() except ValueError: # fall back - input_directive = text + key = text - result = { - 'signature': text, - } + inputComponent = key.strip().split('/', 2) + components = len(inputComponent) - if input_daemon: - daemon = input_daemon.lower() + if components >= 1: + daemon = inputComponent[0].lower() if daemon == 'director' or daemon == 'dir': result['Daemon'] = 'Director' result['dmn'] = 'dir' @@ -103,33 +125,35 @@ def get_config_directive(text): result['dmn'] = 'console' result['Dmn'] = 'Console' else: + # TODO: raise result['Daemon'] = 'UNKNOWN' result['dmn'] = 'UNKNOWN' result['Dmn'] = 'UNKNOWN' + result['displayname'] = displayTemplateDaemon.format(**result) - else: - result['Daemon'] = None - result['Dmn'] = None - result['dmn'] = None - - if input_resource: - result['resource'] = input_resource.replace(' ', '').lower() - result['Resource'] = input_resource.replace(' ', '').capitalize() - else: - result['resource'] = None - result['Resource'] = None - - - # input_directive should be without spaces. - # However, we make sure, by removing all spaces. - result['CamelCaseDirective'] = input_directive.replace(' ', '') - result['Directive'] = convertCamelCase2Spaces(result['CamelCaseDirective']) + if components >= 2: + result['resource'] = inputComponent[1].replace(' ', '').lower() + result['Resource'] = inputComponent[1].replace(' ', '').capitalize() + if 'value' in result: + result['displayname'] = displayTemplateResourceName.format(**result) + else: + result['displayname'] = displayTemplateResourceType.format(**result) + + if components >= 3: + # input_directive should be without spaces. + # However, we make sure, by removing all spaces. + result['CamelCaseDirective'] = inputComponent[2].replace(' ', '') + result['Directive'] = convertCamelCase2Spaces(result['CamelCaseDirective']) + if 'value' in result: + result['displayname'] = displayTemplateResourceDirectiveWithValue.format(**result) + else: + result['displayname'] = displayTemplateResourceDirective.format(**result) - result['displayname'] = displaynametemplate.format(**result) - result['indexentry'] = indextemplate.format(**result) - result['target'] = targettemplate.format(**result) + result['indexentry'] = indextemplate.format(**result) + result['target'] = targettemplate.format(**result) + result['internaltarget'] = internaltargettemplate.format(**result) - logger.debug('[bareos] ' + pformat(result)) + #logger.debug('[bareos] ' + pformat(result)) return result @@ -200,10 +224,11 @@ def add_target_and_index(self, name, sig, signode): signode['ids'].append(targetname) self.state.document.note_explicit_target(signode) - indextype = 'single' - # Generic index entries - self.indexnode['entries'].append((indextype, directive['indexentry'], - targetname, targetname, None)) + if 'indexentry' in directive: + indextype = 'single' + # Generic index entries + self.indexnode['entries'].append((indextype, directive['indexentry'], + targetname, targetname, None)) self.env.domaindata['config']['objects'][self.objtype, sig] = \ self.env.docname, targetname @@ -216,15 +241,18 @@ class ConfigOptionXRefRole(XRefRole): def result_nodes(self, document, env, node, is_ref): logger = logging.getLogger(__name__) - logger.debug('[bareos] is_ref: {}, node[reftarget]: {}, {}'.format(str(is_ref), node['reftarget'], type(node['reftarget']))) + #logger.debug('[bareos] is_ref: {}, node[reftarget]: {}, {}'.format(str(is_ref), node['reftarget'], type(node['reftarget']))) + #logger.debug('[bareos] ' + pformat(result)) if not is_ref: return [node], [] varname = node['reftarget'] - directive = get_config_directive(varname) + if not 'indexentry' in directive: + return [node], [] + tgtid = 'index-%s' % env.new_serialno('index') indexnode = addnodes.index() @@ -239,12 +267,20 @@ def result_nodes(self, document, env, node, is_ref): def process_link(self, env, refnode, has_explicit_title, title, target): + + logger = logging.getLogger(__name__) + if has_explicit_title: return title, target directive = get_config_directive(title) - return directive['displayname'], target + #logger.debug('process_link({}, {})'.format(title, target)) + #logger.debug('process_link: ' + pformat(directive)) + if 'internaltarget' in directive: + return directive['displayname'], directive['internaltarget'] + else: + return directive['displayname'], target