added unit test, updated Readme and picture
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
__pycache__
|
||||||
111
README.md
111
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
|
||||||
|
|
||||||
|
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
|
||||||
|

|
||||||
|
|
||||||
|
- 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`
|
||||||
BIN
assets/kukuc-clock-schema.png
Normal file
BIN
assets/kukuc-clock-schema.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@@ -3,16 +3,15 @@ import sys
|
|||||||
import time
|
import time
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import subprocess
|
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":
|
if len(sys.argv) > 1 and sys.argv[1] == "test":
|
||||||
import dummygpio as GPIO
|
import lib.dummygpio as GPIO
|
||||||
else:
|
else:
|
||||||
import RPi.GPIO as GPIO
|
import RPi.GPIO as GPIO
|
||||||
|
|
||||||
BUTTON_TIMEOUT = (
|
TTS_API_URL = "https://tts.virtonline.eu/api/tts"
|
||||||
30 # button release timeout terminates playing
|
BUTTON_TIMEOUT = 30 # button release timeout terminates playing
|
||||||
)
|
|
||||||
PIN = 27 # listen to changes on this GPIO pin
|
PIN = 27 # listen to changes on this GPIO pin
|
||||||
GPIO.setmode(GPIO.BCM) # use BCM pin layout
|
GPIO.setmode(GPIO.BCM) # use BCM pin layout
|
||||||
GPIO.setwarnings(False)
|
GPIO.setwarnings(False)
|
||||||
@@ -56,11 +55,16 @@ def generate_presny_cas():
|
|||||||
username, password = get_credentials()
|
username, password = get_credentials()
|
||||||
subprocess.call(
|
subprocess.call(
|
||||||
[
|
[
|
||||||
"curl", "--silent", "-u", f"{username}:{password}",
|
"curl",
|
||||||
|
"--silent",
|
||||||
|
"-u",
|
||||||
|
f"{username}:{password}",
|
||||||
"--get",
|
"--get",
|
||||||
"--data-urlencode", f"text={text}",
|
"--data-urlencode",
|
||||||
"https://tts.virtonline.eu/api/tts",
|
f"text={text}",
|
||||||
"--output", "presny_cas.wav",
|
TTS_API_URL,
|
||||||
|
"--output",
|
||||||
|
"presny_cas.wav",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
print("Generated presny_cas.wav")
|
print("Generated presny_cas.wav")
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ LOW = False
|
|||||||
IN = 0
|
IN = 0
|
||||||
PUD_UP = None
|
PUD_UP = None
|
||||||
DUMMY_FALLING_EDGE = "FALLING"
|
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
|
BCM = 0
|
||||||
FALLING = None
|
FALLING = None
|
||||||
pull_up_down = {PUD_UP: DUMMY_FALLING_EDGE}
|
pull_up_down = {PUD_UP: DUMMY_FALLING_EDGE}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
hodiny_slovnik = {
|
hodiny_slovnik = {
|
||||||
0: "dvanásť",
|
0: "nula",
|
||||||
1: "jedna",
|
1: "jedna",
|
||||||
2: "dve",
|
2: "dve",
|
||||||
3: "tri",
|
3: "tri",
|
||||||
@@ -14,18 +14,17 @@ hodiny_slovnik = {
|
|||||||
10: "desať",
|
10: "desať",
|
||||||
11: "jedenásť",
|
11: "jedenásť",
|
||||||
12: "dvanásť",
|
12: "dvanásť",
|
||||||
13: "jedna",
|
13: "trinásť",
|
||||||
14: "dve",
|
14: "štrnásť",
|
||||||
15: "tri",
|
15: "pätnásť",
|
||||||
16: "štyri",
|
16: "šestnásť",
|
||||||
17: "päť",
|
17: "sedemnásť",
|
||||||
18: "šesť",
|
18: "osemnásť",
|
||||||
19: "sedem",
|
19: "devätnásť",
|
||||||
20: "osem",
|
20: "dvadsať",
|
||||||
21: "deväť",
|
21: "dvadsaťjeden",
|
||||||
22: "desať",
|
22: "dvadsaťdva",
|
||||||
23: "jedenásť",
|
23: "dvadsaťtri",
|
||||||
24: "dvanásť",
|
|
||||||
}
|
}
|
||||||
|
|
||||||
minuty_slovnik = {
|
minuty_slovnik = {
|
||||||
@@ -50,8 +49,8 @@ minuty_slovnik = {
|
|||||||
18: "osemnásť",
|
18: "osemnásť",
|
||||||
19: "devätnásť",
|
19: "devätnásť",
|
||||||
20: "dvadsať",
|
20: "dvadsať",
|
||||||
21: "dvadsať jedna",
|
21: "dvadsaťjeden",
|
||||||
22: "dvadsať dve",
|
22: "dvadsaťdva",
|
||||||
23: "dvadsaťtri",
|
23: "dvadsaťtri",
|
||||||
24: "dvadsaťštyri",
|
24: "dvadsaťštyri",
|
||||||
25: "dvadsaťpäť",
|
25: "dvadsaťpäť",
|
||||||
@@ -60,8 +59,8 @@ minuty_slovnik = {
|
|||||||
28: "dvadsaťosem",
|
28: "dvadsaťosem",
|
||||||
29: "dvadsaťdeväť",
|
29: "dvadsaťdeväť",
|
||||||
30: "tridsať",
|
30: "tridsať",
|
||||||
31: "tridsať jedna",
|
31: "tridsaťjeden",
|
||||||
32: "tridsať dve",
|
32: "tridsaťdva",
|
||||||
33: "tridsaťtri",
|
33: "tridsaťtri",
|
||||||
34: "tridsaťštyri",
|
34: "tridsaťštyri",
|
||||||
35: "tridsaťpäť",
|
35: "tridsaťpäť",
|
||||||
@@ -70,8 +69,8 @@ minuty_slovnik = {
|
|||||||
38: "tridsaťosem",
|
38: "tridsaťosem",
|
||||||
39: "tridsaťdeväť",
|
39: "tridsaťdeväť",
|
||||||
40: "štyridsať",
|
40: "štyridsať",
|
||||||
41: "štyridsať jedna",
|
41: "štyridsaťjeden",
|
||||||
42: "štyridsať dve",
|
42: "štyridsaťdva",
|
||||||
43: "štyridsaťtri",
|
43: "štyridsaťtri",
|
||||||
44: "štyridsaťštyri",
|
44: "štyridsaťštyri",
|
||||||
45: "štyridsaťpäť",
|
45: "štyridsaťpäť",
|
||||||
@@ -80,8 +79,8 @@ minuty_slovnik = {
|
|||||||
48: "štyridsaťosem",
|
48: "štyridsaťosem",
|
||||||
49: "štyridsaťdeväť",
|
49: "štyridsaťdeväť",
|
||||||
50: "päťdesiat",
|
50: "päťdesiat",
|
||||||
51: "päťdesiat jedna",
|
51: "päťdesiatjeden",
|
||||||
52: "päťdesiat dve",
|
52: "päťdesiatdva",
|
||||||
53: "päťdesiattri",
|
53: "päťdesiattri",
|
||||||
54: "päťdesiatštyri",
|
54: "päťdesiatštyri",
|
||||||
55: "päťdesiatpäť",
|
55: "päťdesiatpäť",
|
||||||
@@ -150,28 +149,41 @@ cisla = {
|
|||||||
31: "tridsiateho prvého",
|
31: "tridsiateho prvého",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def format_hodiny(hodina):
|
def format_hodiny(hodina):
|
||||||
if hodina == 'jedna':
|
if hodina == "jedna":
|
||||||
return 'hodina'
|
return "hodina"
|
||||||
elif hodina.endswith('dve') or hodina.endswith('tri') or hodina.endswith('štyri'):
|
elif hodina == "dve" or hodina == "tri" or hodina == "štyri":
|
||||||
return 'hodiny'
|
return "hodiny"
|
||||||
else:
|
else:
|
||||||
return 'hodín'
|
return "hodín"
|
||||||
|
|
||||||
|
|
||||||
def format_minuty(minuta):
|
def format_minuty(minuta):
|
||||||
if minuta == 'jedna':
|
if minuta == "jedna":
|
||||||
return 'minúta'
|
return "minúta"
|
||||||
elif minuta == 'dve' or minuta == 'tri' or minuta == 'štyri':
|
elif minuta == "dve" or minuta == "tri" or minuta == "štyri":
|
||||||
return 'minúty'
|
return "minúty"
|
||||||
else:
|
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
|
# Zobrazenie času a dátumu
|
||||||
def get_datetime_as_slovak_sentence(cas):
|
def get_datetime_as_slovak_sentence(cas):
|
||||||
hodiny = hodiny_slovnik[cas.hour % 12]
|
hodiny = hodiny_slovnik[cas.hour]
|
||||||
minuty = minuty_slovnik[cas.minute]
|
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__":
|
if __name__ == "__main__":
|
||||||
print(get_datetime_as_slovak_sentence(datetime.now()))
|
print(get_datetime_as_slovak_sentence(datetime.now()))
|
||||||
175
tests/test_data.csv
Normal file
175
tests/test_data.csv
Normal 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
|
||||||
|
|
||||||
|
34
tests/test_slovak_datetime_formatter.py
Normal file
34
tests/test_slovak_datetime_formatter.py
Normal 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()
|
||||||
Reference in New Issue
Block a user