from typing import Any, Dict, List import requests from menu import Menu def markdown(text: str) -> Dict[str, Any]: return { 'type': 'section', 'text': { 'type': 'mrkdwn', 'text': text } } def img(text: str, img_url: str) -> Dict[str, Any]: return { 'type': 'image', 'title': { 'type': 'plain_text', 'text': text }, 'image_url': img_url, 'alt_text': text } def menu_to_str(m: Menu) -> str: ret = '\n'.join([ f'*식사 시간*: {m.meal_time}', f'*식사 종류*: {m.meal_type}', f'*대표 메뉴*: {m.rep_menu}', f'*상세 메뉴*: {m.detailed_menu}', f'*칼로리*: {m.calory}', ]) return ret def for_slack(date: str, data: List[Menu]) -> Dict[str, Any]: blocks = [markdown(f'*{date} 일자 메뉴*')] if len(data) == 0: blocks.append(markdown('메뉴가 존재하지 않습니다')) return {'blocks': blocks} for each in data: blocks.append(markdown(menu_to_str(each))) if each.menu_image: blocks.append(img(each.rep_menu, each.menu_image)) else: blocks.append(markdown('이미지가 존재하지 않습니다')) return {'blocks': blocks} def send(slack_url: str, date: str, data: List[Menu]) -> bool: payload = for_slack(date, data) print(payload) res = requests.post(url= slack_url, json=payload) print(res.text) return res.text == 'ok'