def validate_or_raise(att): start = att['attached'] if 'removed' in att and att['removed']: end = att['removed'] else: end = model_utils.current_time_as_lajistore_timestamp() if model_utils.timestamp_to_datetime(end) < model_utils.timestamp_to_datetime(start): raise ValueError ind_atts = get_attachments_of_individual_during_time(att['individualID'], start, end) if 'id' in att and att['id']: ind_atts = [a for a in ind_atts if a['id'] != att['id']] if len(ind_atts) != 0: raise AlreadyHasDevice([a['deviceID'] for a in ind_atts]) dev_atts = get_attachments_of_device_during_time(att['deviceID'], start, end) if 'id' in att and att['id']: dev_atts = [a for a in dev_atts if a['id'] != att['id']] if len(dev_atts) != 0: raise DeviceAlreadyAttached([a['individualID'] for a in dev_atts]) return True
def _filter_attachments_by_timerange(attachments, start, end): ret = [] for att in attachments: att_start = att['attached'] if 'removed' in att and att['removed']: att_end = att['removed'] else: att_end = model_utils.current_time_as_lajistore_timestamp() if model_utils.timestamp_timeranges_overlap((start, end), (att_start, att_end)): ret.append(att) return ret