Source code for chartify._core.options

# -*- coding: utf-8 -*-
#
# Copyright (c) 2017-2018 Spotify AB
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from collections import OrderedDict
import os
from pathlib import Path
import yaml


[docs]class ChartifyOptions: def __init__(self): try: options_path = os.environ["CHARTIFY_CONFIG_DIR"] except KeyError: home_path = str(Path.home()) options_path = home_path + "/.chartify/" self._options = OrderedDict( { "style.color_palette_categorical": OptionValue("Category20"), "style.color_palette_sequential": OptionValue("Blues"), "style.color_palette_diverging": OptionValue("RdBu"), "style.color_palette_accent": OptionValue("Category20"), "style.color_palette_accent_default_color": OptionValue("grey"), "chart.blank_labels": OptionValue(False), "config.logos_path": OptionValue(options_path + "logos/"), "config.options": OptionValue(options_path + "options_config.yaml"), "config.style_settings": OptionValue(options_path + "style_settings_config.yaml"), "config.colors": OptionValue(options_path + "colors_config.yaml"), "config.color_palettes": OptionValue(options_path + "color_palettes_config.yaml"), } ) config_filename = self.get_option("config.options") try: self._from_yaml(config_filename) except FileNotFoundError: pass
[docs] def get_option(self, option_name): """Return the value of the given option""" return self._options[option_name].value
[docs] def set_option(self, option_name, option_value): """Set the default value of the specified option. Available options: 'style.color_palette_categorical': (str) Color palette for categorical palette types. 'style.color_palette_sequential': (str) Color palette for sequential palette types. 'style.color_palette_diverging': (str) Color palette for diverging palette types. 'style.color_palette_accent': (str) Color palette for assigning color to specific values. 'style.color_palette_accent_default_color': (str) Default color of values in the 'color_column' that are not accented. Default: 'light grey' 'chart.blank_labels': boolean If False, chartify.Chart objects populate the default chart labels with helper text. Default: False """ self._options[option_name].value = option_value
@staticmethod def _get_value(option_value): if isinstance(option_value, OptionValue): return option_value.value else: return option_value def _to_yaml(self, filename): """Write the options to a yaml file""" with open(filename, "w") as outfile: yaml.dump(self._options, outfile, default_flow_style=False) def _from_yaml(self, filename): """Load options from a yaml file. Overwrites any options that are specified in the yaml file. """ # Note: We assume that the contents of the config file are trusted # TODO: Change this file format to be plain yaml and use SafeLoader yaml_options = yaml.load(open(filename), Loader=yaml.UnsafeLoader) self._options.update(yaml_options)
class OptionValue: def __init__(self, value): self.value = value def __repr__(self): return "%s" % self.value options = ChartifyOptions()