def prepare_values(raw, config, cls): """Prepare the values to start with sane values""" if not raw: return adapters = list(cls._adapters) or [lambda x: x] if config.logarithmic: for fun in not_zero, positive: if fun in adapters: adapters.remove(fun) adapters = adapters + [positive, not_zero] adapter = reduce(compose, adapters) if not config.strict else ident series = [] width = max([len(values) for _, values in raw] + [len(config.x_labels or [])]) for title, raw_values in raw: metadata = {} values = [] if isinstance(raw_values, dict): value_list = [None] * width for k, v in raw_values.items(): if k in config.x_labels: value_list[config.x_labels.index(k)] = v raw_values = value_list else: raw_values = list(raw_values) for index, raw_value in enumerate(raw_values + ( (width - len(raw_values)) * [None] # aligning values if len(raw_values) < width else [])): if isinstance(raw_value, dict): value = raw_value.pop('value') metadata[index] = raw_value else: value = raw_value if cls.__name__ == 'XY' or cls.__name__ == 'DateY': if value is None: value = (None, None) elif not hasattr(value, '__iter__'): value = (value, config.zero) value = map(adapter, value) else: value = adapter(value) values.append(value) series.append(Serie(title, values, metadata)) return series
def prepare_values(self, raw, offset=0): """Prepare the values to start with sane values""" from pygal import Histogram from pygal.graph.map import BaseMap if self.zero == 0 and isinstance(self, BaseMap): self.zero = 1 if self.x_label_rotation: self.x_label_rotation %= 360 if self.y_label_rotation: self.y_label_rotation %= 360 for key in ('x_labels', 'y_labels'): if getattr(self, key): setattr(self, key, list(getattr(self, key))) if not raw: return adapters = list(self._adapters) or [lambda x: x] if self.logarithmic: for fun in not_zero, positive: if fun in adapters: adapters.remove(fun) adapters = adapters + [positive, not_zero] adapters = adapters + [decimal_to_float] self._adapt = reduce(compose, adapters) if not self.strict else ident self._x_adapt = reduce( compose, self._x_adapters ) if not self.strict and getattr(self, '_x_adapters', None) else ident series = [] raw = [( list(raw_values) if not isinstance(raw_values, dict) else raw_values, serie_config_kwargs ) for raw_values, serie_config_kwargs in raw] width = max([len(values) for values, _ in raw] + [len(self.x_labels or [])]) for raw_values, serie_config_kwargs in raw: metadata = {} values = [] if isinstance(raw_values, dict): if isinstance(self, BaseMap): raw_values = list(raw_values.items()) else: value_list = [None] * width for k, v in raw_values.items(): if k in (self.x_labels or []): value_list[self.x_labels.index(k)] = v raw_values = value_list for index, raw_value in enumerate(raw_values + ( (width - len(raw_values)) * [None] # aligning values if len(raw_values) < width else [])): if isinstance(raw_value, dict): raw_value = dict(raw_value) value = raw_value.pop('value', None) metadata[index] = raw_value else: value = raw_value # Fix this by doing this in charts class methods if isinstance(self, Histogram): if value is None: value = (None, None, None) elif not is_list_like(value): value = (value, self.zero, self.zero) elif len(value) == 2: value = (1, value[0], value[1]) value = list(map(self._adapt, value)) elif self._dual: if value is None: value = (None, None) elif not is_list_like(value): value = (value, self.zero) if self._x_adapt: value = ( self._x_adapt(value[0]), self._adapt(value[1]) ) if isinstance(self, BaseMap): value = (self._adapt(value[0]), value[1]) else: value = list(map(self._adapt, value)) else: value = self._adapt(value) values.append(value) serie_config = SerieConfig() serie_config( **dict((k, v) for k, v in self.state.__dict__.items() if k in dir(serie_config)) ) serie_config(**serie_config_kwargs) series.append( Serie(offset + len(series), values, serie_config, metadata) ) return series
def prepare_values(raw, config, cls): """Prepare the values to start with sane values""" from pygal.graph.datey import DateY from pygal.graph.histogram import Histogram from pygal.graph.worldmap import Worldmap from pygal.graph.frenchmap import FrenchMapDepartments if config.x_labels is None and hasattr(cls, 'x_labels'): config.x_labels = cls.x_labels if config.zero == 0 and issubclass(cls, (Worldmap, FrenchMapDepartments)): config.zero = 1 for key in ('x_labels', 'y_labels'): if getattr(config, key): setattr(config, key, list(getattr(config, key))) if not raw: return adapters = list(cls._adapters) or [lambda x: x] if config.logarithmic: for fun in not_zero, positive: if fun in adapters: adapters.remove(fun) adapters = adapters + [positive, not_zero] adapter = reduce(compose, adapters) if not config.strict else ident series = [] raw = [ (title, list(raw_values) if not isinstance(raw_values, dict) else raw_values) for title, raw_values in raw ] width = max([len(values) for _, values in raw] + [len(config.x_labels or [])]) for title, raw_values in raw: metadata = {} values = [] if isinstance(raw_values, dict): if issubclass(cls, (Worldmap, FrenchMapDepartments)): raw_values = list(raw_values.items()) else: value_list = [None] * width for k, v in raw_values.items(): if k in config.x_labels: value_list[config.x_labels.index(k)] = v raw_values = value_list for index, raw_value in enumerate(raw_values + ( (width - len(raw_values)) * [None] # aligning values if len(raw_values) < width else [])): if isinstance(raw_value, dict): raw_value = dict(raw_value) value = raw_value.pop('value', None) metadata[index] = raw_value else: value = raw_value # Fix this by doing this in charts class methods if issubclass(cls, Histogram): if value is None: value = (None, None, None) elif not is_list_like(value): value = (value, config.zero, config.zero) value = list(map(adapter, value)) elif cls._dual: if value is None: value = (None, None) elif not is_list_like(value): value = (value, config.zero) if issubclass(cls, DateY) or issubclass( cls, (Worldmap, FrenchMapDepartments)): value = (adapter(value[0]), value[1]) else: value = list(map(adapter, value)) else: value = adapter(value) values.append(value) series.append(Serie(title, values, metadata)) return series