From deb05970004aab73bf78f20ee1f4f63aec7a5c9b Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 23 Feb 2022 13:04:29 +1100 Subject: [PATCH] Fix infinite loops: accommodate invalid calendars with no working times in sequence utility --- src/ifcopenshell-python/ifcopenshell/util/sequence.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/sequence.py b/src/ifcopenshell-python/ifcopenshell/util/sequence.py index 902bb99b97..e9235faeb8 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/sequence.py +++ b/src/ifcopenshell-python/ifcopenshell/util/sequence.py @@ -38,7 +38,7 @@ def count_working_days(start, finish, calendar): current_date = datetime.date(start.year, start.month, start.day) finish_date = datetime.date(finish.year, finish.month, finish.day) while current_date < finish_date: - if is_working_day(current_date, calendar): + if calendar and calendar.WorkingTimes and is_working_day(current_date, calendar): result += 1 current_date += datetime.timedelta(days=1) return result @@ -49,7 +49,7 @@ def get_finish_date(start, duration, duration_type, calendar): abs_duration = abs(duration.days) date_offset = datetime.timedelta(days=1 if duration.days > 0 else -1) while abs_duration > 0: - if duration_type == "ELAPSEDTIME" or not calendar: + if duration_type == "ELAPSEDTIME" or not calendar or not calendar.WorkingTimes: abs_duration -= 1 elif ifcopenshell.util.sequence.is_working_day(current_date, calendar): abs_duration -= 1 @@ -63,7 +63,7 @@ def get_finish_date(start, duration, duration_type, calendar): def get_soonest_working_day(start, duration_type, calendar): - if duration_type == "ELAPSEDTIME" or not calendar: + if duration_type == "ELAPSEDTIME" or not calendar or not calendar.WorkingTimes: return start while not is_working_day(start, calendar): start += datetime.timedelta(days=1) @@ -71,7 +71,7 @@ def get_soonest_working_day(start, duration_type, calendar): def get_recent_working_day(start, duration_type, calendar): - if duration_type == "ELAPSEDTIME" or not calendar: + if duration_type == "ELAPSEDTIME" or not calendar or not calendar.WorkingTimes: return start while not is_working_day(start, calendar): start -= datetime.timedelta(days=1)