def fast(name: str, date_: date, lat: Optional[float], lng: Optional[float], elevation: int, havdala_opinion: HavdalaChoices) -> Fast: tz = get_tz(lat, lng) diaspora = is_diaspora(tz) is_9_av = True if name == 'fast_9_av' else None havdala_params = HAVDALA_PARAMS[havdala_opinion.name] data = {'moved_fast': False} fast_date = _get_first_day_date(name, date_, diaspora) # Deferred fasts if name in ('fast_gedalia', 'fast_17_tammuz', 'fast_9_av') and fast_date.day_of_week == 7: fast_date.forward(1) data['moved_fast'] = True if name == 'fast_esther' and fast_date.day_of_week == 7: fast_date.forward(-2) data['moved_fast'] = True location = GeoLocation('', lat, lng, tz, elevation) fast_calc = ZmanimCalendar(geo_location=location, date=fast_date.gregorian_date) if is_9_av: eve_calc = ZmanimCalendar(geo_location=location, date=(fast_date - 1).gregorian_date) data['fast_start'] = eve_calc.shkia() data['chatzot'] = fast_calc.chatzos() else: if fast_calc.alos(): data['fast_start'] = fast_calc.alos() else: eve_calc = ZmanimCalendar(geo_location=location, date=(fast_date - 1).gregorian_date) data['fast_start'] = eve_calc.chatzos() + timedelta(hours=12) # calculate additional fast ending times: # sunset = fast_calc.shkia() # sba_time = (sunset + timedelta(minutes=31)) # nvr_time = (sunset + timedelta(minutes=28)) # ssk_time = (sunset + timedelta(minutes=25)) data['havdala'] = fast_calc.tzais(havdala_params) settings = Settings(havdala_opinion=havdala_opinion, coordinates=(lat, lng), elevation=elevation, date=date_, fast_name=name) return Fast(settings=settings, **data)
def test_alos_with_custom_temporal_minute_offset(self): calendar = ZmanimCalendar(geo_location=test_helper.lakewood(), date=date(2017, 10, 17)) self.assertEqual(calendar.alos({'zmanis_offset': 90}).replace(microsecond=0).isoformat(), "2017-10-17T05:46:50-04:00")
def test_alos_with_custom_degree_offset(self): calendar = ZmanimCalendar(geo_location=test_helper.lakewood(), date=date(2017, 10, 17)) self.assertEqual(calendar.alos({'degrees': 19.8}).replace(microsecond=0).isoformat(), "2017-10-17T05:30:07-04:00")
def test_alos(self): calendar = ZmanimCalendar(geo_location=test_helper.lakewood(), date=date(2017, 10, 17)) self.assertEqual(calendar.alos().replace(microsecond=0).isoformat(), "2017-10-17T05:49:30-04:00")
def test_alos_with_custom_minute_offset_using_elevation(self): calendar = ZmanimCalendar(geo_location=test_helper.lakewood(), date=date(2017, 10, 17)) calendar.use_elevation = True self.assertEqual(calendar.alos({'offset': 60}).replace(microsecond=0).isoformat(), "2017-10-17T06:09:11-04:00")