|
|
|
@@ -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 |