Source code for ecstask.productavailability.utilities.overlapping_util
[docs]def get_masking_for_overlapping(masking_data):
"""
This method is used to get updated masking if new masking overlapped with existing masking
:param masking_data: Override Periods Details
"""
override_periods = masking_data.get("overridePeriods")
new_overrides = []
from_date = ""
to_date = ""
override_periods = sorted(override_periods, key=lambda i: i["from"])
if len(override_periods) > 1:
for idx, override in enumerate(override_periods):
is_delete = False
override_from_date = override.get("from")
override_to_date = override.get("to")
is_delete, from_date, to_date = check_mask_overlapping(is_delete, idx, override, from_date, to_date)
if not is_delete:
if from_date < override_from_date and to_date < override_to_date:
new_overrides.append(override)
new_overrides.append({
"from": from_date,
"to": to_date,
"available": False
})
masking_data["overridePeriods"] = new_overrides
return masking_data
[docs]def check_mask_overlapping(is_delete, idx, override, from_date, to_date):
""" This method is used to check mask overlapping & reduce Cognitive and Cyclomatic Complexity """
override_from_date = override.get("from")
override_to_date = override.get("to")
if idx == 0:
from_date = override_from_date
to_date = override_to_date
is_delete = True
else:
if override_from_date < to_date < override_to_date:
to_date = override_to_date
is_delete = True
if override_from_date < from_date:
from_date = override_from_date
is_delete = True
return is_delete, from_date, to_date
[docs]def get_overlapping_dates(existing_mask_from, existing_mask_until, new_mask_from, new_mask_until):
from_date = existing_mask_from
to_date = existing_mask_until
if new_mask_from <= to_date <= new_mask_until:
to_date = new_mask_until
if new_mask_from < from_date:
from_date = new_mask_from
return {"from": from_date,
"to": to_date}