Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

# -*- 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 

 

 

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 

 

def get_option(self, option_name): 

"""Return the value of the given option""" 

return self._options[option_name].value 

 

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: An assumption here is that the contents of the yaml file are trusted and safe 

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()