Пример #1
0
def process_exception_list(temp_exceptions):
    new_temp_exceptions = [[] for _ in range(len(temp_exceptions))]

    for i in range(0, len(temp_exceptions)):
        print("--new i---")
        for j in range(0, len(temp_exceptions[i])):

            if j == 0:
                new_temp_exceptions[i].append(temp_exceptions[i][j])

            else:
                no_intersection = True
                for k in range(0, len(new_temp_exceptions[i])):

                    date_range1 = DateTimeRange(
                        str(temp_exceptions[i][j][0:19]),
                        str(temp_exceptions[i][j][22:41]))
                    date_range2 = DateTimeRange(
                        str(new_temp_exceptions[i][k][0:19]),
                        str(new_temp_exceptions[i][k][22:41]))

                    if date_range1.is_intersection(date_range2):
                        new_range = date_range1.intersection(date_range2)
                        new_temp_exceptions[i][k] = str(new_range).replace(
                            "T", " ")
                        no_intersection = False
                if no_intersection:
                    new_temp_exceptions[i].append(temp_exceptions[i][j])

    for i in range(0, len(new_temp_exceptions)):
        for j in range(0, len(new_temp_exceptions[i])):
            if str(new_temp_exceptions[i][j][0:19]) == str(
                    new_temp_exceptions[i][j][22:41]):
                new_temp_exceptions[i].remove(new_temp_exceptions[i][j])
    return new_temp_exceptions
Пример #2
0
def check_if_rent_is_possible(centre_id,
                              gear_id,
                              rent_amount,
                              rent_start,
                              rent_end,
                              max_rent,
                              session=None):
    rent_start = datetime.datetime.strptime(rent_start,
                                            '%Y-%m-%dT%H:%M:%S.%fZ')
    rent_end = datetime.datetime.strptime(rent_end, '%Y-%m-%dT%H:%M:%S.%fZ')
    all_rents = session.query(GearRental).filter_by(
        centre_id=centre_id,
        gear_id=gear_id).filter(GearRental.rent_end > rent_start,
                                GearRental.rent_start < rent_end,
                                GearRental.rent_status != -1).all()
    iter_start = rent_start
    while iter_start <= rent_end:
        total_number_of_rented_gear = 0
        iter_start_with_delta = iter_start + datetime.timedelta(minutes=15)
        timerange = DateTimeRange(iter_start, iter_start_with_delta)
        for rent in all_rents:
            rent_time_range = DateTimeRange(rent.rent_start, rent.rent_end)
            if timerange.intersection(rent_time_range):
                total_number_of_rented_gear += rent.rent_amount
        if total_number_of_rented_gear + rent_amount > max_rent:
            return False
        iter_start = iter_start_with_delta
    return True
Пример #3
0
def get_common_intervals(d_range_1, d_range_2):
    """
    Get the interval of start_date and end_date.
    """

    dtr1 = DateTimeRange(d_range_1['start_date'], d_range_1['end_date'])
    dtr2 = DateTimeRange(d_range_2['start_date'], d_range_2['end_date'])

    dtr_common = dtr1.intersection(dtr2)

    if dtr_common.start_datetime and dtr_common.end_datetime:
        return {'start_date': dtr_common.start_datetime, 'end_date': dtr_common.end_datetime}
    else:
        return None
Пример #4
0
        .all()
        )

for qq in q:

    try:
        # Set up date ranges
        dur = qq.Event_Duration
        act_range = DateTimeRange(qq.CreatedAt, qq.UpdatedAt)
        std_range = DateTimeRange(
            datetime(qq.CreatedAt.year, qq.CreatedAt.month, qq.CreatedAt.day) + timedelta(hours=6),
            datetime(qq.CreatedAt.year, qq.CreatedAt.month, qq.CreatedAt.day) + timedelta(hours=22))

        # Split STANDARD and GRAVEYARD
        try:
            std = act_range.intersection(std_range).timedelta.total_seconds()
            grv = dur - std
            if grv == 1:
                grv -= 1
                std += 1
            if std + grv != dur:
                if std > grv:
                    std += dur - std - grv
                else:
                    grv += dur - grv - std
        except:
            std = 0
            grv = dur

        #pprint.pprint([std,grv,dur])