add fallback for local webrender if it is unavailable
This commit is contained in:
parent
da77391d21
commit
517f8e630d
6 changed files with 70 additions and 42 deletions
|
@ -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
|
||||
|
|
|
@ -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']
|
||||
|
|
|
@ -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 = []
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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',
|
||||
|
|
Reference in a new issue