From e93f0e64734540fbb5a49138f9e344e87f9f6de4 Mon Sep 17 00:00:00 2001 From: sugoidogo Date: Tue, 29 Jul 2025 10:35:33 -0700 Subject: [PATCH] add aspect transits --- astrolobot.py | 163 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 156 insertions(+), 7 deletions(-) diff --git a/astrolobot.py b/astrolobot.py index 0c145d0..efffcac 100755 --- a/astrolobot.py +++ b/astrolobot.py @@ -58,6 +58,8 @@ def load_settings(): 'transits':'!transits', 'major_aspects':'!aspects major', 'minor_aspects':'!aspects minor', + 'major_aspect_transits':'!aspects major transits', + 'minor_aspect_transits':'!aspects minor transits', } def get_zodiac(angle): @@ -114,7 +116,7 @@ def get_positions(date=today()): return positions -def get_list_formatted(in_list,isare=True): +def get_list_formatted(in_list,isare=False): match len(in_list): case 0: output='Nothing' @@ -144,7 +146,7 @@ def get_positions_formatted(date=today()): retrograde_planets.append(name) position_strings.append(name+' is in '+position['zodiac']) - positions_formatted=get_list_formatted(retrograde_planets)+'in Retrograde\n' + positions_formatted=get_list_formatted(retrograde_planets,True)+'in Retrograde\n' positions_formatted+=', '.join(position_strings[0:2])+'\n' positions_formatted+=', '.join(position_strings[2:5])+'\n' @@ -179,9 +181,10 @@ def get_transits(date=today(), maxdays=28): return transits +date_format='%b %d' + @cache def get_transits_formatted(date=today(), maxdays=28): - date_format='%b %d' transits_formatted='' for name,transit in get_transits(date, maxdays).items(): @@ -246,11 +249,143 @@ def get_aspects_formatted(date=today(),minor=False): aspects_formatted+=planet+' is in ' aspects_list=[] for aspect_name,aspect_planets in aspects.items(): - aspects_list.append(aspect_name+' with '+get_list_formatted(aspect_planets,False)) - aspects_formatted+=get_list_formatted(aspects_list,False)+'\n' + aspects_list.append(aspect_name+' with '+get_list_formatted(aspect_planets)) + aspects_formatted+=get_list_formatted(aspects_list)+'\n' return aspects_formatted +@cache +def get_aspect_transits(date=today(),minor=False,maxdays=28): + date_now=today() + timestamp_now=date_now.timestamp() + aspects_now=get_aspects(date_now,minor) + pre_transits={} + days=0 + + def aspects_contains(aspects,planet_a,aspect=None,planet_b=None): + if planet_a not in aspects: + return False + elif aspect and aspect not in aspects[planet_a]: + return False + elif aspect and planet_b and planet_b not in aspects[planet_a][aspect]: + return False + return True + + def ensure_pre_path(planet_a,aspect=None): + if planet_a not in pre_transits: + pre_transits[planet_a]={} + if aspect and aspect not in pre_transits[planet_a]: + pre_transits[planet_a][aspect]={} + + def pre_planet_b(planet_a,aspect,planet_b,date_future,direction): + ensure_pre_path(planet_a,aspect) + pre_transits[planet_a][aspect][planet_b]={ + 'date':date_future, + 'direction':direction + } + + def pre_aspect(planet_a,aspect,planets,date_future,direction): + ensure_pre_path(planet_a) + pre_transits[planet_a][aspect]={} + for planet_b in planets: + pre_planet_b(planet_a,aspect,planet_b,date_future,direction) + + def pre_planet_a(planet_a,aspects,date_future,direction): + pre_transits[planet_a]={} + for aspect,planets in aspects.items(): + pre_aspect(planet_a,aspect,planets,date_future,direction) + + while days