|
@@ -1,77 +1,36 @@
|
|
|
import matplotlib.pyplot as plt
|
|
|
-from fontTools.ttLib import TTFont
|
|
|
-from matplotlib.font_manager import findSystemFonts
|
|
|
+from matplotlib.font_manager import FontProperties
|
|
|
|
|
|
-from core.tools.errors import ToolProviderCredentialValidationError
|
|
|
-from core.tools.provider.builtin.chart.tools.line import LinearChartTool
|
|
|
from core.tools.provider.builtin_tool_provider import BuiltinToolProviderController
|
|
|
|
|
|
-# use a business theme
|
|
|
-plt.style.use("seaborn-v0_8-darkgrid")
|
|
|
-plt.rcParams["axes.unicode_minus"] = False
|
|
|
-
|
|
|
-
|
|
|
-def init_fonts():
|
|
|
- fonts = findSystemFonts()
|
|
|
|
|
|
- popular_unicode_fonts = [
|
|
|
+def set_chinese_font():
|
|
|
+ font_list = [
|
|
|
+ "PingFang SC",
|
|
|
+ "SimHei",
|
|
|
+ "Microsoft YaHei",
|
|
|
+ "STSong",
|
|
|
+ "SimSun",
|
|
|
"Arial Unicode MS",
|
|
|
- "DejaVu Sans",
|
|
|
- "DejaVu Sans Mono",
|
|
|
- "DejaVu Serif",
|
|
|
- "FreeMono",
|
|
|
- "FreeSans",
|
|
|
- "FreeSerif",
|
|
|
- "Liberation Mono",
|
|
|
- "Liberation Sans",
|
|
|
- "Liberation Serif",
|
|
|
- "Noto Mono",
|
|
|
- "Noto Sans",
|
|
|
- "Noto Serif",
|
|
|
- "Open Sans",
|
|
|
- "Roboto",
|
|
|
- "Source Code Pro",
|
|
|
- "Source Sans Pro",
|
|
|
- "Source Serif Pro",
|
|
|
- "Ubuntu",
|
|
|
- "Ubuntu Mono",
|
|
|
+ "Noto Sans CJK SC",
|
|
|
+ "Noto Sans CJK JP",
|
|
|
]
|
|
|
|
|
|
- supported_fonts = []
|
|
|
+ for font in font_list:
|
|
|
+ chinese_font = FontProperties(font)
|
|
|
+ if chinese_font.get_name() == font:
|
|
|
+ return chinese_font
|
|
|
|
|
|
- for font_path in fonts:
|
|
|
- try:
|
|
|
- font = TTFont(font_path)
|
|
|
- # get family name
|
|
|
- family_name = font["name"].getName(1, 3, 1).toUnicode()
|
|
|
- if family_name in popular_unicode_fonts:
|
|
|
- supported_fonts.append(family_name)
|
|
|
- except:
|
|
|
- pass
|
|
|
+ return FontProperties()
|
|
|
|
|
|
- plt.rcParams["font.family"] = "sans-serif"
|
|
|
- # sort by order of popular_unicode_fonts
|
|
|
- for font in popular_unicode_fonts:
|
|
|
- if font in supported_fonts:
|
|
|
- plt.rcParams["font.sans-serif"] = font
|
|
|
- break
|
|
|
|
|
|
-
|
|
|
-init_fonts()
|
|
|
+# use a business theme
|
|
|
+plt.style.use("seaborn-v0_8-darkgrid")
|
|
|
+plt.rcParams["axes.unicode_minus"] = False
|
|
|
+font_properties = set_chinese_font()
|
|
|
+plt.rcParams["font.family"] = font_properties.get_name()
|
|
|
|
|
|
|
|
|
class ChartProvider(BuiltinToolProviderController):
|
|
|
def _validate_credentials(self, credentials: dict) -> None:
|
|
|
- try:
|
|
|
- LinearChartTool().fork_tool_runtime(
|
|
|
- runtime={
|
|
|
- "credentials": credentials,
|
|
|
- }
|
|
|
- ).invoke(
|
|
|
- user_id="",
|
|
|
- tool_parameters={
|
|
|
- "data": "1,3,5,7,9,2,4,6,8,10",
|
|
|
- },
|
|
|
- )
|
|
|
- except Exception as e:
|
|
|
- raise ToolProviderCredentialValidationError(str(e))
|
|
|
+ pass
|