an django application to save the timeline information of an object.
from django_time_block.utils import add_time_block
def format_datetime(date_str: str) -> datetime.datetime:
"""formate datetime string format"""
return datetime.datetime.strptime(
date_str,
"%Y-%m-%d %H:%M:%S",
).astimezone(
timezone.get_current_timezone(),
)
# record alice's work time according to her clock in record
object_id = "work_time_user_alice"
add_time_block( # a timeblock record will be created
object_id=object_id,
start_datetime=format_datetime("2023-09-01 00:00:00"),
end_datetime=format_datetime("2023-09-05 00:00:00"),
)
all_include( # alice didn't work from 2023-09-05 00:00 to 2023-09-06 00:00
object_id,
format_datetime("2023-09-02 00:00:00"),
format_datetime("2023-09-06 00:00:00"),
) # False
TimeBlock.objects.filter(object_id=object_id).count() # 1
add_time_block( # the second record will merged int the first one
object_id=object_id,
start_datetime=format_datetime("2023-09-01 00:00:00"),
end_datetime=format_datetime("2023-09-05 00:00:00"),
)
TimeBlock.objects.filter(object_id=object_id).count() # 1
all_include(
object_id,
format_datetime("2023-09-02 00:00:00"),
format_datetime("2023-09-06 00:00:00"),
) # True
-
For example: You have to handle a lot of data from 2000-01-01 to 2023-11-11.
-
First day, you may handle the data from 2023-10-01 to 2023-11-11
-
Next day, you may have handled the data from 2023-09-01 to 2023-09-07: the results look like this:
you will record:
2023-09-01~2023-09-07, 2023-10-01~2023-11-11
- the third day, you handled the data from 2023-09-06 to 2023-10-02 then, the records will merge into one:
this two records will be merged:
2023-09-01 ~ 2023-11-11
-
-
add_time_block
-
all_include
check if a duration is all included -
find_min_uninclude
find the earliest datetime that was not included -
find_max_uninclude
find the latest datetime that was not included -
find_uninclude_blocks
find all the uninclude durations
Table of Contents
pip install django-time-block
django-time-block
is distributed under the terms of the MIT license.