added unit test, updated Readme and picture

This commit is contained in:
cpu
2023-12-13 01:53:14 +01:00
parent 1522032a36
commit 89f84666bc
8 changed files with 406 additions and 73 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
__pycache__

111
README.md
View File

@@ -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
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`

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -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")

View File

@@ -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}

View File

@@ -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: "ť",
18: "še",
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á",
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 ""
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()))

175
tests/test_data.csv Normal file
View File

@@ -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
1 00:00;01-01-2023;Je nula hodín a nula minút nedeľa prvého januára
2 00:01;01-01-2023;Je nula hodín a jedna minúta nedeľa prvého januára
3 00:02;01-01-2023;Je nula hodín a dve minúty nedeľa prvého januára
4 00:03;01-01-2023;Je nula hodín a tri minúty nedeľa prvého januára
5 00:04;01-01-2023;Je nula hodín a štyri minúty nedeľa prvého januára
6 00:05;01-01-2023;Je nula hodín a päť minút nedeľa prvého januára
7 00:06;01-01-2023;Je nula hodín a šesť minút nedeľa prvého januára
8 00:07;01-01-2023;Je nula hodín a sedem minút nedeľa prvého januára
9 00:08;01-01-2023;Je nula hodín a osem minút nedeľa prvého januára
10 00:09;01-01-2023;Je nula hodín a deväť minút nedeľa prvého januára
11 00:10;01-01-2023;Je nula hodín a desať minút nedeľa prvého januára
12 00:11;01-01-2023;Je nula hodín a jedenásť minút nedeľa prvého januára
13 00:12;01-01-2023;Je nula hodín a dvanásť minút nedeľa prvého januára
14 00:13;01-01-2023;Je nula hodín a trinásť minút nedeľa prvého januára
15 00:14;01-01-2023;Je nula hodín a štrnásť minút nedeľa prvého januára
16 00:15;01-01-2023;Je nula hodín a pätnásť minút nedeľa prvého januára
17 00:16;01-01-2023;Je nula hodín a šestnásť minút nedeľa prvého januára
18 00:17;01-01-2023;Je nula hodín a sedemnásť minút nedeľa prvého januára
19 00:18;01-01-2023;Je nula hodín a osemnásť minút nedeľa prvého januára
20 00:19;01-01-2023;Je nula hodín a devätnásť minút nedeľa prvého januára
21 00:20;01-01-2023;Je nula hodín a dvadsať minút nedeľa prvého januára
22 00:21;01-01-2023;Je nula hodín a dvadsaťjeden minút nedeľa prvého januára
23 00:22;01-01-2023;Je nula hodín a dvadsaťdva minút nedeľa prvého januára
24 00:23;01-01-2023;Je nula hodín a dvadsaťtri minút nedeľa prvého januára
25 00:24;01-01-2023;Je nula hodín a dvadsaťštyri minút nedeľa prvého januára
26 00:25;01-01-2023;Je nula hodín a dvadsaťpäť minút nedeľa prvého januára
27 00:26;01-01-2023;Je nula hodín a dvadsaťšesť minút nedeľa prvého januára
28 00:27;01-01-2023;Je nula hodín a dvadsaťsedem minút nedeľa prvého januára
29 00:28;01-01-2023;Je nula hodín a dvadsaťosem minút nedeľa prvého januára
30 00:29;01-01-2023;Je nula hodín a dvadsaťdeväť minút nedeľa prvého januára
31 00:30;01-01-2023;Je nula hodín a tridsať minút nedeľa prvého januára
32 00:31;01-01-2023;Je nula hodín a tridsaťjeden minút nedeľa prvého januára
33 00:32;01-01-2023;Je nula hodín a tridsaťdva minút nedeľa prvého januára
34 00:33;01-01-2023;Je nula hodín a tridsaťtri minút nedeľa prvého januára
35 00:34;01-01-2023;Je nula hodín a tridsaťštyri minút nedeľa prvého januára
36 00:35;01-01-2023;Je nula hodín a tridsaťpäť minút nedeľa prvého januára
37 00:36;01-01-2023;Je nula hodín a tridsaťšesť minút nedeľa prvého januára
38 00:37;01-01-2023;Je nula hodín a tridsaťsedem minút nedeľa prvého januára
39 00:38;01-01-2023;Je nula hodín a tridsaťosem minút nedeľa prvého januára
40 00:39;01-01-2023;Je nula hodín a tridsaťdeväť minút nedeľa prvého januára
41 00:40;01-01-2023;Je nula hodín a štyridsať minút nedeľa prvého januára
42 00:41;01-01-2023;Je nula hodín a štyridsaťjeden minút nedeľa prvého januára
43 00:42;01-01-2023;Je nula hodín a štyridsaťdva minút nedeľa prvého januára
44 00:43;01-01-2023;Je nula hodín a štyridsaťtri minút nedeľa prvého januára
45 00:44;01-01-2023;Je nula hodín a štyridsaťštyri minút nedeľa prvého januára
46 00:45;01-01-2023;Je nula hodín a štyridsaťpäť minút nedeľa prvého januára
47 00:46;01-01-2023;Je nula hodín a štyridsaťšesť minút nedeľa prvého januára
48 00:47;01-01-2023;Je nula hodín a štyridsaťsedem minút nedeľa prvého januára
49 00:48;01-01-2023;Je nula hodín a štyridsaťosem minút nedeľa prvého januára
50 00:49;01-01-2023;Je nula hodín a štyridsaťdeväť minút nedeľa prvého januára
51 00:50;01-01-2023;Je nula hodín a päťdesiat minút nedeľa prvého januára
52 00:51;01-01-2023;Je nula hodín a päťdesiatjeden minút nedeľa prvého januára
53 00:52;01-01-2023;Je nula hodín a päťdesiatdva minút nedeľa prvého januára
54 00:53;01-01-2023;Je nula hodín a päťdesiattri minút nedeľa prvého januára
55 00:54;01-01-2023;Je nula hodín a päťdesiatštyri minút nedeľa prvého januára
56 00:55;01-01-2023;Je nula hodín a päťdesiatpäť minút nedeľa prvého januára
57 00:56;01-01-2023;Je nula hodín a päťdesiatšesť minút nedeľa prvého januára
58 00:57;01-01-2023;Je nula hodín a päťdesiatsedem minút nedeľa prvého januára
59 00:58;01-01-2023;Je nula hodín a päťdesiatosem minút nedeľa prvého januára
60 00:59;01-01-2023;Je nula hodín a päťdesiatdeväť minút nedeľa prvého januára
61 00:00;01-01-2023;Je nula hodín a nula minút nedeľa prvého januára
62 01:00;01-01-2023;Je jedna hodina a nula minút nedeľa prvého januára
63 02:00;01-01-2023;Sú dve hodiny a nula minút nedeľa prvého januára
64 03:00;01-01-2023;Sú tri hodiny a nula minút nedeľa prvého januára
65 04:00;01-01-2023;Sú štyri hodiny a nula minút nedeľa prvého januára
66 05:00;01-01-2023;Je päť hodín a nula minút nedeľa prvého januára
67 06:00;01-01-2023;Je šesť hodín a nula minút nedeľa prvého januára
68 07:00;01-01-2023;Je sedem hodín a nula minút nedeľa prvého januára
69 08:00;01-01-2023;Je osem hodín a nula minút nedeľa prvého januára
70 09:00;01-01-2023;Je deväť hodín a nula minút nedeľa prvého januára
71 10:00;01-01-2023;Je desať hodín a nula minút nedeľa prvého januára
72 11:00;01-01-2023;Je jedenásť hodín a nula minút nedeľa prvého januára
73 12:00;01-01-2023;Je dvanásť hodín a nula minút nedeľa prvého januára
74 13:00;01-01-2023;Je trinásť hodín a nula minút nedeľa prvého januára
75 14:00;01-01-2023;Je štrnásť hodín a nula minút nedeľa prvého januára
76 15:00;01-01-2023;Je pätnásť hodín a nula minút nedeľa prvého januára
77 16:00;01-01-2023;Je šestnásť hodín a nula minút nedeľa prvého januára
78 17:00;01-01-2023;Je sedemnásť hodín a nula minút nedeľa prvého januára
79 18:00;01-01-2023;Je osemnásť hodín a nula minút nedeľa prvého januára
80 19:00;01-01-2023;Je devätnásť hodín a nula minút nedeľa prvého januára
81 20:00;01-01-2023;Je dvadsať hodín a nula minút nedeľa prvého januára
82 21:00;01-01-2023;Je dvadsaťjeden hodín a nula minút nedeľa prvého januára
83 22:00;01-01-2023;Je dvadsaťdva hodín a nula minút nedeľa prvého januára
84 23:00;01-01-2023;Je dvadsaťtri hodín a nula minút nedeľa prvého januára
85 00:00;01-01-2023;Je nula hodín a nula minút nedeľa prvého januára
86 00:00;02-01-2023;Je nula hodín a nula minút pondelok druhého januára
87 00:00;03-01-2023;Je nula hodín a nula minút utorok tretieho januára
88 00:00;04-01-2023;Je nula hodín a nula minút streda štvrtého januára
89 00:00;05-01-2023;Je nula hodín a nula minút štvrtok piateho januára
90 00:00;06-01-2023;Je nula hodín a nula minút piatok šiesteho januára
91 00:00;07-01-2023;Je nula hodín a nula minút sobota siedmeho januára
92 00:00;08-01-2023;Je nula hodín a nula minút nedeľa ôsmeho januára
93 00:00;09-01-2023;Je nula hodín a nula minút pondelok deviateho januára
94 00:00;10-01-2023;Je nula hodín a nula minút utorok desiateho januára
95 00:00;11-01-2023;Je nula hodín a nula minút streda jedenásteho januára
96 00:00;12-01-2023;Je nula hodín a nula minút štvrtok dvanásteho januára
97 00:00;13-01-2023;Je nula hodín a nula minút piatok trinásteho januára
98 00:00;14-01-2023;Je nula hodín a nula minút sobota štrnásteho januára
99 00:00;15-01-2023;Je nula hodín a nula minút nedeľa pätnásteho januára
100 00:00;16-01-2023;Je nula hodín a nula minút pondelok šestnásteho januára
101 00:00;17-01-2023;Je nula hodín a nula minút utorok sedemnásteho januára
102 00:00;18-01-2023;Je nula hodín a nula minút streda osemnásteho januára
103 00:00;19-01-2023;Je nula hodín a nula minút štvrtok devätnásteho januára
104 00:00;20-01-2023;Je nula hodín a nula minút piatok dvadsiateho januára
105 00:00;21-01-2023;Je nula hodín a nula minút sobota dvadsiateho prvého januára
106 00:00;22-01-2023;Je nula hodín a nula minút nedeľa dvadsiateho druhého januára
107 00:00;23-01-2023;Je nula hodín a nula minút pondelok dvadsiateho tretieho januára
108 00:00;24-01-2023;Je nula hodín a nula minút utorok dvadsiateho štvrtého januára
109 00:00;25-01-2023;Je nula hodín a nula minút streda dvadsiateho piateho januára
110 00:00;26-01-2023;Je nula hodín a nula minút štvrtok dvadsiateho šiesteho januára
111 00:00;27-01-2023;Je nula hodín a nula minút piatok dvadsiateho siedmeho januára
112 00:00;28-01-2023;Je nula hodín a nula minút sobota dvadsiateho ôsmeho januára
113 00:00;29-01-2023;Je nula hodín a nula minút nedeľa dvadsiateho deviateho januára
114 00:00;30-01-2023;Je nula hodín a nula minút pondelok tridsiateho januára
115 00:00;31-01-2023;Je nula hodín a nula minút utorok tridsiateho prvého januára
116 00:00;01-01-2023;Je nula hodín a nula minút nedeľa prvého januára
117 00:00;01-02-2023;Je nula hodín a nula minút streda prvého februára
118 00:00;01-03-2023;Je nula hodín a nula minút streda prvého marca
119 00:00;01-04-2023;Je nula hodín a nula minút sobota prvého apríla
120 00:00;01-05-2023;Je nula hodín a nula minút pondelok prvého mája
121 00:00;01-06-2023;Je nula hodín a nula minút štvrtok prvého júna
122 00:00;01-07-2023;Je nula hodín a nula minút sobota prvého júla
123 00:00;01-08-2023;Je nula hodín a nula minút utorok prvého augusta
124 00:00;01-09-2023;Je nula hodín a nula minút piatok prvého septembra
125 00:00;01-10-2023;Je nula hodín a nula minút nedeľa prvého októbra
126 00:00;01-11-2023;Je nula hodín a nula minút streda prvého novembra
127 00:00;01-12-2023;Je nula hodín a nula minút piatok prvého decembra
128 14:23;04-02-2023;Je štrnásť hodín a dvadsaťtri minút sobota štvrtého februára
129 03:16;15-03-2023;Sú tri hodiny a šestnásť minút streda pätnásteho marca
130 21:45;27-04-2023;Je dvadsaťjeden hodín a štyridsaťpäť minút štvrtok dvadsiateho siedmeho apríla
131 07:07;09-05-2023;Je sedem hodín a sedem minút utorok deviateho mája
132 00:00;20-06-2023;Je nula hodín a nula minút utorok dvadsiateho júna
133 12:30;11-07-2023;Je dvanásť hodín a tridsať minút utorok jedenásteho júla
134 18:55;22-08-2023;Je osemnásť hodín a päťdesiatpäť minút utorok dvadsiateho druhého augusta
135 23:11;30-09-2023;Je dvadsaťtri hodín a jedenásť minút sobota tridsiateho septembra
136 05:20;01-10-2023;Je päť hodín a dvadsať minút nedeľa prvého októbra
137 16:42;13-11-2023;Je šestnásť hodín a štyridsaťdva minút pondelok trinásteho novembra
138 08:08;04-12-2023;Je osem hodín a osem minút pondelok štvrtého decembra
139 22:22;17-01-2023;Je dvadsaťdva hodín a dvadsaťdva minút utorok sedemnásteho januára
140 11:11;28-02-2023;Je jedenásť hodín a jedenásť minút utorok dvadsiateho ôsmeho februára
141 02:02;19-03-2023;Sú dve hodiny a dve minúty nedeľa devätnásteho marca
142 19:19;05-04-2023;Je devätnásť hodín a devätnásť minút streda piateho apríla
143 06:06;16-05-2023;Je šesť hodín a šesť minút utorok šestnásteho mája
144 13:13;07-06-2023;Je trinásť hodín a trinásť minút streda siedmeho júna
145 17:17;18-07-2023;Je sedemnásť hodín a sedemnásť minút utorok osemnásteho júla
146 09:09;29-08-2023;Je deväť hodín a deväť minút utorok dvadsiateho deviateho augusta
147 15:15;10-09-2023;Je pätnásť hodín a pätnásť minút nedeľa desiateho septembra
148 10:25;07-03-2023;Je desať hodín a dvadsaťpäť minút utorok siedmeho marca
149 22:40;14-06-2023;Je dvadsaťdva hodín a štyridsať minút streda štrnásteho júna
150 03:55;21-09-2023;Sú tri hodiny a päťdesiatpäť minút štvrtok dvadsiateho prvého septembra
151 15:10;28-12-2023;Je pätnásť hodín a desať minút štvrtok dvadsiateho ôsmeho decembra
152 06:05;02-02-2023;Je šesť hodín a päť minút štvrtok druhého februára
153 18:15;16-05-2023;Je osemnásť hodín a pätnásť minút utorok šestnásteho mája
154 07:20;25-07-2023;Je sedem hodín a dvadsať minút utorok dvadsiateho piateho júla
155 19:30;30-10-2023;Je devätnásť hodín a tridsať minút pondelok tridsiateho októbra
156 08:45;11-01-2023;Je osem hodín a štyridsaťpäť minút streda jedenásteho januára
157 20:50;17-04-2023;Je dvadsať hodín a päťdesiat minút pondelok sedemnásteho apríla
158 01:35;23-08-2023;Je jedna hodina a tridsaťpäť minút streda dvadsiateho tretieho augusta
159 13:25;04-11-2023;Je trinásť hodín a dvadsaťpäť minút sobota štvrtého novembra
160 02:10;09-03-2023;Sú dve hodiny a desať minút štvrtok deviateho marca
161 14:55;15-07-2023;Je štrnásť hodín a päťdesiatpäť minút sobota pätnásteho júla
162 05:40;24-10-2023;Je päť hodín a štyridsať minút utorok dvadsiateho štvrtého októbra
163 17:50;06-02-2023;Je sedemnásť hodín a päťdesiat minút pondelok šiesteho februára
164 04:30;12-05-2023;Sú štyri hodiny a tridsať minút piatok dvanásteho mája
165 16:45;27-09-2023;Je šestnásť hodín a štyridsaťpäť minút streda dvadsiateho siedmeho septembra
166 09:15;31-12-2023;Je deväť hodín a pätnásť minút nedeľa tridsiateho prvého decembra
167 21:05;08-08-2023;Je dvadsaťjeden hodín a päť minút utorok ôsmeho augusta

View File

@@ -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()