diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bee8a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ diff --git a/README.md b/README.md index 4dcab25..b406b2b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,110 @@ -# kukuc-clock +Speak the current time and date in the Slovak language on a button press event -Speak the current time and date in the Slovak language on a button press event \ No newline at end of file +Hardware +-------- +- [Raspberry Pi Zero W](https://hackerboards.com/board/raspberry-pi-foundation-raspberry-pi-zero-w-wireless) + +- A button connected to the Raspberry pi GPIO as shown in the schema to debounce noisy contacts +![kukuc-clock-schema](assets/kukuc-clock-schema.png) + +- USB speaker with a microphone e.g. [Jabra Speak 410](https://www.jabra.com/_/media/Jabra_VXi_Product-Documentation/Jabra-SPEAK-410-Series/technical-specifications/RevB/Jabra-Speak-410-Techsheet-A4-290420-Web.pdf) +- microSD card 8GB + +- USB type-A to microUSB cable + +- USB power supply 5V 500mA + +Operating system +---------------- +Install [Raspberry Pi Imager](https://www.raspberrypi.com/news/raspberry-pi-imager-imaging-utility/) into your notebook. Launch it and choose `Raspberry Pi OS Lite` to write into the microSD card + +Power on the `Raspberry Pi` and finish the installation process. Log into its console using either: +- wifi (from your notebook: `ssh pi@raspberrypi`) +- connected USB keyboard and HDMI monitor +- serial port using [USB to TTL Serial Cable](https://learn.adafruit.com/raspberry-pi-zero-creation/give-it-life) + +Prerequisites +------------ +Once you are logged into the `Raspberry pi` console update your system +> `sudo apt update` +`sudo apt upgrade` + +Install `git`. It will be used to download the `kukuc-clock` +> `sudo apt install -y git` + +How to install +-------------- + +Clone the `kukuc-clock` source code into your home directory +> `cd` +`git clone https://gitea.virtonline.eu/2HoursProject/kukuc-clock.git --depth 1` + +Go into the newly created directory +> `cd ~/kukuc-clock` + +Configuration +------------- + +Check your Raspberry pi board pin layout and make sure your button matches with the GPIO pin `PIN = 27` from `kukuc-clock.py` +> `pinout` + +Use `raspi-config` `"System Options -> Audio"` to generate the ALSA config file +> `sudo raspi-config` + +Alternatively check your sound card +> `aplay -l` + +Put your sound card number `"card 0"` or `"card 1"` into the ALSA config file +> `nano .asoundrc` + +Install the ALSA config file +> `mv .asoundrc ~/` + +Test it first with emulated GPIO. It will simulate button press and hold for 8 seconds +> `python3 kukuc-clock.py test` + +Run it! +------- + +Just run `python3 kukuc-clock.py` then press and hold the button for at least 5 seconds +> `python3 kukuc-clock.py` + +Pres `Ctrl+c` to exit + +Make it a service to automaticaly start and run in the backgroud +------------------------------------------------------ + +If your `$HOME` directory is other then `/home/pi` then modify the systemd service file +> `sed -i "s#/home/pi#$HOME#g" kukuc-clock.py.service` + +If your username and group is other then `pi` and `pi` then also run +> `sed -i "s#User=pi#User=$USER#" kukuc-clock.service` +`sed -i "s#Group=pi#Group=$(id -gn)#" kukuc-clock.service` + +Install the systemd service files +> `sudo mv kukuc-clock.service /etc/systemd/system/` + +Reload systemd manager configuration +> `systemctl daemon-reload` + +Enable the `kukuc-clock` service at boot time and also run it +> `systemctl enable --now kukuc-clock` + +If it does not work check logs +> `journalctl -f -u kukuc-clock` + +Set volume for playback and recording +------------------------------------- + +Launch soundcard mixer +> `alsamixer` + +Press F6 to select a soundcard. Find your USB sound device in the list e.g. `Jabra Speak 410 USB`. Press F4 and use up/down arrow keys to set recording volume and repeat also for the playback (F3). Make sure it is not muted. Press (m) to toggle mute. Press ESC to exit. + +To preserve audio setting after the boot run +> `sudo alsactl store` + +Run unit tests +-------------- +> `cd test` +`python3 -m unittest test_slovak_datetime_formatter` \ No newline at end of file diff --git a/assets/kukuc-clock-schema.png b/assets/kukuc-clock-schema.png new file mode 100644 index 0000000..a48a422 Binary files /dev/null and b/assets/kukuc-clock-schema.png differ diff --git a/kukuc-clock.py b/kukuc-clock.py index 85ac449..a7dc8ab 100644 --- a/kukuc-clock.py +++ b/kukuc-clock.py @@ -3,16 +3,15 @@ import sys import time from datetime import datetime import subprocess -from slovak_datetime_formatter import get_datetime_as_slovak_sentence +from lib.slovak_datetime_formatter import get_datetime_as_slovak_sentence if len(sys.argv) > 1 and sys.argv[1] == "test": - import dummygpio as GPIO + import lib.dummygpio as GPIO else: import RPi.GPIO as GPIO -BUTTON_TIMEOUT = ( - 30 # button release timeout terminates playing -) +TTS_API_URL = "https://tts.virtonline.eu/api/tts" +BUTTON_TIMEOUT = 30 # button release timeout terminates playing PIN = 27 # listen to changes on this GPIO pin GPIO.setmode(GPIO.BCM) # use BCM pin layout GPIO.setwarnings(False) @@ -56,11 +55,16 @@ def generate_presny_cas(): username, password = get_credentials() subprocess.call( [ - "curl", "--silent", "-u", f"{username}:{password}", + "curl", + "--silent", + "-u", + f"{username}:{password}", "--get", - "--data-urlencode", f"text={text}", - "https://tts.virtonline.eu/api/tts", - "--output", "presny_cas.wav", + "--data-urlencode", + f"text={text}", + TTS_API_URL, + "--output", + "presny_cas.wav", ] ) print("Generated presny_cas.wav") diff --git a/dummygpio.py b/lib/dummygpio.py similarity index 91% rename from dummygpio.py rename to lib/dummygpio.py index b9d2811..96f9e19 100644 --- a/dummygpio.py +++ b/lib/dummygpio.py @@ -5,7 +5,7 @@ LOW = False IN = 0 PUD_UP = None DUMMY_FALLING_EDGE = "FALLING" -CHANGE_PIN_VALUE_AFTER = 8 # Transition to HIGH after 5 seconds +CHANGE_PIN_VALUE_AFTER = 8 # Transition to HIGH after 8 seconds BCM = 0 FALLING = None pull_up_down = {PUD_UP: DUMMY_FALLING_EDGE} diff --git a/slovak_datetime_formatter.py b/lib/slovak_datetime_formatter.py similarity index 52% rename from slovak_datetime_formatter.py rename to lib/slovak_datetime_formatter.py index 94508e5..4a460c4 100644 --- a/slovak_datetime_formatter.py +++ b/lib/slovak_datetime_formatter.py @@ -1,7 +1,7 @@ from datetime import datetime hodiny_slovnik = { - 0: "dvanásť", + 0: "nula", 1: "jedna", 2: "dve", 3: "tri", @@ -14,18 +14,17 @@ hodiny_slovnik = { 10: "desať", 11: "jedenásť", 12: "dvanásť", - 13: "jedna", - 14: "dve", - 15: "tri", - 16: "štyri", - 17: "päť", - 18: "šesť", - 19: "sedem", - 20: "osem", - 21: "deväť", - 22: "desať", - 23: "jedenásť", - 24: "dvanásť", + 13: "trinásť", + 14: "štrnásť", + 15: "pätnásť", + 16: "šestnásť", + 17: "sedemnásť", + 18: "osemnásť", + 19: "devätnásť", + 20: "dvadsať", + 21: "dvadsaťjeden", + 22: "dvadsaťdva", + 23: "dvadsaťtri", } minuty_slovnik = { @@ -50,45 +49,45 @@ minuty_slovnik = { 18: "osemnásť", 19: "devätnásť", 20: "dvadsať", - 21: "dvadsať jedna", - 22: "dvadsať dve", - 23: "dvadsať tri", - 24: "dvadsať štyri", - 25: "dvadsať päť", - 26: "dvadsať šesť", - 27: "dvadsať sedem", - 28: "dvadsať osem", - 29: "dvadsať deväť", + 21: "dvadsaťjeden", + 22: "dvadsaťdva", + 23: "dvadsaťtri", + 24: "dvadsaťštyri", + 25: "dvadsaťpäť", + 26: "dvadsaťšesť", + 27: "dvadsaťsedem", + 28: "dvadsaťosem", + 29: "dvadsaťdeväť", 30: "tridsať", - 31: "tridsať jedna", - 32: "tridsať dve", - 33: "tridsať tri", - 34: "tridsať štyri", - 35: "tridsať päť", - 36: "tridsať šesť", - 37: "tridsať sedem", - 38: "tridsať osem", - 39: "tridsať deväť", + 31: "tridsaťjeden", + 32: "tridsaťdva", + 33: "tridsaťtri", + 34: "tridsaťštyri", + 35: "tridsaťpäť", + 36: "tridsaťšesť", + 37: "tridsaťsedem", + 38: "tridsaťosem", + 39: "tridsaťdeväť", 40: "štyridsať", - 41: "štyridsať jedna", - 42: "štyridsať dve", - 43: "štyridsať tri", - 44: "štyridsať štyri", - 45: "štyridsať päť", - 46: "štyridsať šesť", - 47: "štyridsať sedem", - 48: "štyridsať osem", - 49: "štyridsať deväť", + 41: "štyridsaťjeden", + 42: "štyridsaťdva", + 43: "štyridsaťtri", + 44: "štyridsaťštyri", + 45: "štyridsaťpäť", + 46: "štyridsaťšesť", + 47: "štyridsaťsedem", + 48: "štyridsaťosem", + 49: "štyridsaťdeväť", 50: "päťdesiat", - 51: "päťdesiat jedna", - 52: "päťdesiat dve", - 53: "päťdesiat tri", - 54: "päťdesiat štyri", - 55: "päťdesiat päť", - 56: "päťdesiat šesť", - 57: "päťdesiat sedem", - 58: "päťdesiat osem", - 59: "päťdesiat deväť", + 51: "päťdesiatjeden", + 52: "päťdesiatdva", + 53: "päťdesiattri", + 54: "päťdesiatštyri", + 55: "päťdesiatpäť", + 56: "päťdesiatšesť", + 57: "päťdesiatsedem", + 58: "päťdesiatosem", + 59: "päťdesiatdeväť", } dni_slovnik = { @@ -150,28 +149,41 @@ cisla = { 31: "tridsiateho prvého", } + def format_hodiny(hodina): - if hodina == 'jedna': - return 'hodina' - elif hodina.endswith('dve') or hodina.endswith('tri') or hodina.endswith('štyri'): - return 'hodiny' + if hodina == "jedna": + return "hodina" + elif hodina == "dve" or hodina == "tri" or hodina == "štyri": + return "hodiny" else: - return 'hodín' + return "hodín" + def format_minuty(minuta): - if minuta == 'jedna': - return 'minúta' - elif minuta == 'dve' or minuta == 'tri' or minuta == 'štyri': - return 'minúty' + if minuta == "jedna": + return "minúta" + elif minuta == "dve" or minuta == "tri" or minuta == "štyri": + return "minúty" else: - return 'minút' + return "minút" + + +def format_prefix(hodiny): + if hodiny == "jedna": + return "Je" + elif hodiny == "dve" or hodiny == "tri" or hodiny == "štyri": + return "Sú" + else: + return "Je" + # Zobrazenie času a dátumu def get_datetime_as_slovak_sentence(cas): - hodiny = hodiny_slovnik[cas.hour % 12] + hodiny = hodiny_slovnik[cas.hour] minuty = minuty_slovnik[cas.minute] - return f"Je {hodiny} {format_hodiny(hodiny)} a {minuty} {format_minuty(minuty)}, {dni_slovnik[cas.weekday()]}, {cisla[cas.day]} {mesiace_slovnik[cas.month]}" + return f"{format_prefix(hodiny)} {hodiny} {format_hodiny(hodiny)} a {minuty} {format_minuty(minuty)}, {dni_slovnik[cas.weekday()]}, {cisla[cas.day]} {mesiace_slovnik[cas.month]}" + if __name__ == "__main__": print(get_datetime_as_slovak_sentence(datetime.now())) diff --git a/tests/test_data.csv b/tests/test_data.csv new file mode 100644 index 0000000..c44d0a3 --- /dev/null +++ b/tests/test_data.csv @@ -0,0 +1,175 @@ +00:00;01-01-2023;Je nula hodín a nula minút, nedeľa, prvého januára +00:01;01-01-2023;Je nula hodín a jedna minúta, nedeľa, prvého januára +00:02;01-01-2023;Je nula hodín a dve minúty, nedeľa, prvého januára +00:03;01-01-2023;Je nula hodín a tri minúty, nedeľa, prvého januára +00:04;01-01-2023;Je nula hodín a štyri minúty, nedeľa, prvého januára +00:05;01-01-2023;Je nula hodín a päť minút, nedeľa, prvého januára +00:06;01-01-2023;Je nula hodín a šesť minút, nedeľa, prvého januára +00:07;01-01-2023;Je nula hodín a sedem minút, nedeľa, prvého januára +00:08;01-01-2023;Je nula hodín a osem minút, nedeľa, prvého januára +00:09;01-01-2023;Je nula hodín a deväť minút, nedeľa, prvého januára +00:10;01-01-2023;Je nula hodín a desať minút, nedeľa, prvého januára +00:11;01-01-2023;Je nula hodín a jedenásť minút, nedeľa, prvého januára +00:12;01-01-2023;Je nula hodín a dvanásť minút, nedeľa, prvého januára +00:13;01-01-2023;Je nula hodín a trinásť minút, nedeľa, prvého januára +00:14;01-01-2023;Je nula hodín a štrnásť minút, nedeľa, prvého januára +00:15;01-01-2023;Je nula hodín a pätnásť minút, nedeľa, prvého januára +00:16;01-01-2023;Je nula hodín a šestnásť minút, nedeľa, prvého januára +00:17;01-01-2023;Je nula hodín a sedemnásť minút, nedeľa, prvého januára +00:18;01-01-2023;Je nula hodín a osemnásť minút, nedeľa, prvého januára +00:19;01-01-2023;Je nula hodín a devätnásť minút, nedeľa, prvého januára +00:20;01-01-2023;Je nula hodín a dvadsať minút, nedeľa, prvého januára +00:21;01-01-2023;Je nula hodín a dvadsaťjeden minút, nedeľa, prvého januára +00:22;01-01-2023;Je nula hodín a dvadsaťdva minút, nedeľa, prvého januára +00:23;01-01-2023;Je nula hodín a dvadsaťtri minút, nedeľa, prvého januára +00:24;01-01-2023;Je nula hodín a dvadsaťštyri minút, nedeľa, prvého januára +00:25;01-01-2023;Je nula hodín a dvadsaťpäť minút, nedeľa, prvého januára +00:26;01-01-2023;Je nula hodín a dvadsaťšesť minút, nedeľa, prvého januára +00:27;01-01-2023;Je nula hodín a dvadsaťsedem minút, nedeľa, prvého januára +00:28;01-01-2023;Je nula hodín a dvadsaťosem minút, nedeľa, prvého januára +00:29;01-01-2023;Je nula hodín a dvadsaťdeväť minút, nedeľa, prvého januára +00:30;01-01-2023;Je nula hodín a tridsať minút, nedeľa, prvého januára +00:31;01-01-2023;Je nula hodín a tridsaťjeden minút, nedeľa, prvého januára +00:32;01-01-2023;Je nula hodín a tridsaťdva minút, nedeľa, prvého januára +00:33;01-01-2023;Je nula hodín a tridsaťtri minút, nedeľa, prvého januára +00:34;01-01-2023;Je nula hodín a tridsaťštyri minút, nedeľa, prvého januára +00:35;01-01-2023;Je nula hodín a tridsaťpäť minút, nedeľa, prvého januára +00:36;01-01-2023;Je nula hodín a tridsaťšesť minút, nedeľa, prvého januára +00:37;01-01-2023;Je nula hodín a tridsaťsedem minút, nedeľa, prvého januára +00:38;01-01-2023;Je nula hodín a tridsaťosem minút, nedeľa, prvého januára +00:39;01-01-2023;Je nula hodín a tridsaťdeväť minút, nedeľa, prvého januára +00:40;01-01-2023;Je nula hodín a štyridsať minút, nedeľa, prvého januára +00:41;01-01-2023;Je nula hodín a štyridsaťjeden minút, nedeľa, prvého januára +00:42;01-01-2023;Je nula hodín a štyridsaťdva minút, nedeľa, prvého januára +00:43;01-01-2023;Je nula hodín a štyridsaťtri minút, nedeľa, prvého januára +00:44;01-01-2023;Je nula hodín a štyridsaťštyri minút, nedeľa, prvého januára +00:45;01-01-2023;Je nula hodín a štyridsaťpäť minút, nedeľa, prvého januára +00:46;01-01-2023;Je nula hodín a štyridsaťšesť minút, nedeľa, prvého januára +00:47;01-01-2023;Je nula hodín a štyridsaťsedem minút, nedeľa, prvého januára +00:48;01-01-2023;Je nula hodín a štyridsaťosem minút, nedeľa, prvého januára +00:49;01-01-2023;Je nula hodín a štyridsaťdeväť minút, nedeľa, prvého januára +00:50;01-01-2023;Je nula hodín a päťdesiat minút, nedeľa, prvého januára +00:51;01-01-2023;Je nula hodín a päťdesiatjeden minút, nedeľa, prvého januára +00:52;01-01-2023;Je nula hodín a päťdesiatdva minút, nedeľa, prvého januára +00:53;01-01-2023;Je nula hodín a päťdesiattri minút, nedeľa, prvého januára +00:54;01-01-2023;Je nula hodín a päťdesiatštyri minút, nedeľa, prvého januára +00:55;01-01-2023;Je nula hodín a päťdesiatpäť minút, nedeľa, prvého januára +00:56;01-01-2023;Je nula hodín a päťdesiatšesť minút, nedeľa, prvého januára +00:57;01-01-2023;Je nula hodín a päťdesiatsedem minút, nedeľa, prvého januára +00:58;01-01-2023;Je nula hodín a päťdesiatosem minút, nedeľa, prvého januára +00:59;01-01-2023;Je nula hodín a päťdesiatdeväť minút, nedeľa, prvého januára + +00:00;01-01-2023;Je nula hodín a nula minút, nedeľa, prvého januára +01:00;01-01-2023;Je jedna hodina a nula minút, nedeľa, prvého januára +02:00;01-01-2023;Sú dve hodiny a nula minút, nedeľa, prvého januára +03:00;01-01-2023;Sú tri hodiny a nula minút, nedeľa, prvého januára +04:00;01-01-2023;Sú štyri hodiny a nula minút, nedeľa, prvého januára +05:00;01-01-2023;Je päť hodín a nula minút, nedeľa, prvého januára +06:00;01-01-2023;Je šesť hodín a nula minút, nedeľa, prvého januára +07:00;01-01-2023;Je sedem hodín a nula minút, nedeľa, prvého januára +08:00;01-01-2023;Je osem hodín a nula minút, nedeľa, prvého januára +09:00;01-01-2023;Je deväť hodín a nula minút, nedeľa, prvého januára +10:00;01-01-2023;Je desať hodín a nula minút, nedeľa, prvého januára +11:00;01-01-2023;Je jedenásť hodín a nula minút, nedeľa, prvého januára +12:00;01-01-2023;Je dvanásť hodín a nula minút, nedeľa, prvého januára +13:00;01-01-2023;Je trinásť hodín a nula minút, nedeľa, prvého januára +14:00;01-01-2023;Je štrnásť hodín a nula minút, nedeľa, prvého januára +15:00;01-01-2023;Je pätnásť hodín a nula minút, nedeľa, prvého januára +16:00;01-01-2023;Je šestnásť hodín a nula minút, nedeľa, prvého januára +17:00;01-01-2023;Je sedemnásť hodín a nula minút, nedeľa, prvého januára +18:00;01-01-2023;Je osemnásť hodín a nula minút, nedeľa, prvého januára +19:00;01-01-2023;Je devätnásť hodín a nula minút, nedeľa, prvého januára +20:00;01-01-2023;Je dvadsať hodín a nula minút, nedeľa, prvého januára +21:00;01-01-2023;Je dvadsaťjeden hodín a nula minút, nedeľa, prvého januára +22:00;01-01-2023;Je dvadsaťdva hodín a nula minút, nedeľa, prvého januára +23:00;01-01-2023;Je dvadsaťtri hodín a nula minút, nedeľa, prvého januára + +00:00;01-01-2023;Je nula hodín a nula minút, nedeľa, prvého januára +00:00;02-01-2023;Je nula hodín a nula minút, pondelok, druhého januára +00:00;03-01-2023;Je nula hodín a nula minút, utorok, tretieho januára +00:00;04-01-2023;Je nula hodín a nula minút, streda, štvrtého januára +00:00;05-01-2023;Je nula hodín a nula minút, štvrtok, piateho januára +00:00;06-01-2023;Je nula hodín a nula minút, piatok, šiesteho januára +00:00;07-01-2023;Je nula hodín a nula minút, sobota, siedmeho januára +00:00;08-01-2023;Je nula hodín a nula minút, nedeľa, ôsmeho januára +00:00;09-01-2023;Je nula hodín a nula minút, pondelok, deviateho januára +00:00;10-01-2023;Je nula hodín a nula minút, utorok, desiateho januára +00:00;11-01-2023;Je nula hodín a nula minút, streda, jedenásteho januára +00:00;12-01-2023;Je nula hodín a nula minút, štvrtok, dvanásteho januára +00:00;13-01-2023;Je nula hodín a nula minút, piatok, trinásteho januára +00:00;14-01-2023;Je nula hodín a nula minút, sobota, štrnásteho januára +00:00;15-01-2023;Je nula hodín a nula minút, nedeľa, pätnásteho januára +00:00;16-01-2023;Je nula hodín a nula minút, pondelok, šestnásteho januára +00:00;17-01-2023;Je nula hodín a nula minút, utorok, sedemnásteho januára +00:00;18-01-2023;Je nula hodín a nula minút, streda, osemnásteho januára +00:00;19-01-2023;Je nula hodín a nula minút, štvrtok, devätnásteho januára +00:00;20-01-2023;Je nula hodín a nula minút, piatok, dvadsiateho januára +00:00;21-01-2023;Je nula hodín a nula minút, sobota, dvadsiateho prvého januára +00:00;22-01-2023;Je nula hodín a nula minút, nedeľa, dvadsiateho druhého januára +00:00;23-01-2023;Je nula hodín a nula minút, pondelok, dvadsiateho tretieho januára +00:00;24-01-2023;Je nula hodín a nula minút, utorok, dvadsiateho štvrtého januára +00:00;25-01-2023;Je nula hodín a nula minút, streda, dvadsiateho piateho januára +00:00;26-01-2023;Je nula hodín a nula minút, štvrtok, dvadsiateho šiesteho januára +00:00;27-01-2023;Je nula hodín a nula minút, piatok, dvadsiateho siedmeho januára +00:00;28-01-2023;Je nula hodín a nula minút, sobota, dvadsiateho ôsmeho januára +00:00;29-01-2023;Je nula hodín a nula minút, nedeľa, dvadsiateho deviateho januára +00:00;30-01-2023;Je nula hodín a nula minút, pondelok, tridsiateho januára +00:00;31-01-2023;Je nula hodín a nula minút, utorok, tridsiateho prvého januára + +00:00;01-01-2023;Je nula hodín a nula minút, nedeľa, prvého januára +00:00;01-02-2023;Je nula hodín a nula minút, streda, prvého februára +00:00;01-03-2023;Je nula hodín a nula minút, streda, prvého marca +00:00;01-04-2023;Je nula hodín a nula minút, sobota, prvého apríla +00:00;01-05-2023;Je nula hodín a nula minút, pondelok, prvého mája +00:00;01-06-2023;Je nula hodín a nula minút, štvrtok, prvého júna +00:00;01-07-2023;Je nula hodín a nula minút, sobota, prvého júla +00:00;01-08-2023;Je nula hodín a nula minút, utorok, prvého augusta +00:00;01-09-2023;Je nula hodín a nula minút, piatok, prvého septembra +00:00;01-10-2023;Je nula hodín a nula minút, nedeľa, prvého októbra +00:00;01-11-2023;Je nula hodín a nula minút, streda, prvého novembra +00:00;01-12-2023;Je nula hodín a nula minút, piatok, prvého decembra + + +14:23;04-02-2023;Je štrnásť hodín a dvadsaťtri minút, sobota, štvrtého februára +03:16;15-03-2023;Sú tri hodiny a šestnásť minút, streda, pätnásteho marca +21:45;27-04-2023;Je dvadsaťjeden hodín a štyridsaťpäť minút, štvrtok, dvadsiateho siedmeho apríla +07:07;09-05-2023;Je sedem hodín a sedem minút, utorok, deviateho mája +00:00;20-06-2023;Je nula hodín a nula minút, utorok, dvadsiateho júna +12:30;11-07-2023;Je dvanásť hodín a tridsať minút, utorok, jedenásteho júla +18:55;22-08-2023;Je osemnásť hodín a päťdesiatpäť minút, utorok, dvadsiateho druhého augusta +23:11;30-09-2023;Je dvadsaťtri hodín a jedenásť minút, sobota, tridsiateho septembra +05:20;01-10-2023;Je päť hodín a dvadsať minút, nedeľa, prvého októbra +16:42;13-11-2023;Je šestnásť hodín a štyridsaťdva minút, pondelok, trinásteho novembra +08:08;04-12-2023;Je osem hodín a osem minút, pondelok, štvrtého decembra +22:22;17-01-2023;Je dvadsaťdva hodín a dvadsaťdva minút, utorok, sedemnásteho januára +11:11;28-02-2023;Je jedenásť hodín a jedenásť minút, utorok, dvadsiateho ôsmeho februára +02:02;19-03-2023;Sú dve hodiny a dve minúty, nedeľa, devätnásteho marca +19:19;05-04-2023;Je devätnásť hodín a devätnásť minút, streda, piateho apríla +06:06;16-05-2023;Je šesť hodín a šesť minút, utorok, šestnásteho mája +13:13;07-06-2023;Je trinásť hodín a trinásť minút, streda, siedmeho júna +17:17;18-07-2023;Je sedemnásť hodín a sedemnásť minút, utorok, osemnásteho júla +09:09;29-08-2023;Je deväť hodín a deväť minút, utorok, dvadsiateho deviateho augusta +15:15;10-09-2023;Je pätnásť hodín a pätnásť minút, nedeľa, desiateho septembra + + +10:25;07-03-2023;Je desať hodín a dvadsaťpäť minút, utorok, siedmeho marca +22:40;14-06-2023;Je dvadsaťdva hodín a štyridsať minút, streda, štrnásteho júna +03:55;21-09-2023;Sú tri hodiny a päťdesiatpäť minút, štvrtok, dvadsiateho prvého septembra +15:10;28-12-2023;Je pätnásť hodín a desať minút, štvrtok, dvadsiateho ôsmeho decembra +06:05;02-02-2023;Je šesť hodín a päť minút, štvrtok, druhého februára +18:15;16-05-2023;Je osemnásť hodín a pätnásť minút, utorok, šestnásteho mája +07:20;25-07-2023;Je sedem hodín a dvadsať minút, utorok, dvadsiateho piateho júla +19:30;30-10-2023;Je devätnásť hodín a tridsať minút, pondelok, tridsiateho októbra +08:45;11-01-2023;Je osem hodín a štyridsaťpäť minút, streda, jedenásteho januára +20:50;17-04-2023;Je dvadsať hodín a päťdesiat minút, pondelok, sedemnásteho apríla +01:35;23-08-2023;Je jedna hodina a tridsaťpäť minút, streda, dvadsiateho tretieho augusta +13:25;04-11-2023;Je trinásť hodín a dvadsaťpäť minút, sobota, štvrtého novembra +02:10;09-03-2023;Sú dve hodiny a desať minút, štvrtok, deviateho marca +14:55;15-07-2023;Je štrnásť hodín a päťdesiatpäť minút, sobota, pätnásteho júla +05:40;24-10-2023;Je päť hodín a štyridsať minút, utorok, dvadsiateho štvrtého októbra +17:50;06-02-2023;Je sedemnásť hodín a päťdesiat minút, pondelok, šiesteho februára +04:30;12-05-2023;Sú štyri hodiny a tridsať minút, piatok, dvanásteho mája +16:45;27-09-2023;Je šestnásť hodín a štyridsaťpäť minút, streda, dvadsiateho siedmeho septembra +09:15;31-12-2023;Je deväť hodín a pätnásť minút, nedeľa, tridsiateho prvého decembra +21:05;08-08-2023;Je dvadsaťjeden hodín a päť minút, utorok, ôsmeho augusta + diff --git a/tests/test_slovak_datetime_formatter.py b/tests/test_slovak_datetime_formatter.py new file mode 100644 index 0000000..6b58d70 --- /dev/null +++ b/tests/test_slovak_datetime_formatter.py @@ -0,0 +1,34 @@ +import unittest +from datetime import datetime +import csv +import imp + +get_datetime_as_slovak_sentence = imp.load_source( + "slovak_datetime_formatter", "../lib/slovak_datetime_formatter.py" +).get_datetime_as_slovak_sentence + + +class TestSlovakDateTimeFormatter(unittest.TestCase): + def test(self): + test_data = [] + with open("test_data.csv") as file: + reader = csv.reader(file, delimiter=";") + for row in reader: + if row: + test_data.append(row) + + for time_str, date_str, expected_text in test_data: + test_datetime = datetime( + int(date_str.split("-")[2]), + int(date_str.split("-")[1]), + int(date_str.split("-")[0]), + int(time_str.split(":")[0]), + int(time_str.split(":")[1]), + ) + + output_text = get_datetime_as_slovak_sentence(test_datetime) + self.assertEqual(output_text, expected_text) + + +if __name__ == "__main__": + unittest.main()