コード例 #1
0
    def transform_content(self, contentnode: addnodes.desc_content) -> None:
        if 'options' in self.options:
            code_block_directive = CodeBlock(
                name='code-block',
                arguments=[],
                options={
                    'caption': 'Options',
                },
                content=[self.options['options']],
                lineno=self.lineno,
                content_offset=self.content_offset,
                block_text='',
                state=self.state,
                state_machine=self.state_machine)

            contentnode += code_block_directive.run()[0]

        if 'examples' in self.options:
            code_block_directive = CodeBlock(
                name='code-block',
                arguments=[],
                options={
                    'caption': 'Examples',
                },
                content=[self.options['examples'].replace('\n::\n', '\n\n')],
                lineno=self.lineno,
                content_offset=self.content_offset,
                block_text='',
                state=self.state,
                state_machine=self.state_machine)

            contentnode += code_block_directive.run()[0]

        if self.display_code_block:
            code_block_content = []
            for name_prefix in self.names:
                name, prefix = name_prefix
                line = name
                if 'suffix' in self.options:
                    if self.space_between_suffix:
                        line += ' '
                    line += self.options['suffix']
                if 'prefix' in self.options:
                    line = self.options['prefix'] + line
                if prefix and self.prefix_in_code_block:
                    line = prefix + line
                code_block_content.append(line)

            code_block_directive = CodeBlock(
                name='code-block',
                arguments=[],
                options={},
                content=code_block_content,
                lineno=self.lineno,
                content_offset=self.content_offset,
                block_text='',
                state=self.state,
                state_machine=self.state_machine)

            contentnode.insert(0, code_block_directive.run()[0])
コード例 #2
0
    def run(self):
        node_list = super(PygalWithCode, self).run()
        node_list.extend(
            CodeBlock(self.name, ['python'], self.options, self.content,
                      self.lineno, self.content_offset, self.block_text,
                      self.state, self.state_machine).run())

        return [docutils.nodes.compound('', *node_list)]
コード例 #3
0
    def run(self):
        node = addnodes.desc_content()
        self.state.nested_parse(self.content, self.content_offset, node)

        return [
            CodeBlock(self.name, ['rst'], {}, self.content, self.lineno,
                      self.content_offset, self.block_text, self.state,
                      self.state_machine).run()[0], node
        ]
コード例 #4
0
    def create_generic_code_block(self, lexer):
        properties = self.supported_lexers[lexer]
        content = (
            "We don't have a {} code example for this API call yet.\n\n" +
            "If you have some time to spare, feel free to open a pull request at:\n"
            + "https://github.com/centrahq/api-documentation").format(
                properties["language_text"])

        code_block = CodeBlock("generic-code-block", ["html"],
                               {"linenos": True}, [content], self.lineno,
                               self.content_offset, self.block_text,
                               self.state, self.state_machine)
        parsed_block = code_block.run()

        return parsed_block[0]
コード例 #5
0
    def run(self):
        ret = []

        # Provide a dummy argument to match the spec of GraphvizSimple.
        self.arguments = ['Mini_Cylc']

        # Generate Cylc code snippet if requested.
        if 'snippet' in self.options:
            ret.extend(
                CodeBlock(
                    self.name,
                    ['cylc-graph'],
                    {},  # Opts.
                    self.content,
                    self.lineno,
                    self.content_offset,
                    self.block_text,
                    self.state,
                    self.state_machine).run())

        # Clean up graphing.
        self.rationalise_graphing()
        clean_graphing = self.content

        # Generate dotcode for graphviz.
        # dotcode = ['bgcolor=none'] now set in conf.py:graphviz_dot_args
        dotcode = []
        if 'size' in self.options:
            dotcode.append('size="%s"' % self.options['size'])
        for left, right, conditional in self.get_triggers(self.content):
            if left:
                dotcode.append(
                    '%s -> %s%s' %
                    (left, right, ' [arrowhead=o]' if conditional else ''))
            else:
                dotcode.append(right)
        self.content = dotcode

        # Get MiniCylc node.
        node = MiniCylc.promote_graphviz(GraphvizSimple.run(self)[0])
        node['graph_lines'] = clean_graphing
        if 'theme' in self.options:
            node['theme'] = self.options['theme']
        ret.append(node)

        return ret
コード例 #6
0
    def run(self):
        config = self.state.document.settings.env.config

        # Read enabled builders; Defaults to None
        chosen_builders = choose_builders(self.arguments)

        # Enable 'http' language for http part
        self.arguments = ['http']

        # process 'query' reST fields
        if self.content:
            raw = ('\r\n'.join(self.content)).encode('utf-8')
            request = parsers.parse_request(raw)
            params, _ = request.extract_fields('query')
            params = [(p[1], p[2]) for p in params]
            new_path = utils.add_url_params(request.path, params)
            self.content[0] = ' '.join(
                [request.command, new_path, request.request_version])

        # split the request and optional response in the content.
        # The separator is two empty lines followed by a line starting with
        # 'HTTP/' or 'HTTP '
        request_content = StringList()
        request_content_no_fields = StringList()
        response_content = None
        emptylines_count = 0
        in_response = False
        is_field = r':({}) (.+): (.+)'.format('|'.join(AVAILABLE_FIELDS))
        for i, line in enumerate(self.content):
            source = self.content.source(i)
            if in_response:
                response_content.append(line, source)
            else:
                if emptylines_count >= 2 and \
                        (line.startswith('HTTP/') or line.startswith('HTTP ')):
                    in_response = True
                    response_content = StringList()
                    response_content.append(line, source)
                elif line == '':
                    emptylines_count += 1
                else:
                    request_content.extend(
                        StringList([''] * emptylines_count, source))
                    request_content.append(line, source)

                    if not re.match(is_field, line):
                        request_content_no_fields.extend(
                            StringList([''] * emptylines_count, source))
                        request_content_no_fields.append(line, source)

                    emptylines_count = 0

        # Load optional external request
        cwd = os.path.dirname(self.state.document.current_source)
        if 'request' in self.options:
            request = utils.resolve_path(self.options['request'], cwd)
            with open(request) as fp:
                request_content = request_content_no_fields = StringList(
                    list(map(str.rstrip, fp.readlines())), request)

        # Load optional external response
        if 'response' in self.options:
            response = utils.resolve_path(self.options['response'], cwd)
            with open(response) as fp:
                response_content = StringList(
                    list(map(str.rstrip, fp.readlines())), response)

        # reset the content to the request, stripped of the reST fields
        self.content = request_content_no_fields

        # Wrap and render main directive as 'http-example-http'
        klass = 'http-example-http'
        container = nodes.container('', classes=[klass])
        container.append(nodes.caption('', 'http'))
        container.extend(super(HTTPExample, self).run())

        # Init result node list
        result = [container]

        # reset the content to just the request
        self.content = request_content

        # Append builder responses
        if request_content_no_fields:
            raw = ('\r\n'.join(request_content_no_fields)).encode('utf-8')
            for name in chosen_builders:
                request = parsers.parse_request(raw, config.httpexample_scheme)
                builder_, language = AVAILABLE_BUILDERS[name]
                command = builder_(request)

                content = StringList([command],
                                     request_content_no_fields.source(0))
                options = self.options.copy()
                options.pop('name', None)
                options.pop('caption', None)

                block = CodeBlock('code-block', [language], options, content,
                                  self.lineno, self.content_offset,
                                  self.block_text, self.state,
                                  self.state_machine)

                # Wrap and render main directive as 'http-example-{name}'
                klass = 'http-example-{}'.format(name)
                container = nodes.container('', classes=[klass])
                container.append(nodes.caption('', name))
                container.extend(block.run())

                # Append to result nodes
                result.append(container)

        # Append optional response
        if response_content:
            options = self.options.copy()
            options.pop('name', None)
            options.pop('caption', None)

            block = CodeBlock('code-block', ['http'], options,
                              response_content, self.lineno,
                              self.content_offset, self.block_text, self.state,
                              self.state_machine)

            # Wrap and render main directive as 'http-example-response'
            klass = 'http-example-response'
            container = nodes.container('', classes=[klass])
            container.append(nodes.caption('', 'response'))
            container.extend(block.run())

            # Append to result nodes
            result.append(container)

        # Final wrap
        container_node = nodes.container('', classes=['http-example'])
        container_node.extend(result)

        return [container_node]