summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Geier <geier@lostpackets.de>2017-03-10 18:10:50 +0100
committerChristian Geier <geier@lostpackets.de>2017-03-10 20:17:33 +0100
commit7dd25535d74934f13d23c486c8b950864aafd8c2 (patch)
treeb3d0693448945bd1051b5a0a9709c6afca59d82b
parentdce6432c21418b9a335e117926fe28ee9d711c6a (diff)
NEW: get_weekday_occurrence().
-rw-r--r--khal/utils.py11
-rw-r--r--tests/utils_test.py22
2 files changed, 33 insertions, 0 deletions
diff --git a/khal/utils.py b/khal/utils.py
index eda364ab..11758c48 100644
--- a/khal/utils.py
+++ b/khal/utils.py
@@ -736,3 +736,14 @@ def color_wrap(text, width=70):
if num != len(lines):
lines[num + 1] = sgr + lines[num + 1]
return lines
+
+
+def get_weekday_occurrence(day):
+ """Calculate how often this weekday has already occurred in a given month.
+
+ :type day: datetime.date
+ :returns: weekday (0=Monday, ..., 6=Sunday), occurrence
+ :rtype: tuple(int, int)
+ """
+ xthday = 1 + (day.day - 1) // 7
+ return day.weekday(), xthday
diff --git a/tests/utils_test.py b/tests/utils_test.py
index 296253e1..711277ac 100644
--- a/tests/utils_test.py
+++ b/tests/utils_test.py
@@ -9,6 +9,7 @@ from freezegun import freeze_time
from khal.utils import guessdatetimefstr, guesstimedeltafstr, new_event, eventinfofstr
from khal.utils import timedelta2str, guessrangefstr, weekdaypstr, construct_daynames
+from khal.utils import get_weekday_occurrence
from khal import utils
from khal.exceptions import FatalError
import pytest
@@ -670,3 +671,24 @@ def test_color_wrap_256():
]
assert utils.color_wrap(text, 30) == expected
+
+
+def test_get_weekday_occurrence():
+ assert get_weekday_occurrence(datetime(2017, 3, 1)) == (2, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 2)) == (3, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 3)) == (4, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 4)) == (5, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 5)) == (6, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 6)) == (0, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 7)) == (1, 1)
+ assert get_weekday_occurrence(datetime(2017, 3, 8)) == (2, 2)
+ assert get_weekday_occurrence(datetime(2017, 3, 9)) == (3, 2)
+ assert get_weekday_occurrence(datetime(2017, 3, 10)) == (4, 2)
+
+ assert get_weekday_occurrence(datetime(2017, 3, 31)) == (4, 5)
+
+ assert get_weekday_occurrence(date(2017, 5, 1)) == (0, 1)
+ assert get_weekday_occurrence(date(2017, 5, 7)) == (6, 1)
+ assert get_weekday_occurrence(date(2017, 5, 8)) == (0, 2)
+ assert get_weekday_occurrence(date(2017, 5, 28)) == (6, 4)
+ assert get_weekday_occurrence(date(2017, 5, 29)) == (0, 5)