Archived
1
0
Fork 0

add fallback for local webrender if it is unavailable

This commit is contained in:
yzhh 2023-02-08 01:55:45 +08:00
parent da77391d21
commit 517f8e630d
6 changed files with 70 additions and 42 deletions

View file

@ -43,7 +43,7 @@ class Template(MS):
img = Image.open(image_path)
img.show()
Logger.info(f'[Bot] -> [{self.target.targetId}]: Image: {image_path}')
return FinishedSession([0], ['There should be a callable here... hmm...'])
return FinishedSession(self, [0], ['There should be a callable here... hmm...'])
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
send = None

View file

@ -10,9 +10,12 @@ from tabulate import tabulate
from config import Config
from core.logger import Logger
from .http import download_to_cache, get_url, post_url
from .cache import random_cache_path
web_render = Config('web_render_local')
web_render = Config('web_render')
web_render_local = Config('web_render_local')
class ImageTable:
@ -21,9 +24,12 @@ class ImageTable:
self.headers = headers
async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_source=True):
async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_source=True, use_local=True):
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
use_local = False
try:
tblst = []
if isinstance(table, ImageTable):
@ -59,19 +65,21 @@ async def image_table_render(table: Union[ImageTable, List[ImageTable]], save_so
fname = random_cache_path() + '.html'
with open(fname, 'w') as fi:
fi.write(tblst + css)
picname = random_cache_path() + '.jpg'
if os.path.exists(picname):
os.remove(picname)
async with aiohttp.ClientSession() as session:
async with session.post(web_render, headers={
pic = False
try:
pic = await download_to_cache(web_render_local if use_local else web_render, headers={
'Content-Type': 'application/json',
}, data=json.dumps(html)) as resp:
with open(picname, 'wb+') as jpg:
jpg.write(await resp.read())
return picname
}, post_data=json.dumps(html))
except aiohttp.ClientConnectorError:
pic = await download_to_cache(web_render, headers={
'Content-Type': 'application/json',
}, post_data=json.dumps(html))
return pic
except Exception:
Logger.error(traceback.format_exc())
return False
__all__ = ['ImageTable', 'image_table_render', 'web_render']
__all__ = ['ImageTable', 'image_table_render']

View file

@ -6,7 +6,7 @@ from core.exceptions import InvalidHelpDocTypeError
from core.loader import ModulesManager
from core.parser.command import CommandParser
from core.types import Command
from core.utils.image_table import ImageTable, image_table_render, web_render
from core.utils.image_table import ImageTable, image_table_render
from database import BotDBUtil
module = on_command('module',
@ -250,7 +250,7 @@ async def _(msg: Bot.MessageSession):
target_enabled_list = msg.enabled_modules
developers = ModulesManager.return_modules_developers_map()
legacy_help = True
if web_render and msg.Feature.image:
if msg.Feature.image:
try:
tables = []
essential = []
@ -329,7 +329,7 @@ async def modules_help(msg: Bot.MessageSession):
targetFrom=msg.target.targetFrom)
developers = ModulesManager.return_modules_developers_map()
legacy_help = True
if web_render and msg.Feature.image:
if msg.Feature.image:
try:
tables = []
m = []

View file

@ -114,7 +114,7 @@ async def mcbv_rss(bot: Bot.FetchTarget):
version = google_play_scraper('com.mojang.minecraftpe')['version']
if version not in verlist:
Logger.info(f'huh, we find bedrock {version}.')
await bot.post_message('mcbv_rss', '基岩版商店已更新' + version + '正式版。')
await bot.post_message('mcbv_rss', 'Google Play商店已更新基岩版' + version + '正式版。')
verlist.append(version)
update_stored_list(bot, 'mcbv_rss', verlist)
except Exception:

View file

@ -15,17 +15,22 @@ from config import Config
from core.logger import Logger
from core.utils.http import download_to_cache
web_render = Config('web_render_local')
web_render = Config('web_render')
web_render_local = Config('web_render_local')
elements = ['.notaninfobox', '.portable-infobox', '.infobox', '.tpl-infobox', '.infoboxtable', '.infotemplatebox',
'.skin-infobox', '.arcaeabox', '.moe-infobox', '.rotable']
assets_path = os.path.abspath('./assets/')
font = ImageFont.truetype(f'{assets_path}/SourceHanSansCN-Normal.ttf', 15)
async def generate_screenshot_v2(page_link, section=None, allow_special_page=False, content_mode=False):
async def generate_screenshot_v2(page_link, section=None, allow_special_page=False, content_mode=False, use_local=True):
elements_ = elements.copy()
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
use_local = False
timer = datetime.now().timestamp()
img = False
if section is None:
@ -35,7 +40,8 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
elements_.insert(0, '.diff')
Logger.info('[Webrender] Generating element screenshot...')
try:
img = await download_to_cache(web_render + 'element_screenshot', status_code=200,
img = await download_to_cache(web_render_local if use_local else web_render + 'element_screenshot',
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",
post_data=json.dumps({
@ -45,14 +51,16 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
timeout=30,
request_private_ip=True
)
except aiohttp.ClientConnectorError:
return await generate_screenshot_v2(page_link, section, allow_special_page, content_mode, use_local=False)
except ValueError:
Logger.info('[Webrender] Generation Failed.')
return False
else:
Logger.info('[Webrender] Generating section screenshot...')
try:
img = await download_to_cache(web_render + 'section_screenshot', status_code=200,
img = await download_to_cache(web_render_local if use_local else web_render + 'section_screenshot',
status_code=200,
headers={'Content-Type': 'application/json'},
method="POST",
post_data=json.dumps({
@ -62,6 +70,8 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
timeout=30,
request_private_ip=True
)
except aiohttp.ClientConnectorError:
return await generate_screenshot_v2(page_link, section, allow_special_page, content_mode, use_local=False)
except ValueError:
Logger.info('[Webrender] Generation Failed.')
return False
@ -70,7 +80,9 @@ async def generate_screenshot_v2(page_link, section=None, allow_special_page=Fal
async def generate_screenshot_v1(link, page_link, headers, section=None, allow_special_page=False) -> Union[str, bool]:
if not web_render_local:
if not web_render:
Logger.warn('[Webrender] Webrender is not configured.')
return False
try:
Logger.info('Starting find infobox/section..')
@ -321,6 +333,14 @@ async def generate_screenshot_v1(link, page_link, headers, section=None, allow_s
picname = os.path.abspath(f'./cache/{pagename}.jpg')
if os.path.exists(picname):
os.remove(picname)
try:
async with aiohttp.ClientSession() as session:
async with session.post(web_render_local, headers={
'Content-Type': 'application/json',
}, data=json.dumps(html)) as resp:
with open(picname, 'wb+') as jpg:
jpg.write(await resp.read())
except aiohttp.ClientConnectorError:
async with aiohttp.ClientSession() as session:
async with session.post(web_render, headers={
'Content-Type': 'application/json',