Asynchronously access the menu of the cafeterias at KAIST.
Project description
Kafeteria
Kafeteria is a Python package to asynchronously access the menu of the cafeterias at KAIST.
Installation
Install the package using pip:
pip install kafeteria
If you want optional Slack integration, install with the slack extra:
pip install kafeteria[slack]
Usage
Use the get_menu function to get the menu for a specific cafeteria, or the get_menus function to get the menus for multiple cafeterias at once.
Valid cafeteria codes are:
fclt: 카이마루west: 서측식당east1: 동측 학생식당east2: 동측 교직원식당emp: 교수회관icc: 문지캠퍼스hawam: 화암 기숙사식당seoul: 서울캠퍼스 구내식당
Here's an example:
import asyncio
import datetime
import kafeteria
async def main():
# Get the menu for a specific cafeteria
menu = await kafeteria.get_menu("fclt")
print(menu)
# Get the menu for a specific date
menu = await kafeteria.get_menu("fclt", datetime.date(2025, 1, 3))
print(menu)
# Get the menus for multiple cafeterias at once
menus = await kafeteria.get_menus(["fclt", "east1", "east2"])
print(menus)
asyncio.run(main())
Slack Integration
You can also publish today's menu to a Slack channel using the kafeteria.slack.publish function.
First, you need to set up a Slack app with the chat:write permission. Once you have a bot set up with the necessary permissions, set the following environment variables:
-
KAFETERIA_SLACK_BOT_TOKEN(required): The bot token for the Slack app. -
KAFETERIA_SLACK_CHANNEL(required): The channel ID to post the message to.This can be found by right-clicking on the channel in the Slack app and selecting "Copy link". The channel ID is the last part of the URL.
For more information, see the slack api documentation.
-
KAFETERIA_MENU_TIME(optional): The menu to send.This can be one of 0, 1, 2, or 3. The behavior is as follows:
-
1: breakfast
-
2: lunch
-
3: dinner
-
0: default, automatically selects the menu based on the current time:
- breakfast: 19:30 - 09:00
- lunch: 09:00 - 14:00
- dinner: 14:00 - 19:30
-
-
KAFETERIA_LIST(optional): The list of cafeterias to send the menu for.This should be a comma-separated list of cafeteria codes. By default,
fclt,west,east1,east2is used.
Then, you can publish the menu to a channel using kafeteria.slack.publish():
import kafeteria.slack
kafeteria.slack.publish()
This can be automated using a scheduled job, for example using GitHub Actions:
name: Publish Menu
on:
schedule:
# Every weekday at 11:30 AM GMT+9 (2:30 AM UTC)
- cron: "30 2 * * 1-5"
env:
KAFETERIA_SLACK_BOT_TOKEN: ${{ secrets.KAFETERIA_SLACK_BOT_TOKEN }} # Set in repository secrets
KAFETERIA_SLACK_CHANNEL: "C0123456789" # Replace with your channel ID
KAFETERIA_MENU_TIME: "0" # Automatically select the menu based on workflow run time
KAFETERIA_LIST: "fclt,west,east1,east2"
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
- name: Install dependencies
run: pip install kafeteria[slack]
- name: Publish menu
run: python -c 'import kafeteria.slack; kafeteria.slack.publish()'
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kafeteria-0.2.1.tar.gz.
File metadata
- Download URL: kafeteria-0.2.1.tar.gz
- Upload date:
- Size: 83.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fe5320b25abdb9c593eb807c976d3e6a1925cf393edbf3b763b600063db98a2
|
|
| MD5 |
0a8339fed3dd4e86c8047c1e1c90a419
|
|
| BLAKE2b-256 |
4b273b2bc0c532c55e906e07eecab289f717494c4e22092b7eb0bfc6d9c45642
|
File details
Details for the file kafeteria-0.2.1-py3-none-any.whl.
File metadata
- Download URL: kafeteria-0.2.1-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
142ee136265d7a63fef18720e7d2da1ca7f80f01ce0ae8fbfeae0b9fd3814797
|
|
| MD5 |
ee900bb558a90c6b3c5cef4e852b4b4e
|
|
| BLAKE2b-256 |
f09317fb187eaf0b601cac2a7c253030401850a5df7975c2dd7dd87634aaddd9
|