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}