예제 #1
0
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)
예제 #2
0
 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")
예제 #3
0
 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")
예제 #4
0
 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")
예제 #5
0
 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")