def test_merge_js_dependencies_with_mixed_chart_and_string(): map_chart = MockChart(['echarts', 'fujian']) eq_(['echarts', 'zhejiang'], merge_js_dependencies('echarts', 'zhejiang')) eq_(['echarts', 'zhejiang'], merge_js_dependencies(['echarts', 'zhejiang'])) eq_(['echarts', 'fujian'], merge_js_dependencies('echarts', map_chart))
def test_merge_js_dependencies_with_mixed_chart_and_string(): map_chart = MockChart(["echarts", "fujian"]) eq_(["echarts", "zhejiang"], merge_js_dependencies("echarts", "zhejiang")) eq_(["echarts", "zhejiang"], merge_js_dependencies(["echarts", "zhejiang"])) eq_(["echarts", "fujian"], merge_js_dependencies("echarts", map_chart))
def test_merge_js_dependencies_with_mixed_chart_and_string(): map_chart = MockChart(["echarts", "fujian"]) eq_(["echarts", "zhejiang"], merge_js_dependencies("echarts", "zhejiang")) eq_( ["echarts", "zhejiang"], merge_js_dependencies(["echarts", "zhejiang"]) ) eq_(["echarts", "fujian"], merge_js_dependencies("echarts", map_chart))
def test_merge_js_dependencies_with_multiple_charts(): base_chart = MockChart(['echarts']) map_chart = MockChart(['echarts', 'fujian']) three_d_chart = MockChart(['echarts', 'echartsgl']) # Multiple charts eq_(['echarts', 'fujian'], merge_js_dependencies(base_chart, map_chart)) eq_( ['echarts', 'echartsgl', 'fujian'], merge_js_dependencies(base_chart, map_chart, three_d_chart), )
def test_merge_js_dependencies_with_multiple_charts(): base_chart = MockChart(["echarts"]) map_chart = MockChart(["echarts", "fujian"]) three_d_chart = MockChart(["echarts", "echartsgl"]) # Multiple charts eq_(["echarts", "fujian"], merge_js_dependencies(base_chart, map_chart)) eq_( ["echarts", "echartsgl", "fujian"], merge_js_dependencies(base_chart, map_chart, three_d_chart), )
def test_merge_js_dependencies_with_one_chart(): # Prepare some kinds of charts or page. base_chart = MockChart(['echarts']) # One chart or page eq_(['echarts'], merge_js_dependencies(base_chart)) # A map chart ch1 = MockChart(['echarts', 'fujian', 'zhengjiang', 'anhui']) eq_( ['echarts', 'fujian', 'zhengjiang', 'anhui'], merge_js_dependencies(ch1), )
def test_merge_js_dependencies_with_one_chart(): # Prepare some kinds of charts or page. base_chart = MockChart(["echarts"]) # One chart or page eq_(["echarts"], merge_js_dependencies(base_chart)) # A map chart ch1 = MockChart(["echarts", "fujian", "zhengjiang", "anhui"]) eq_( ["echarts", "fujian", "zhengjiang", "anhui"], merge_js_dependencies(ch1), )
def add(self, chart, time_point): """ :param chart: 图形实例 :param time_point: 指定时间点 """ self._js_dependencies = merge_js_dependencies(self._js_dependencies, chart.js_dependencies) self.__check_components(chart) self._time_points.append(time_point) self._option.get('baseOption').update( backgroundColor=chart.options.get('backgroundColor')) self._option.get('baseOption').get('timeline').update( data=self._time_points) self._option.get('options').append({ "legend": chart.options.get('legend'), "series": chart.options.get('series'), "title": chart.options.get('title') }) _tmp_series = copy.deepcopy(chart.options.get('series')) for _s in _tmp_series: _s.pop("data", None) self._option.get("baseOption").get("series").append(_s)
def add(self, chart, time_point): """ :param chart: 图形实例 :param time_point: 指定时间点 """ self._js_dependencies = merge_js_dependencies(self._js_dependencies, chart.js_dependencies) self.__check_components(chart) self._time_points.append(time_point) self._option.get("baseOption").update( backgroundColor=chart.options.get("backgroundColor")) self._option.get("baseOption").get("timeline").update( data=self._time_points) self._option.get("options").append({ "color": chart.options.get("color"), "legend": chart.options.get("legend"), "series": chart.options.get("series"), "title": chart.options.get("title"), "tooltip": chart.options.get("tooltip"), }) _tmp_series = copy.deepcopy(chart.options.get("series")) for _s in _tmp_series: if _s.get("type") == "map": _s.pop("data", None) self._option.get("baseOption").get("series").append(_s) return self
def add(self, chart, time_point): """ :param chart: 图形实例 :param time_point: 指定时间点 """ self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies ) self.__check_components(chart) self._time_points.append(time_point) self._option.get("baseOption").update( backgroundColor=chart.options.get("backgroundColor") ) self._option.get("baseOption").get("timeline").update( data=self._time_points ) self._option.get("options").append( { "color": chart.options.get("color"), "legend": chart.options.get("legend"), "series": chart.options.get("series"), "title": chart.options.get("title"), "tooltip": chart.options.get("tooltip"), } ) _tmp_series = copy.deepcopy(chart.options.get("series")) for _s in _tmp_series: if _s.get("type") == "map": _s.pop("data", None) self._option.get("baseOption").get("series").append(_s)
def add(self, chart, xaxis_index=0, yaxis_index=0, is_add_xaxis=False, is_add_yaxis=False): """ :param chart: 图形实例 :param xaxis_index: x 坐标轴索引,默认为 0 :param yaxis_index: y 坐标轴索引,默认为 0 :param is_add_xaxis: 是否新增一个 x 坐标轴,默认为 False :param is_add_yaxis: 是否新增一个 y 坐标轴,默认为 False """ if not self._option: self._option = copy.deepcopy(chart.options) self._series_id = self._option.get('series')[0].get('seriesId') self._js_dependencies = chart.js_dependencies else: _series = (chart.options.get('legend')[0].get('data'), chart.options.get('series'), chart.options.get('xAxis')[0], chart.options.get('yAxis')[0], is_add_xaxis, is_add_yaxis, xaxis_index, yaxis_index) self.__custom(_series) self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies)
def echarts_js_dependencies_embed(env, *args): """ Render script html nodes in embed mode,Only used for local files. """ current_config = env.pyecharts_config dependencies = utils.merge_js_dependencies(*args) contents = current_config.read_file_contents_from_local(dependencies) return Markup("\n".join( [EMBED_SCRIPT_FORMATTER.format(c) for c in contents]))
def echarts_js_dependencies_embed(env, *args): """ Render script html nodes in embed mode,Only used for local files. """ current_config = env.pyecharts_config dependencies = utils.merge_js_dependencies(*args) contents = current_config.read_file_contents_from_local(dependencies) return Markup( "\n".join([EMBED_SCRIPT_FORMATTER.format(c) for c in contents]) )
def echarts_js_dependencies(env, *args): """ Render script html nodes in external link mode. """ current_config = env.pyecharts_config dependencies = utils.merge_js_dependencies(*args) if current_config.js_embed: contents = current_config.read_file_contents_from_local(dependencies) return Markup("\n".join( [EMBED_SCRIPT_FORMATTER.format(c) for c in contents])) else: js_links = current_config.generate_js_link(dependencies) return Markup("\n".join( [LINK_SCRIPT_FORMATTER.format(j) for j in js_links]))
def echarts_js_dependencies(env, *args): """ Render script html nodes in external link mode. """ current_config = env.pyecharts_config dependencies = utils.merge_js_dependencies(*args) if current_config.js_embed: contents = current_config.read_file_contents_from_local(dependencies) return Markup( "\n".join([EMBED_SCRIPT_FORMATTER.format(c) for c in contents]) ) else: js_links = current_config.generate_js_link(dependencies) return Markup( "\n".join([LINK_SCRIPT_FORMATTER.format(j) for j in js_links]) )
def add( self, chart, xaxis_index=0, yaxis_index=0, is_add_xaxis=False, is_add_yaxis=False, ): """ :param chart: 图形实例 :param xaxis_index: x 坐标轴索引,默认为 0 :param yaxis_index: y 坐标轴索引,默认为 0 :param is_add_xaxis: 是否新增一个 x 坐标轴,默认为 False :param is_add_yaxis: 是否新增一个 y 坐标轴,默认为 False """ if not self._option: self._option = chart.get_options(remove_none=False) self._series_id = self._option.get("series")[0].get("seriesId") self._js_dependencies = chart.js_dependencies else: chart_options = chart.get_options(remove_none=False) _series = ( chart_options.get("legend")[0].get("data"), chart_options.get("series"), chart_options.get("xAxis")[0], chart_options.get("yAxis")[0], is_add_xaxis, is_add_yaxis, xaxis_index, yaxis_index, ) self._custom(_series) self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies) return self
def add( self, chart, xaxis_index=0, yaxis_index=0, is_add_xaxis=False, is_add_yaxis=False, ): """ :param chart: 图形实例 :param xaxis_index: x 坐标轴索引,默认为 0 :param yaxis_index: y 坐标轴索引,默认为 0 :param is_add_xaxis: 是否新增一个 x 坐标轴,默认为 False :param is_add_yaxis: 是否新增一个 y 坐标轴,默认为 False """ if not self._option: self._option = copy.deepcopy(chart.options) self._series_id = self._option.get("series")[0].get("seriesId") self._js_dependencies = chart.js_dependencies else: _series = ( chart.options.get("legend")[0].get("data"), chart.options.get("series"), chart.options.get("xAxis")[0], chart.options.get("yAxis")[0], is_add_xaxis, is_add_yaxis, xaxis_index, yaxis_index, ) self.__custom(_series) self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies )
def add( self, chart, grid_width=None, grid_height=None, grid_top=None, grid_bottom=None, grid_left=None, grid_right=None, ): """ :param chart: 图形实例 :param grid_width: grid 组件的宽度。默认自适应。 :param grid_height: grid 组件的高度。默认自适应。 :param grid_top: grid 组件离容器顶部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 :param grid_bottom: grid 组件离容器底部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 :param grid_left: grid 组件离容器左侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 :param grid_right: grid 组件离容器右侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 """ if not self._option: self._option = copy.deepcopy(chart.options) self._option.update(grid=[]) self._js_dependencies = chart.js_dependencies _grid = grid( grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right, ) if _grid: for _ in range(len(self._option.get("series"))): self._option.get("grid").append(_grid) else: _series = ( chart.options.get("series"), chart.options.get("xAxis", None), chart.options.get("yAxis", None), chart.options.get("legend")[0], chart.options.get("title")[0], ) ( _index, _index_once, _xaxis, _yaxis, _legend, _title, ) = self.__custom(_series) self._option.get("legend").append(_legend) self._option.get("title").append(_title) if _xaxis and _yaxis is not None: for _x in _xaxis: _x["gridIndex"] = _index - 1 self._option.get("xAxis").append(_x) for _y in _yaxis: _y["gridIndex"] = _index - 1 self._option.get("yAxis").append(_y) # series id 是每个图实例的唯一标识 _flag = self._option.get("series")[0].get("seriesId") _series_index = 0 for s in self._option.get("series"): if _flag == s.get("seriesId"): s.update( xAxisIndex=_series_index, yAxisIndex=_series_index ) else: _series_index += 1 s.update( xAxisIndex=_series_index, yAxisIndex=_series_index ) _flag = s.get("seriesId") _grid = grid( grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right, ) for _ in range(_index_once): self._option.get("grid").append(_grid) self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies ) return self
def js_dependencies(self): return utils.merge_js_dependencies(self._js_dependencies)
def js_dependencies(self): # Treat self as a list,not a page return utils.merge_js_dependencies(*self)
def add( self, chart, grid_width=None, grid_height=None, grid_top=None, grid_bottom=None, grid_left=None, grid_right=None, ): """ :param chart: 图形实例 :param grid_width: grid 组件的宽度。默认自适应。 :param grid_height: grid 组件的高度。默认自适应。 :param grid_top: grid 组件离容器顶部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 :param grid_bottom: grid 组件离容器底部的距离。默认为 None, 有'top', 'center', 'middle'可选,也可以为百分数或者整数 :param grid_left: grid 组件离容器左侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 :param grid_right: grid 组件离容器右侧的距离。默认为 None, 有'left', 'center', 'right'可选,也可以为百分数或者整数 """ if not self._option: self._option = copy.deepcopy(chart.options) self._option.update(grid=[]) self._js_dependencies = chart.js_dependencies _grid = grid( grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right, ) if _grid: for _ in range(len(self._option.get("series"))): self._option.get("grid").append(_grid) else: _series = ( chart.options.get("series"), chart.options.get("xAxis", None), chart.options.get("yAxis", None), chart.options.get("legend")[0], chart.options.get("title")[0], ) ( _index, _index_once, _xaxis, _yaxis, _legend, _title ) = self.__custom( _series ) self._option.get("legend").append(_legend) self._option.get("title").append(_title) if _xaxis and _yaxis is not None: for _x in _xaxis: _x["gridIndex"] = _index - 1 self._option.get("xAxis").append(_x) for _y in _yaxis: _y["gridIndex"] = _index - 1 self._option.get("yAxis").append(_y) # series id 是每个图实例的唯一标识 _flag = self._option.get("series")[0].get("seriesId") _series_index = 0 for s in self._option.get("series"): if _flag == s.get("seriesId"): s.update( xAxisIndex=_series_index, yAxisIndex=_series_index ) else: _series_index += 1 s.update( xAxisIndex=_series_index, yAxisIndex=_series_index ) _flag = s.get("seriesId") _grid = grid( grid_width, grid_height, grid_top, grid_bottom, grid_left, grid_right, ) for _ in range(_index_once): self._option.get("grid").append(_grid) self._js_dependencies = merge_js_dependencies( self._js_dependencies, chart.js_dependencies )