Simplify code for Critical Mass
This commit is contained in:
		
							parent
							
								
									aaa3d71665
								
							
						
					
					
						commit
						f866a38add
					
				| 
						 | 
				
			
			@ -21,6 +21,7 @@ import pytz
 | 
			
		|||
import requests
 | 
			
		||||
import yaml
 | 
			
		||||
from dateutil.easter import easter
 | 
			
		||||
from dateutil.relativedelta import FR, relativedelta
 | 
			
		||||
 | 
			
		||||
from agenda import thespacedevs
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -307,44 +308,21 @@ def get_us_holidays(input_date: date) -> list[Event]:
 | 
			
		|||
    ]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def critical_mass(start_date: date) -> list[Event]:
 | 
			
		||||
    """
 | 
			
		||||
    Return a list of the next 12 dates of the last Friday of the month on or after a given date.
 | 
			
		||||
 | 
			
		||||
    :param start_date: The date from which to start looking for last Fridays.
 | 
			
		||||
    :type start_date: date
 | 
			
		||||
    :return: List of next 12 last Fridays on or after the start_date.
 | 
			
		||||
    :rtype: List[date]
 | 
			
		||||
    """
 | 
			
		||||
def critical_mass(start_date: date, limit: int = 12) -> list[Event]:
 | 
			
		||||
    """Future dates for Critical Mass."""
 | 
			
		||||
    events: list[Event] = []
 | 
			
		||||
    current_date = start_date
 | 
			
		||||
 | 
			
		||||
    # Set current month and year based on the start_date
 | 
			
		||||
    current_month = start_date.month
 | 
			
		||||
    current_year = start_date.year
 | 
			
		||||
 | 
			
		||||
    for _ in range(12):
 | 
			
		||||
        # Calculate the last day of the current month
 | 
			
		||||
        if current_month == 12:
 | 
			
		||||
            last_day_of_month = date(current_year + 1, 1, 1) - timedelta(days=1)
 | 
			
		||||
        else:
 | 
			
		||||
            last_day_of_month = date(current_year, current_month + 1, 1) - timedelta(
 | 
			
		||||
                days=1
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        # Find the last Friday of the current month
 | 
			
		||||
        last_friday = last_day_of_month
 | 
			
		||||
        while last_friday.weekday() != 4:  # Monday is 0 and Sunday is 6
 | 
			
		||||
            last_friday -= timedelta(days=1)
 | 
			
		||||
    for _ in range(limit):
 | 
			
		||||
        # Calculate the last Friday of the current month
 | 
			
		||||
        last_friday = current_date + relativedelta(day=31, weekday=FR(-1))
 | 
			
		||||
 | 
			
		||||
        # Include it in the list only if it's on or after the start_date
 | 
			
		||||
        if last_friday >= start_date:
 | 
			
		||||
            events.append(Event(name="critical_mass", date=last_friday))
 | 
			
		||||
 | 
			
		||||
        # Move to the next month
 | 
			
		||||
        current_month += 1
 | 
			
		||||
        if current_month == 13:
 | 
			
		||||
            current_month = 1
 | 
			
		||||
            current_year += 1
 | 
			
		||||
        current_date += relativedelta(months=1)
 | 
			
		||||
 | 
			
		||||
    return events
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue