def _make_pretty_examples(jspark, infos): """ Makes the examples description pretty and returns a formatted string if `infos` has any `examples` starting with the example prefix. Otherwise, returns None. Expected input: Examples: > SELECT func(col)...; ... > SELECT func(col)...; ... Expected output: <div class="codehilite"><pre><span></span> <span class="c1">-- func</span> <span class="k">SELECT</span> ... </pre></div> ``` """ pretty_output = "" for info in infos: if info.examples.startswith("\n Examples:"): output = [] output.append("-- %s" % info.name) query_examples = filter(lambda x: x.startswith(" > "), info.examples.split("\n")) for query_example in query_examples: query = query_example.lstrip(" > ") print(" %s" % query) query_output = jspark.sql(query).showString(20, 20, False) output.append(query) output.append(query_output) pretty_output += "\n" + "\n".join(output) if pretty_output != "": return markdown.markdown("```sql%s```" % pretty_output, extensions=['codehilite', 'fenced_code'])
def generate_sql_configs_table(sql_configs, path): """ Generates an HTML table at `path` that lists all public SQL configuration options. The table will look something like this: ```html <table class="table"> <tr><th>Property Name</th><th>Default</th><th>Meaning</th><th>Since Version</th></tr> <tr> <td><code>spark.sql.adaptive.enabled</code></td> <td>false</td> <td><p>When true, enable adaptive query execution.</p></td> <td>2.1.0</td> </tr> ... </table> ``` """ value_reference_pattern = re.compile(r"^<value of (\S*)>$") with open(path, 'w') as f: f.write( dedent(""" <table class="table"> <tr><th>Property Name</th><th>Default</th><th>Meaning</th><th>Since Version</th></tr> """)) for config in sorted(sql_configs, key=lambda x: x.name): if config.default == "<undefined>": default = "(none)" elif config.default.startswith("<value of "): referenced_config_name = value_reference_pattern.match( config.default).group(1) default = "(value of <code>{}</code>)".format( referenced_config_name) else: default = config.default if default.startswith("<"): raise Exception( "Unhandled reference in SQL config docs. Config '{name}' " "has default '{default}' that looks like an HTML tag.". format( name=config.name, default=config.default, )) f.write( dedent(""" <tr> <td><code>{name}</code></td> <td>{default}</td> <td>{description}</td> <td>{version}</td> </tr> """.format(name=config.name, default=default, description=markdown.markdown(config.description), version=config.version))) f.write("</table>\n")