monitor-planning/app/workingHours.py

69 lines
2.4 KiB
Python

from datetime import time, datetime, timedelta
def is_working_hours(date = datetime.now()):
if date.weekday() >= 5:
print("Its the weekend")
return False
start = time(8, 0, 0)
end = time(18, 0, 0)
current_time = date.time()
print(f"Current {current_time}")
return start <= current_time <= end
def potential_midday_upload(date = datetime.now()):
if date.weekday() >= 5:
print("Its the weekend")
return False
midday_upload_time = time(14, 0, 0)
current_time = date.time()
print(f"Current {current_time} : {midday_upload_time}")
return midday_upload_time <= current_time
def next_working_hour(date = datetime.now()):
if is_working_hours(date):
print("Its already working hour")
return date
potential_start = date.replace(hour=8, minute=0, second=0, microsecond=0)
if date > potential_start:
potential_start += timedelta(days=1)
while not is_working_hours(potential_start):
potential_start += timedelta(days=1)
return potential_start
if __name__ == '__main__':
# Test Times
assert is_working_hours(datetime(2025, 6, 20, 16,54, 0))
assert is_working_hours(datetime(2025, 6, 20, 18,54, 0))
assert is_working_hours(datetime(2025, 6, 20, 19,0, 0))
assert not is_working_hours(datetime(2025, 6, 20, 19,1, 0))
assert is_working_hours(datetime(2025, 6, 20, 8,0, 0))
assert not is_working_hours(datetime(2025, 6, 20, 7,59, 59))
# Test Week Day
assert not is_working_hours(datetime(2025, 6, 21, 16,54, 0))
assert not is_working_hours(datetime(2025, 6, 21, 18,54, 0))
assert not is_working_hours(datetime(2025, 6, 21, 19,0, 0))
assert not is_working_hours(datetime(2025, 6, 21, 19,1, 0))
assert not is_working_hours(datetime(2025, 6, 21, 8,0, 0))
assert not is_working_hours(datetime(2025, 6, 21, 7,59, 59))
print(next_working_hour(datetime(2025, 6, 20, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 21, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 22, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 23, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 24, 7,59, 59)))
print(next_working_hour(datetime(2025, 6, 19, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 20, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 21, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 22, 19,1, 0)))
print(next_working_hour(datetime(2025, 6, 23, 19,1, 0)))