Untitled

 avatar
unknown
plain_text
11 days ago
2.9 kB
3
Indexable
import time
import random

# wages - rate*hour*<num of orders currently holding>

WAGE_PER_HOUR = 10


def retry(max_attempts=3, delay=1):
    """Retry decorator to attempt function execution multiple times."""
    def decorator(func):
        # @wraps(func)
        def wrapper(*args, **kwargs):
            for attempt in range(max_attempts):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    print(f"Attempt {attempt + 1} failed: {e}")
                    time.sleep(delay)
            print(f"Failed to execute {func.__name__} after {max_attempts} attempts.")
            return []  # Return empty list if all retries fail
        return wrapper
    return decorator


def retry1(max_attempts = 4, delay =2):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for attempt in range(max_attempts):
                try:
                    return func(*args, **kwargs)
                except Exception as e:
                    print(f"Attempt {attempt} failed: Error {e}")
                    time.sleep(delay)
            return []
        return wrapper
    return decorator

@retry1(max_attempts=3, delay=1)
def get_dasher_orders():
    if random.random() < 0.9:  # Simulate a failure 30% of the time
        raise Exception("Failed to fetch orders")

    times = ["order1 Pickup 1",
    "order2 Pickup 2",
    "order1 Deliver 5",
    "order3 Pickup 7",
    "order2 Deliver 12",
    "order3 Deliver 20"]
    
    return times

class PaymentCalculator:
    def __init__(self, wage_rate_per_hour):
        self.wage_rate_per_hour = wage_rate_per_hour
        
    def is_rush_hour(self, cur_time, rush_hours):
        if not rush_hours:
            return False
        for start, end in rush_hours:
            if start <= cur_time <= end:
                return True

        return False

    def get_dasher_wage(self, dasher_id, rush_hours=None):
        events = get_dasher_orders()
        total_wages = 0
        active_orders = {}
        for event in events:
            order_id, event_type, time = event.split(" ")
            if event_type == "Pickup":
                active_orders[order_id] = int(time)
            elif event_type == "Deliver":
                pickup_time = active_orders[order_id]
                elapsed_time_in_hours = (int(time) - pickup_time) / 60
                wage = self.wage_rate_per_hour * (2 if self.is_rush_hour(time, rush_hours) else 1)
                price =  wage * elapsed_time_in_hours * len(active_orders)
                total_wages += price
                del active_orders[order_id]

            
        return round(total_wages, 2)



calculator = PaymentCalculator(10)
print(calculator.get_dasher_wage(6))

print("SDF  SDF ".split())
Leave a Comment