2022-05-23 00:16:32 +04:00

135 lines
3.8 KiB
Python

import toml
from typing import Dict
import click
from streamlit.config_option import ConfigOption
def server_option_changed(
old_options: Dict[str, ConfigOption], new_options: Dict[str, ConfigOption]
) -> bool:
"""Return True if and only if an option in the server section differs
between old_options and new_options."""
for opt_name in old_options.keys():
if not opt_name.startswith("server"):
continue
old_val = old_options[opt_name].value
new_val = new_options[opt_name].value
if old_val != new_val:
return True
return False
def show_config(
section_descriptions: Dict[str, str],
config_options: Dict[str, ConfigOption],
) -> None:
"""Print the given config sections/options to the terminal."""
SKIP_SECTIONS = {"_test", "ui"}
out = []
out.append(
_clean(
"""
# Below are all the sections and options you can have in
~/.streamlit/config.toml.
"""
)
)
def append_desc(text):
out.append(click.style(text, bold=True))
def append_comment(text):
out.append(click.style(text))
def append_section(text):
out.append(click.style(text, bold=True, fg="green"))
def append_setting(text):
out.append(click.style(text, fg="green"))
def append_newline():
out.append("")
for section, section_description in section_descriptions.items():
if section in SKIP_SECTIONS:
continue
append_newline()
append_section("[%s]" % section)
append_newline()
for key, option in config_options.items():
if option.section != section:
continue
if option.visibility == "hidden":
continue
if option.is_expired():
continue
key = option.key.split(".")[1]
description_paragraphs = _clean_paragraphs(option.description)
for i, txt in enumerate(description_paragraphs):
if i == 0:
append_desc("# %s" % txt)
else:
append_comment("# %s" % txt)
toml_default = toml.dumps({"default": option.default_val})
toml_default = toml_default[10:].strip()
if len(toml_default) > 0:
append_comment("# Default: %s" % toml_default)
else:
# Don't say "Default: (unset)" here because this branch applies
# to complex config settings too.
pass
if option.deprecated:
append_comment("#")
append_comment("# " + click.style("DEPRECATED.", fg="yellow"))
append_comment(
"# %s" % "\n".join(_clean_paragraphs(option.deprecation_text))
)
append_comment(
"# This option will be removed on or after %s."
% option.expiration_date
)
append_comment("#")
option_is_manually_set = (
option.where_defined != ConfigOption.DEFAULT_DEFINITION
)
if option_is_manually_set:
append_comment("# The value below was set in %s" % option.where_defined)
toml_setting = toml.dumps({key: option.value})
if len(toml_setting) == 0:
toml_setting = f"# {key} =\n"
elif not option_is_manually_set:
toml_setting = f"# {toml_setting}"
append_setting(toml_setting)
click.echo("\n".join(out))
def _clean(txt):
"""Replace all whitespace with a single space."""
return " ".join(txt.split()).strip()
def _clean_paragraphs(txt):
paragraphs = txt.split("\n\n")
cleaned_paragraphs = [_clean(x) for x in paragraphs]
return cleaned_paragraphs