2626
2727from .model import Position , AsterEphemerides , MoonPhase , Object , ASTERS
2828from .dateutil import translate_to_timezone , normalize_datetime
29- from .core import get_skf_objects , get_timescale , get_iau2000b
29+ from .core import (
30+ get_skf_objects ,
31+ get_timescale ,
32+ get_iau2000b ,
33+ deprecated ,
34+ alert_deprecation ,
35+ )
3036from .enum import MoonPhaseType
3137from .exceptions import OutOfRangeDateError
3238
3339RISEN_ANGLE = - 0.8333
3440
3541
3642def _get_skyfield_to_moon_phase (
37- times : [Time ], vals : [int ], now : Time , timezone : int
43+ times : [Time ], vals : [int ], now : Time , utc_offset : Union [ int , float ]
3844) -> Union [MoonPhase , None ]:
3945 tomorrow = get_timescale ().utc (
4046 now .utc_datetime ().year , now .utc_datetime ().month , now .utc_datetime ().day + 1
@@ -58,20 +64,22 @@ def _get_skyfield_to_moon_phase(
5864 MoonPhaseType .FULL_MOON ,
5965 MoonPhaseType .LAST_QUARTER ,
6066 ]:
61- current_phase_time = translate_to_timezone (times [i ].utc_datetime (), timezone )
67+ current_phase_time = translate_to_timezone (times [i ].utc_datetime (), utc_offset )
6268 else :
6369 current_phase_time = None
6470
6571 # Find the next moon phase
6672 for j in range (i + 1 , len (times )):
6773 if vals [j ] in [0 , 2 , 4 , 6 ]:
68- next_phase_time = translate_to_timezone (times [j ].utc_datetime (), timezone )
74+ next_phase_time = translate_to_timezone (times [j ].utc_datetime (), utc_offset )
6975 break
7076
7177 return MoonPhase (current_phase , current_phase_time , next_phase_time )
7278
7379
74- def get_moon_phase (for_date : date = date .today (), timezone : int = 0 ) -> MoonPhase :
80+ def get_moon_phase (
81+ for_date : date = date .today (), utc_offset : Union [int , float ] = 0 , ** argv
82+ ) -> MoonPhase :
7583 """Calculate and return the moon phase for the given date, adjusted to the given timezone if any.
7684
7785 Get the moon phase for the 27 March, 2021:
@@ -87,6 +95,11 @@ def get_moon_phase(for_date: date = date.today(), timezone: int = 0) -> MoonPhas
8795
8896 Get the moon phase for the 27 March, 2021, in the UTC+2 timezone:
8997
98+ >>> get_moon_phase(date(2021, 3, 27), utc_offset=2)
99+ <MoonPhase phase_type=MoonPhaseType.WAXING_GIBBOUS time=None next_phase_date=2021-03-28 20:48:10.902298+02:00>
100+
101+ Note that the `utc_timezone` argument was named `timezone` before version 1.1. The old name still works, but will be dropped in the future.
102+
90103 >>> get_moon_phase(date(2021, 3, 27), timezone=2)
91104 <MoonPhase phase_type=MoonPhaseType.WAXING_GIBBOUS time=None next_phase_date=2021-03-28 20:48:10.902298+02:00>
92105
@@ -98,6 +111,13 @@ def get_moon_phase(for_date: date = date.today(), timezone: int = 0) -> MoonPhas
98111 ...
99112 kosmorrolib.exceptions.OutOfRangeDateError: The date must be between 1899-08-09 and 2053-09-26
100113 """
114+
115+ if argv .get ("timezone" ) is not None :
116+ alert_deprecation (
117+ "'timezone' argument of the get_moon_phase() function is deprecated. Use utc_offset instead."
118+ )
119+ utc_offset = argv .get ("timezone" )
120+
101121 earth = get_skf_objects ()["earth" ]
102122 moon = get_skf_objects ()["moon" ]
103123 sun = get_skf_objects ()["sun" ]
@@ -117,11 +137,11 @@ def moon_phase_at(time: Time):
117137
118138 try :
119139 times , phases = find_discrete (start_time , end_time , moon_phase_at )
120- return _get_skyfield_to_moon_phase (times , phases , today , timezone )
140+ return _get_skyfield_to_moon_phase (times , phases , today , utc_offset )
121141
122142 except EphemerisRangeError as error :
123- start = translate_to_timezone (error .start_time .utc_datetime (), timezone )
124- end = translate_to_timezone (error .end_time .utc_datetime (), timezone )
143+ start = translate_to_timezone (error .start_time .utc_datetime (), utc_offset )
144+ end = translate_to_timezone (error .end_time .utc_datetime (), utc_offset )
125145
126146 start = date (start .year , start .month , start .day ) + timedelta (days = 12 )
127147 end = date (end .year , end .month , end .day ) - timedelta (days = 12 )
@@ -130,7 +150,10 @@ def moon_phase_at(time: Time):
130150
131151
132152def get_ephemerides (
133- position : Position , for_date : date = date .today (), timezone : int = 0
153+ position : Position ,
154+ for_date : date = date .today (),
155+ utc_offset : Union [int , float ] = 0 ,
156+ ** argv
134157) -> [AsterEphemerides ]:
135158 """Compute and return the ephemerides for the given position and date, adjusted to the given timezone if any.
136159
@@ -148,9 +171,9 @@ def get_ephemerides(
148171 <AsterEphemerides rise_time=2022-07-07 22:27:00 culmination_time=2022-07-07 04:25:00 set_time=2022-07-07 10:20:00 aster=<Object type=PLANET name=NEPTUNE />>,
149172 <AsterEphemerides rise_time=2022-07-07 19:46:00 culmination_time=2022-07-07 00:41:00 set_time=2022-07-07 05:33:00 aster=<Object type=PLANET name=PLUTO />>]
150173
151- Timezone can be optionnaly set to adapt the hours to your location:
174+ UTC offset can be optionnaly set to adapt the hours to your location:
152175
153- >>> get_ephemerides(Position(36.6794, 4.8555), date(2022, 7, 7), timezone =2)
176+ >>> get_ephemerides(Position(36.6794, 4.8555), date(2022, 7, 7), utc_offset =2)
154177 [<AsterEphemerides rise_time=2022-07-07 06:29:00 culmination_time=2022-07-07 13:46:00 set_time=2022-07-07 21:02:00 aster=<Object type=STAR name=SUN />>,
155178 <AsterEphemerides rise_time=2022-07-07 14:16:00 culmination_time=2022-07-07 20:06:00 set_time=2022-07-07 01:27:00 aster=<Object type=SATELLITE name=MOON />>,
156179 <AsterEphemerides rise_time=2022-07-07 05:36:00 culmination_time=2022-07-07 12:58:00 set_time=2022-07-07 20:20:00 aster=<Object type=PLANET name=MERCURY />>,
@@ -163,6 +186,20 @@ def get_ephemerides(
163186 <AsterEphemerides rise_time=2022-07-07 21:46:00 culmination_time=2022-07-07 02:41:00 set_time=2022-07-07 07:33:00 aster=<Object type=PLANET name=PLUTO />>]
164187
165188
189+ Note that the `utc_timezone` argument was named `timezone` before version 1.1. The old name still works, but will be dropped in the future.
190+
191+ >>> get_ephemerides(Position(36.6794, 4.8555), date(2022, 7, 7), timezone=2)
192+ [<AsterEphemerides rise_time=2022-07-07 06:29:00 culmination_time=2022-07-07 13:46:00 set_time=2022-07-07 21:02:00 aster=<Object type=STAR name=SUN />>,
193+ <AsterEphemerides rise_time=2022-07-07 14:16:00 culmination_time=2022-07-07 20:06:00 set_time=2022-07-07 01:27:00 aster=<Object type=SATELLITE name=MOON />>,
194+ <AsterEphemerides rise_time=2022-07-07 05:36:00 culmination_time=2022-07-07 12:58:00 set_time=2022-07-07 20:20:00 aster=<Object type=PLANET name=MERCURY />>,
195+ <AsterEphemerides rise_time=2022-07-07 04:30:00 culmination_time=2022-07-07 11:44:00 set_time=2022-07-07 18:58:00 aster=<Object type=PLANET name=VENUS />>,
196+ <AsterEphemerides rise_time=2022-07-07 02:05:00 culmination_time=2022-07-07 08:39:00 set_time=2022-07-07 15:14:00 aster=<Object type=PLANET name=MARS />>,
197+ <AsterEphemerides rise_time=2022-07-07 01:02:00 culmination_time=2022-07-07 07:11:00 set_time=2022-07-07 13:20:00 aster=<Object type=PLANET name=JUPITER />>,
198+ <AsterEphemerides rise_time=2022-07-07 23:06:00 culmination_time=2022-07-07 04:29:00 set_time=2022-07-07 09:48:00 aster=<Object type=PLANET name=SATURN />>,
199+ <AsterEphemerides rise_time=2022-07-07 02:47:00 culmination_time=2022-07-07 09:42:00 set_time=2022-07-07 16:38:00 aster=<Object type=PLANET name=URANUS />>,
200+ <AsterEphemerides rise_time=2022-07-07 00:31:00 culmination_time=2022-07-07 06:25:00 set_time=2022-07-07 12:20:00 aster=<Object type=PLANET name=NEPTUNE />>,
201+ <AsterEphemerides rise_time=2022-07-07 21:46:00 culmination_time=2022-07-07 02:41:00 set_time=2022-07-07 07:33:00 aster=<Object type=PLANET name=PLUTO />>]
202+
166203 Objects may not rise or set on the given date (e.g. they rise the previous day or set the next day).
167204 In this case, you will get `None` values on the rise or set time.
168205
@@ -230,6 +267,12 @@ def get_ephemerides(
230267 Using a timezone that does not correspond to the place's actual one can impact the returned times.
231268 """
232269
270+ if argv .get ("timezone" ) is not None :
271+ alert_deprecation (
272+ "'timezone' argument of the get_ephemerides() function is deprecated. Use utc_offset instead."
273+ )
274+ utc_offset = argv .get ("timezone" )
275+
233276 def get_angle (for_aster : Object ):
234277 def fun (time : Time ) -> float :
235278 return (
@@ -255,11 +298,11 @@ def fun(time: Time) -> bool:
255298 # but we need it in UTC. Subtracting the timezone to get it in UTC.
256299
257300 start_time = get_timescale ().utc (
258- for_date .year , for_date .month , for_date .day , - timezone
301+ for_date .year , for_date .month , for_date .day , - utc_offset
259302 )
260303
261304 end_time = get_timescale ().utc (
262- for_date .year , for_date .month , for_date .day + 1 , - timezone
305+ for_date .year , for_date .month , for_date .day + 1 , - utc_offset
263306 )
264307
265308 ephemerides = []
@@ -276,7 +319,7 @@ def fun(time: Time) -> bool:
276319
277320 for i , time in enumerate (times ):
278321 time_dt = normalize_datetime (
279- translate_to_timezone (time .utc_datetime (), to_tz = timezone )
322+ translate_to_timezone (time .utc_datetime (), to_tz = utc_offset )
280323 )
281324
282325 if time_dt is not None and time_dt .day != for_date .day :
@@ -291,16 +334,16 @@ def fun(time: Time) -> bool:
291334 culmination_time = normalize_datetime (
292335 translate_to_timezone (
293336 culmination_time .utc_datetime (),
294- to_tz = timezone ,
337+ to_tz = utc_offset ,
295338 )
296339 )
297340
298341 ephemerides .append (
299342 AsterEphemerides (rise_time , culmination_time , set_time , aster = aster )
300343 )
301344 except EphemerisRangeError as error :
302- start = translate_to_timezone (error .start_time .utc_datetime (), timezone )
303- end = translate_to_timezone (error .end_time .utc_datetime (), timezone )
345+ start = translate_to_timezone (error .start_time .utc_datetime (), utc_offset )
346+ end = translate_to_timezone (error .end_time .utc_datetime (), utc_offset )
304347
305348 start = date (start .year , start .month , start .day + 1 )
306349 end = date (end .year , end .month , end .day - 1 )
0 commit comments