Пример #1
0
def dte_rnge():  
    l_fri = datetime.today() + relativedelta(weekday=FR(-1))
    l_mon = l_fri + relativedelta(weekday=MO(-1))
    two_sats_string = (l_fri + relativedelta(weekday=SA(-1))).strftime('%Y-%m-%d') #needs dashes for SQL query params
    last_sat_string = (l_fri + relativedelta(weekday=SA(1))).strftime('%Y-%m-%d')  #needs dashes for SQL query params
    l_fri_string = l_fri.strftime('%Y-%m-%d') #need dashes to read correct string for filepath
    l_mon_string = l_mon.strftime('%Y%m%d')   #need without dashes to filter correct dates in pending reports
    return {'as400start': l_mon_string, 'as400end': l_fri_string, 'keastonestart':two_sats_string, 'keastoneend':last_sat_string}
Пример #2
0
    def R7_parser(self):

        self.START_DATE = self.gdate
        if "MONTHS" in self.kwargs:
            self.START_DATE = delta(self.START_DATE,
                                    months=self.kwargs["MONTHS"])

        if "DAYINDEX" in self.kwargs and "DAYNAME" in self.kwargs:
            if self.kwargs["DAYINDEX"] - 2 == 0:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=MO(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 1:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=TU(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 2:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=WE(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 3:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=TH(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 4:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=FR(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 5:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=SA(self.kwargs["DAYNAME"]))
            if self.kwargs["DAYINDEX"] - 2 == 6:
                self.START_DATE = self.START_DATE + relativedelta(
                    day=1, weekday=SU(self.kwargs["DAYNAME"]))
def set_next_relative_date(start_date, day_of_week, week_of_month,
                           separation_count):
    arg = MO(1)

    if day_of_week == 1:
        arg = MO(week_of_month)
    if day_of_week == 2:
        arg = TU(week_of_month)
    if day_of_week == 3:
        arg = WE(week_of_month)
    if day_of_week == 4:
        arg = TH(week_of_month)
    if day_of_week == 5:
        arg = FR(week_of_month)
    if day_of_week == 6:
        arg = SA(week_of_month)
    if day_of_week == 7:
        arg = SU(week_of_month)

    if week_of_month == -1:
        return start_date + relativedelta(
            day=31, months=+separation_count, weekday=arg)

    return start_date + relativedelta(
        day=1, months=+separation_count, weekday=arg)
Пример #4
0
def _obtain_week_range_from_date(raw_date):
    """Obtain the start/end date of the week the specified date falls in.

    Start of week: Saturday 1200 hrs
    End of week:   Friday 1159 hrs

    NOTE Function is specific to EIA source, since metrics are reported in terms of weekly output.
         However, analysts want total volume across the entire week the metric is reported in.

    Args:
        raw_date (str):

    Returns:
        Tuple[str, str]: tuple of (start_date, end_date) of the week

    Examples:
        >>> _obtain_week_range_from_date('2018-09-21T00:00:00')
        ('2018-09-15T00:00:00', '2018-09-21T00:00:00')
        >>> _obtain_week_range_from_date('2018-09-14T00:00:00')
        ('2018-09-08T00:00:00', '2018-09-14T00:00:00')
    """
    end_date = parse_date(raw_date,
                          dayfirst=False) + relativedelta(weekday=FR(-1))
    start_date = end_date + relativedelta(weekday=SA(-1))

    return (start_date.isoformat(), end_date.isoformat())
Пример #5
0
def get_next_saturday(from_date=None, direction=1):
    if from_date is None:
        from_date = datetime.now().replace(tzinfo=LOCAL_TZ)
    if from_date.weekday() == 5:
        # HACK: если сейчас суббота, то ищем билеты на след. субботу
        from_date += timedelta(days=1)
    return from_date.astimezone(LOCAL_TZ) + relativedelta(
        weekday=SA(direction))
Пример #6
0
    def test_has_last_day(self, timezone):
        user = self.make_user()
        now = datetime.datetime(2020, 1, 26, tzinfo=pytz.utc)
        last_day = now.date() + relativedelta(weekday=SA(+1))
        timezone.localdate.return_value = now.date()

        with self.login(user):
            self.get("core:app")

        self.assertContext("last_day", last_day)
Пример #7
0
def get_last_saturday_str():
    """
    >>> response = get_last_saturday_str()
    >>> date_str_2_obj(response).strftime('%a')
    'Sat'
    >>> date_str_2_obj(response) <= datetime.datetime.today()
    True
    """
    return (datetime.datetime.now() +
            relativedelta(weekday=SA(-1))).strftime('%Y-%m-%d')
Пример #8
0
    def _populate(self, year):
        # New Year's Day
        self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"

        # Feast of Saints Peter and Paul
        name = "San Pedro y San Pablo [Feast of Saints Peter and Paul]"
        self[date(year, JUN, 29)] = name

        # Independence Day
        name = "Día de la Independencia [Independence Day]"
        self[date(year, JUL, 28)] = name

        name = "Día de las Fuerzas Armadas y la Policía del Perú"
        self[date(year, JUL, 29)] = name

        # Santa Rosa de Lima
        name = "Día de Santa Rosa de Lima"
        self[date(year, AUG, 30)] = name

        # Battle of Angamos
        name = "Combate Naval de Angamos [Battle of Angamos]"
        self[date(year, OCT, 8)] = name

        # Holy Thursday
        self[easter(year) +
             rd(weekday=TH(-1))] = "Jueves Santo [Maundy Thursday]"

        # Good Friday
        self[easter(year) + rd(weekday=FR(-1))] = "Viernes Santo [Good Friday]"

        # Holy Saturday
        self[easter(year) +
             rd(weekday=SA(-1))] = "Sábado de Gloria [Holy Saturday]"

        # Easter Sunday
        self[easter(year) +
             rd(weekday=SU(-1))] = "Domingo de Resurrección [Easter Sunday]"

        # Labor Day
        self[date(year, MAY, 1)] = "Día del Trabajo [Labour Day]"

        # All Saints Day
        name = "Día de Todos Los Santos [All Saints Day]"
        self[date(year, NOV, 1)] = name

        # Inmaculada Concepción
        name = "Inmaculada Concepción [Immaculate Conception]"
        self[date(year, DEC, 8)] = name

        # Christmas
        self[date(year, DEC, 25)] = "Navidad [Christmas]"
def FourWeekCreate():
    today = date.today()
    weekArr = []
    for i in range(4):
        lastMon = -2 - i #must be -1 more than other days as it runs every monday. so it needs to look at LAST monday
        otherDays = -1 - i
        weekArr.append(today + relativedelta(weekday=MO(lastMon))) #last MON
        weekArr.append(today + relativedelta(weekday=TU(otherDays))) #last TUE
        weekArr.append(today + relativedelta(weekday=WE(otherDays))) #last WED
        weekArr.append(today + relativedelta(weekday=TH(otherDays))) #last THU
        weekArr.append(today + relativedelta(weekday=FR(otherDays))) #last FRI
        weekArr.append(today + relativedelta(weekday=SA(otherDays))) #last SAT
        weekArr.append(today + relativedelta(weekday=SU(otherDays))) #last SUN
    return weekArr
Пример #10
0
    def test_has_last_day(self, timezone):
        user = self.make_user()
        now = datetime.datetime(2020, 1, 26, tzinfo=pytz.utc)
        last_day = now.date() + relativedelta(weekday=SA(+1))
        timezone.localdate.return_value = now.date()
        SchoolYearFactory(
            school=user.school,
            start_date=now,
            end_date=now + datetime.timedelta(days=1),
        )
        StudentFactory(school=user.school)

        with self.login(user):
            self.get("core:app")

        self.assertContext("last_day", last_day)
Пример #11
0
    def test_week_schedule_future_after_school_week(self):
        """Looking at future weeks pulls in unfinished tasks after the school week.

        This is a corner case. When the school week is over (typically a weekend
        date like Saturday or Sunday), all unfinished task work should be
        "pulled forward" to the next school week.
        This will enable users to plan for the following week.
        """
        today = timezone.localdate()
        saturday = today + relativedelta(weekday=SA(1))
        next_week = Week(saturday + datetime.timedelta(days=2))
        enrollment = EnrollmentFactory()
        student = enrollment.student
        school_year = enrollment.grade_level.school_year
        task = CourseTaskFactory(course__grade_levels=[enrollment.grade_level])

        week_schedule = student.get_week_schedule(school_year, saturday, next_week)

        assert week_schedule["courses"][0]["days"][0]["task"] == task
Пример #12
0
    def test_has_days(self, timezone):
        """The context has the first and last day of the week."""
        user = self.make_user()
        now = datetime.datetime(2020, 1, 26, tzinfo=pytz.utc)
        first_day = now.date() + relativedelta(weekday=SU(-1))
        last_day = now.date() + relativedelta(weekday=SA(+1))
        timezone.localdate.return_value = now.date()
        SchoolYearFactory(
            school=user.school,
            start_date=now,
            end_date=now + datetime.timedelta(days=1),
        )
        StudentFactory(school=user.school)

        with self.login(user):
            self.get("core:dashboard")

        assert self.get_context("first_day") == first_day
        assert self.get_context("last_day") == last_day
def push_historic_data(project):
    """
    Loads all current and historic JIRA data into Splunk
    """
    defects = []

    logger.info("Starting {}...".format(project))
    jira_issues = get_jira_defects(project)
    last_upload = datetime.datetime.utcnow().replace(
        hour=0, minute=0, second=0,
        microsecond=0) + relativedelta(weekday=SA(-1))
    logger.debug("Fetched  {} issues successfully for {}".format(
        len(jira_issues), project))
    for issue in jira_issues:
        try:
            created = datetime.datetime.strptime(issue.fields.created,
                                                 DATE_FORMAT)
            jira_dict = jira_obj_to_dict(
                issue,
                datetime.datetime.utcnow().strftime(DATE_FORMAT))

            historic_data = []
            # Last Friday of the report ran
            report_date = last_upload
            while (report_date > created):
                jira_dict = jira_for_date(jira_dict, issue.changelog,
                                          report_date)
                historic_data.insert(0, create_defect(jira_dict, issue))
                report_date -= datetime.timedelta(weeks=1)
            defects.append(historic_data)
        except Exception as e:
            logger.debug("Exception processing {} {}".format(
                jira_dict["key"], e))
            logger.exception("Exception")
            logger.debug("Missing values {}".format(str(jira_dict)))
            pass
    if len(defects) < len(jira_issues):
        logger.debug("{delta} defects not added in the {} report".format(
            project, delta=len(jira_issues) - len(defects)))
    defects_as_list = []
    for defect in defects:
        defects_as_list.extend(defect)
    return post_defects(project, jira_issues, defects_as_list)
Пример #14
0
def replace_days(dictionary):
    weekday = dictionary.get("weekday", None)
    if weekday:
        week_expr = dictionary["weekday"]
        week_day = week_expr[:2]
        week_int = int(week_expr.split("(")[1].split(")")[0])
        if week_day == "MO":
            dictionary["weekday"] = MO(week_int)
        elif week_day == "TU":
            dictionary["weekday"] = TU(week_int)
        elif week_day == "WE":
            dictionary["weekday"] = WE(week_int)
        elif week_day == "TH":
            dictionary["weekday"] = TH(week_int)
        elif week_day == "FR":
            dictionary["weekday"] = FR(week_int)
        elif week_day == "SA":
            dictionary["weekday"] = SA(week_int)
        elif week_day == "SU":
            dictionary["weekday"] = SU(week_int)
        else:
            logger.error("Wrong day code")
    return dictionary
Пример #15
0
def parse(raw_date):
    weekday = {
        'monday': MO(-1),
        'tuesday': TU(-1),
        'wednesday': WE(-1),
        'thursday': TH(-1),
        'friday': FR(-1),
        'saturday': SA(-1),
        'sunday': SU(-1),
    }
    if raw_date == 'today':
        date = datetime.now().date()
    elif raw_date == 'yesterday':
        date = datetime.now().date() - relativedelta(days=1)
    elif raw_date in weekday:
        date = datetime.now().date() + relativedelta(weekday=weekday[raw_date])
    elif re.match('\d{4}-w\d{2}', raw_date) is not None:
        fromDate = datetime.strptime(raw_date + '-1', "%Y-W%W-%w").date()
        toDate = fromDate + relativedelta(days=7)
        return fromDate, toDate
    else:
        date = datetime.strptime(raw_date, '%Y-%m-%d')
    toDate = date + relativedelta(days=1)
    return date, toDate
Пример #16
0
    def _populate(self, year):
        def storeholiday(self, hol_date, hol_name):
            """
            Function to store the holiday name in the appropriate
            date and to implement Section 4(2) of the Holidays Act:
            'if any day specified in the Schedule falls on a Sunday,
            the day next following not being itself a public holiday
            is declared a public holiday in Singapore.'
            """
            if hol_date.weekday() == SUN:
                self[hol_date] = hol_name + " [Sunday]"
                self[hol_date + rd(days=+1)] = "Monday following " + hol_name
            else:
                self[hol_date] = hol_name

        # New Year's Day
        storeholiday(self, date(year, JAN, 1), "New Year's Day")

        # Chinese New Year (two days)
        hol_date = self.get_lunar_n_y_date(year)
        self[hol_date] = "Chinese New Year"
        storeholiday(self, hol_date + rd(days=+1), "Chinese New Year")

        # Hari Raya Puasa
        # aka Eid al-Fitr
        # date of observance is announced yearly
        dates_obs = {
            2001: [(DEC, 16)],
            2002: [(DEC, 6)],
            2003: [(NOV, 25)],
            2004: [(NOV, 14)],
            2005: [(NOV, 3)],
            2006: [(OCT, 24)],
            2007: [(OCT, 13)],
            2008: [(OCT, 1)],
            2009: [(SEP, 20)],
            2010: [(SEP, 10)],
            2011: [(AUG, 30)],
            2012: [(AUG, 19)],
            2013: [(AUG, 8)],
            2014: [(JUL, 28)],
            2015: [(JUL, 17)],
            2016: [(JUL, 6)],
            2017: [(JUN, 25)],
            2018: [(JUN, 15)],
            2019: [(JUN, 5)],
            2020: [(MAY, 24)]
        }
        if year in dates_obs:
            for date_obs in dates_obs[year]:
                hol_date = date(year, *date_obs)
                storeholiday(self, hol_date, "Hari Raya Puasa")
                # Second day of Hari Raya Puasa (up to and including 1968)
                # Removed since we don't have Hari Raya Puasa dates for the
                # the years <= 1968:
                # if year <= 1968:
                #     storeholiday(self, hol_date + rd(days=+1),
                #                  "Second day of Hari Raya Puasa")
        else:
            for date_obs in self.get_hrp_date(year):
                hol_date = date_obs
                storeholiday(self, hol_date, "Hari Raya Puasa* (*estimated)")
                # Second day of Hari Raya Puasa (up to and including 1968)
                if year <= 1968:
                    storeholiday(
                        self, hol_date + rd(days=+1),
                        "Second day of Hari Raya Puasa* (*estimated)")

        # Hari Raya Haji
        # aka Eid al-Adha
        # date of observance is announced yearly
        dates_obs = {
            2001: [(MAR, 6)],
            2002: [(FEB, 23)],
            2003: [(FEB, 12)],
            2004: [(FEB, 1)],
            2005: [(JAN, 21)],
            2006: [(JAN, 10)],
            2007: [(DEC, 20)],
            2008: [(DEC, 8)],
            2009: [(NOV, 27)],
            2010: [(NOV, 17)],
            2011: [(NOV, 6)],
            2012: [(OCT, 26)],
            2013: [(OCT, 15)],
            2014: [(OCT, 5)],
            2015: [(SEP, 24)],
            2016: [(SEP, 12)],
            2017: [(SEP, 1)],
            2018: [(AUG, 22)],
            2019: [(AUG, 11)],
            2020: [(JUL, 31)]
        }
        if year in dates_obs:
            for date_obs in dates_obs[year]:
                hol_date = date(year, *date_obs)
                storeholiday(self, hol_date, "Hari Raya Haji")
        else:
            for date_obs in self.get_hrh_date(year):
                hol_date = date_obs
                storeholiday(self, hol_date, "Hari Raya Haji* (*estimated)")

        # Holy Saturday (up to and including 1968)
        if year <= 1968:
            self[easter(year) + rd(weekday=SA(-1))] = "Holy Saturday"

        # Good Friday
        self[easter(year) + rd(weekday=FR(-1))] = "Good Friday"

        # Easter Monday
        if year <= 1968:
            self[easter(year) + rd(weekday=MO(1))] = "Easter Monday"

        # Labour Day
        storeholiday(self, date(year, MAY, 1), "Labour Day")

        # Vesak Day
        # date of observance is announced yearly
        # https://en.wikipedia.org/wiki/Vesak#Dates_of_observance
        dates_obs = {
            2001: (MAY, 7),
            2002: (MAY, 27),
            2003: (MAY, 15),
            2004: (JUN, 2),
            2005: (MAY, 23),
            2006: (MAY, 12),
            2007: (MAY, 31),
            2008: (MAY, 19),
            2009: (MAY, 9),
            2010: (MAY, 28),
            2011: (MAY, 17),
            2012: (MAY, 5),
            2013: (MAY, 24),
            2014: (MAY, 13),
            2015: (JUN, 1),
            2016: (MAY, 20),
            2017: (MAY, 10),
            2018: (MAY, 29),
            2019: (MAY, 19),
            2020: (MAY, 7)
        }
        if year in dates_obs:
            hol_date = date(year, *dates_obs[year])
            storeholiday(self, hol_date, "Vesak Day")
        else:
            storeholiday(self, self.get_vesak_date(year),
                         "Vesak Day* (*estimated; ~10% chance +/- 1 day)")

        # National Day
        storeholiday(self, date(year, AUG, 9), "National Day")

        # Deepavali
        # aka Diwali
        # date of observance is announced yearly
        dates_obs = {
            2001: (NOV, 14),
            2002: (NOV, 3),
            2003: (OCT, 23),
            2004: (NOV, 11),
            2005: (NOV, 1),
            2006: (OCT, 21),
            2007: (NOV, 8),
            2008: (OCT, 27),
            2009: (OCT, 17),
            2010: (NOV, 5),
            2011: (OCT, 26),
            2012: (NOV, 13),
            2013: (NOV, 2),
            2014: (OCT, 22),
            2015: (NOV, 10),
            2016: (OCT, 29),
            2017: (OCT, 18),
            2018: (NOV, 6),
            2019: (OCT, 27),
            2020: (NOV, 14)
        }
        if year in dates_obs:
            hol_date = date(year, *dates_obs[year])
            storeholiday(self, hol_date, "Deepavali")
        else:
            storeholiday(self, self.get_s_diwali_date(year),
                         "Deepavali* (*estimated; rarely on day after)")

        # Christmas Day
        storeholiday(self, date(year, DEC, 25), "Christmas Day")

        # Boxing day (up to and including 1968)
        if year <= 1968:
            storeholiday(self, date(year, DEC, 26), "Boxing Day")

        # Polling Day
        dates_obs = {
            2001: (NOV, 3),
            2006: (MAY, 6),
            2011: (MAY, 7),
            2015: (SEP, 11)
        }
        if year in dates_obs:
            self[date(year, *dates_obs[year])] = "Polling Day"

        # SG50 Public holiday
        # Announced on 14 March 2015
        # https://www.mom.gov.sg/newsroom/press-releases/2015/sg50-public-holiday-on-7-august-2015
        if year == 2015:
            self[date(2015, AUG, 7)] = "SG50 Public Holiday"
Пример #17
0
def get_last_friday():
    from datetime import datetime
    from dateutil.relativedelta import relativedelta, SA
    t = datetime.now() + relativedelta(weekday=SA(+1))
    return t.strftime("%Y-%m-%d")
Пример #18
0
    def _populate(self, year):

        # New Year's Day
        self[date(year, JAN, 1)] = "New Year's Day"

        # Chinese New Year (two days)
        hol_date = self.cnls.lunar_n_y_date(year)
        self[hol_date] = "Chinese New Year"
        self[hol_date + rd(days=+1)] = "Chinese New Year"

        # Hari Raya Puasa
        # aka Eid al-Fitr
        # date of observance is announced yearly
        dates_obs = {
            2001: [(DEC, 16)],
            2002: [(DEC, 6)],
            2003: [(NOV, 25)],
            2004: [(NOV, 14)],
            2005: [(NOV, 3)],
            2006: [(OCT, 24)],
            2007: [(OCT, 13)],
            2008: [(OCT, 1)],
            2009: [(SEP, 20)],
            2010: [(SEP, 10)],
            2011: [(AUG, 30)],
            2012: [(AUG, 19)],
            2013: [(AUG, 8)],
            2014: [(JUL, 28)],
            2015: [(JUL, 17)],
            2016: [(JUL, 6)],
            2017: [(JUN, 25)],
            2018: [(JUN, 15)],
            2019: [(JUN, 5)],
            2020: [(MAY, 24)],
            2021: [(MAY, 13)],
            2022: [(MAY, 2)],
        }
        if year in dates_obs:
            for date_obs in dates_obs[year]:
                hol_date = date(year, *date_obs)
                self[hol_date] = "Hari Raya Puasa"
                # Second day of Hari Raya Puasa (up to and including 1968)
                # Removed since we don't have Hari Raya Puasa dates for the
                # the years <= 1968:
                # if year <= 1968:
                #     self[hol_date + rd(days=+1),
                #                  "Second day of Hari Raya Puasa")
        else:
            for date_obs in islamic_to_gre(year, 10, 1):
                hol_date = date_obs
                self[hol_date] = "Hari Raya Puasa* (*estimated)"
                # Second day of Hari Raya Puasa (up to and including 1968)
                if year <= 1968:
                    hol_date += rd(days=+1)
                    self[hol_date] = ("Second day of Hari Raya Puasa*"
                                      " (*estimated)")

        # Hari Raya Haji
        # aka Eid al-Adha
        # date of observance is announced yearly
        dates_obs = {
            2001: [(MAR, 6)],
            2002: [(FEB, 23)],
            2003: [(FEB, 12)],
            2004: [(FEB, 1)],
            2005: [(JAN, 21)],
            2006: [(JAN, 10)],
            2007: [(DEC, 20)],
            2008: [(DEC, 8)],
            2009: [(NOV, 27)],
            2010: [(NOV, 17)],
            2011: [(NOV, 6)],
            2012: [(OCT, 26)],
            2013: [(OCT, 15)],
            2014: [(OCT, 5)],
            2015: [(SEP, 24)],
            2016: [(SEP, 12)],
            2017: [(SEP, 1)],
            2018: [(AUG, 22)],
            2019: [(AUG, 11)],
            2020: [(JUL, 31)],
            2021: [(JUL, 20)],
            2022: [(JUL, 9)],
        }
        if year in dates_obs:
            for date_obs in dates_obs[year]:
                hol_date = date(year, *date_obs)
                self[hol_date] = "Hari Raya Haji"
        else:
            for date_obs in islamic_to_gre(year, 12, 10):
                hol_date = date_obs
                self[hol_date] = "Hari Raya Haji* (*estimated)"

        # Holy Saturday (up to and including 1968)
        if year <= 1968:
            self[easter(year) + rd(weekday=SA(-1))] = "Holy Saturday"

        # Good Friday
        self[easter(year) + rd(weekday=FR(-1))] = "Good Friday"

        # Easter Monday
        if year <= 1968:
            self[easter(year) + rd(weekday=MO(1))] = "Easter Monday"

        # Labour Day
        self[date(year, MAY, 1)] = "Labour Day"

        # Vesak Day
        # date of observance is announced yearly
        # https://en.wikipedia.org/wiki/Vesak#Dates_of_observance
        dates_obs = {
            2001: (MAY, 7),
            2002: (MAY, 27),
            2003: (MAY, 15),
            2004: (JUN, 2),
            2005: (MAY, 23),
            2006: (MAY, 12),
            2007: (MAY, 31),
            2008: (MAY, 19),
            2009: (MAY, 9),
            2010: (MAY, 28),
            2011: (MAY, 17),
            2012: (MAY, 5),
            2013: (MAY, 24),
            2014: (MAY, 13),
            2015: (JUN, 1),
            2016: (MAY, 20),
            2017: (MAY, 10),
            2018: (MAY, 29),
            2019: (MAY, 19),
            2020: (MAY, 7),
            2021: (MAY, 26),
            2022: (MAY, 15),
        }
        if year in dates_obs:
            hol_date = date(year, *dates_obs[year])
            self[hol_date] = "Vesak Day"
        else:
            hol_date = self.cnls.vesak_date(year)
            self[hol_date] = "Vesak Day* (*estimated; ~10% chance +/- 1 day)"

        # National Day
        self[date(year, AUG, 9)] = "National Day"

        # Deepavali
        # aka Diwali
        # date of observance is announced yearly
        dates_obs = {
            2001: (NOV, 14),
            2002: (NOV, 3),
            2003: (OCT, 23),
            2004: (NOV, 11),
            2005: (NOV, 1),
            2006: (OCT, 21),
            2007: (NOV, 8),
            2008: (OCT, 27),
            2009: (OCT, 17),
            2010: (NOV, 5),
            2011: (OCT, 26),
            2012: (NOV, 13),
            2013: (NOV, 2),
            2014: (OCT, 22),
            2015: (NOV, 10),
            2016: (OCT, 29),
            2017: (OCT, 18),
            2018: (NOV, 6),
            2019: (OCT, 27),
            2020: (NOV, 14),
            2021: (NOV, 4),
            2022: (NOV, 24),
        }
        if year in dates_obs:
            hol_date = date(year, *dates_obs[year])
            self[hol_date] = "Deepavali"
        else:
            hol_date = self.cnls.s_diwali_date(year)
            self[hol_date] = "Deepavali* (*estimated; rarely on day after)"

        # Christmas Day
        self[date(year, DEC, 25)] = "Christmas Day"

        # Boxing day (up to and including 1968)
        if year <= 1968:
            self[date(year, DEC, 26)] = "Boxing Day"

        # Polling Day
        dates_obs = {
            2001: (NOV, 3),
            2006: (MAY, 6),
            2011: (MAY, 7),
            2015: (SEP, 11),
            2020: (JUL, 10),
        }
        if year in dates_obs:
            self[date(year, *dates_obs[year])] = "Polling Day"

        # SG50 Public holiday
        # Announced on 14 March 2015
        # https://www.mom.gov.sg/newsroom/press-releases/2015/sg50-public-holiday-on-7-august-2015
        if year == 2015:
            self[date(2015, AUG, 7)] = "SG50 Public Holiday"

        # Check for holidays that fall on a Sunday and implement Section 4(2)
        # of the Holidays Act: "if any day specified in the Schedule falls on
        # a Sunday, the day next following not being itself a public holiday
        # is declared a public holiday in Singapore."
        for (hol_date, hol_name) in list(self.items()):
            if hol_date.year == year and hol_date.weekday() == SUN:
                self[hol_date] += " [Sunday]"
                in_lieu_date = hol_date + rd(days=+1)
                while in_lieu_date in self:
                    in_lieu_date += rd(days=+1)
                self[in_lieu_date] = hol_name + " [In lieu]"
Пример #19
0
from datetime import date
from dateutil.relativedelta import relativedelta, SA
format = "%Y-%m-%d"
today = date.today()
sunday = today + relativedelta(weekday=SA(-1))
date = sunday.strftime(format)
print(date)
Пример #20
0
    def _populate(self, year):

        day_following = "The day following "

        # The first day of January
        name = "The first day of January"
        first_date = date(year, JAN, 1)
        if self.observed:
            if first_date.weekday() == SUN:
                self[first_date +
                     rd(days=+1)] = day_following + self.first_lower(name)
                first_date = first_date + rd(days=+1)
            else:
                self[first_date] = name
        else:
            self[first_date] = name

        # Lunar New Year
        name = "Lunar New Year's Day"
        preceding_day_lunar = "The day preceding Lunar New Year's Day"
        second_day_lunar = "The second day of Lunar New Year"
        third_day_lunar = "The third day of Lunar New Year"
        fourth_day_lunar = "The fourth day of Lunar New Year"
        dt = self.cnls.lunar_n_y_date(year)
        new_year_date = date(dt.year, dt.month, dt.day)
        if self.observed:
            self[new_year_date] = name
            if new_year_date.weekday() in [MON, TUE, WED, THU]:
                self[new_year_date] = name
                self[new_year_date + rd(days=+1)] = second_day_lunar
                self[new_year_date + rd(days=+2)] = third_day_lunar
            elif new_year_date.weekday() == FRI:
                self[new_year_date] = name
                self[new_year_date + rd(days=+1)] = second_day_lunar
                self[new_year_date + rd(days=+3)] = fourth_day_lunar
            elif new_year_date.weekday() == SAT:
                self[new_year_date] = name
                self[new_year_date + rd(days=+2)] = third_day_lunar
                self[new_year_date + rd(days=+3)] = fourth_day_lunar
            elif new_year_date.weekday() == SUN:
                if year in [2006, 2007, 2010]:
                    self[new_year_date + rd(days=-1)] = preceding_day_lunar
                    self[new_year_date + rd(days=+1)] = second_day_lunar
                    self[new_year_date + rd(days=+2)] = third_day_lunar
                else:
                    self[new_year_date + rd(days=+1)] = second_day_lunar
                    self[new_year_date + rd(days=+2)] = third_day_lunar
                    self[new_year_date + rd(days=+3)] = fourth_day_lunar
        else:
            self[new_year_date] = name
            self[new_year_date + rd(days=+1)] = second_day_lunar
            self[new_year_date + rd(days=+2)] = third_day_lunar

        # Ching Ming Festival
        name = "Ching Ming Festival"
        if self.is_leap_year(year) or (self.is_leap_year(year - 1)
                                       and year > 2008):
            ching_ming_date = date(year, APR, 4)
        else:
            ching_ming_date = date(year, APR, 5)
        if self.observed:
            if ching_ming_date.weekday() == SUN:
                self[ching_ming_date + rd(days=+1)] = day_following + name
                ching_ming_date = ching_ming_date + rd(days=+1)
            else:
                self[ching_ming_date] = name
        else:
            self[ching_ming_date] = name

        # Easter Holiday
        good_friday = "Good Friday"
        easter_monday = "Easter Monday"
        if self.observed:
            self[easter(year) + rd(weekday=FR(-1))] = good_friday
            self[easter(year) + rd(weekday=SA(-1))] = (day_following +
                                                       good_friday)
            if ching_ming_date == easter(year) + rd(weekday=MO):
                self[easter(year) + rd(weekday=MO) +
                     rd(days=+1)] = (day_following + easter_monday)
            else:
                self[easter(year) + rd(weekday=MO)] = easter_monday
        else:
            self[easter(year) + rd(weekday=FR(-1))] = good_friday
            self[easter(year) + rd(weekday=SA(-1))] = (day_following +
                                                       good_friday)
            self[easter(year) + rd(weekday=MO)] = easter_monday

        # Birthday of the Buddha
        name = "Birthday of the Buddha"
        dt = self.cnls.lunar_to_gre(year, 4, 8)
        buddha_date = date(dt.year, dt.month, dt.day)
        if self.observed:
            if buddha_date.weekday() == SUN:
                self[buddha_date + rd(days=+1)] = day_following + name
            else:
                self[buddha_date] = name
        else:
            self[buddha_date] = name

        # Labour Day
        name = "Labour Day"
        labour_date = date(year, MAY, 1)
        if self.observed:
            if labour_date.weekday() == SUN:
                self[labour_date + rd(days=+1)] = day_following + name
            else:
                self[labour_date] = name
        else:
            self[labour_date] = name

        # Tuen Ng Festival
        name = "Tuen Ng Festival"
        dt = self.cnls.lunar_to_gre(year, 5, 5)
        tuen_ng_date = date(dt.year, dt.month, dt.day)
        if self.observed:
            if tuen_ng_date.weekday() == SUN:
                self[tuen_ng_date + rd(days=+1)] = day_following + name
            else:
                self[tuen_ng_date] = name
        else:
            self[tuen_ng_date] = name

        # Hong Kong Special Administrative Region Establishment Day
        name = "Hong Kong Special Administrative Region Establishment Day"
        hksar_date = date(year, JUL, 1)
        if self.observed:
            if hksar_date.weekday() == SUN:
                self[hksar_date + rd(days=+1)] = day_following + name
            else:
                self[hksar_date] = name
        else:
            self[hksar_date] = name

        # Special holiday on 2015 - The 70th anniversary day of the victory
        # of the Chinese people's war of resistance against Japanese aggression
        name = ("The 70th anniversary day of the victory of the Chinese " +
                "people's war of resistance against Japanese aggression")
        if year == 2015:
            self[date(year, SEP, 3)] = name

        # Chinese Mid-Autumn Festival
        name = "Chinese Mid-Autumn Festival"
        dt = self.cnls.lunar_to_gre(year, 8, 15)
        mid_autumn_date = date(dt.year, dt.month, dt.day)
        if self.observed:
            if mid_autumn_date.weekday() == SAT:
                self[mid_autumn_date] = name
            else:
                self[mid_autumn_date + rd(days=+1)] = (day_following + "the " +
                                                       name)
            mid_autumn_date = mid_autumn_date + rd(days=+1)
        else:
            self[mid_autumn_date] = name

        # National Day
        name = "National Day"
        national_date = date(year, OCT, 1)
        if self.observed:
            if (national_date.weekday() == SUN
                    or national_date == mid_autumn_date):
                self[national_date + rd(days=+1)] = day_following + name
            else:
                self[national_date] = name
        else:
            self[national_date] = name

        # Chung Yeung Festival
        name = "Chung Yeung Festival"
        dt = self.cnls.lunar_to_gre(year, 9, 9)
        chung_yeung_date = date(dt.year, dt.month, dt.day)
        if self.observed:
            if chung_yeung_date.weekday() == SUN:
                self[chung_yeung_date + rd(days=+1)] = day_following + name
            else:
                self[chung_yeung_date] = name
        else:
            self[chung_yeung_date] = name

        # Christmas Day
        name = "Christmas Day"
        first_after_christmas = "The first weekday after " + name
        second_after_christmas = "The second weekday after " + name
        christmas_date = date(year, DEC, 25)
        if self.observed:
            if christmas_date.weekday() == SUN:
                self[christmas_date] = name
                self[christmas_date + rd(days=+1)] = first_after_christmas
                self[christmas_date + rd(days=+2)] = second_after_christmas
            elif christmas_date.weekday() == SAT:
                self[christmas_date] = name
                self[christmas_date + rd(days=+2)] = first_after_christmas
            else:
                self[christmas_date] = name
                self[christmas_date + rd(days=+1)] = first_after_christmas
        else:
            self[christmas_date] = name
            self[christmas_date + rd(days=+1)] = day_following + name
Пример #21
0
def get_last_saturday():
    sat = datetime.now() + relativedelta(weekday=SA(-1))
    return sat + relativedelta(hour=0, second=0, minute=0)
    def create_next_event(self):
        current = fields.Date.today()
        current_date = datetime.strptime(current, '%Y-%m-%d')
        current_day = current_date.weekday()
        dpth = 1

        event_ids = self.env['event.event'].search([('is_template', '=', True),
                                                    ('recurrency', '=', True),
                                                    ('state', '!=', 'done')])
        for event in event_ids:
            if event.end_type == 'count':
                event.counter += 1
            week_list = []
            while dpth <= event.depth:

                if event.mo:
                    event_date = current_date + relativedelta(weekday=MO(dpth))
                    week_list.append(event_date)
                if event.tu:
                    event_date = current_date + relativedelta(weekday=TU(dpth))
                    week_list.append(event_date)
                if event.we:
                    event_date = current_date + relativedelta(weekday=WE(dpth))
                    week_list.append(event_date)
                if event.th:
                    event_date = current_date + relativedelta(weekday=TH(dpth))
                    week_list.append(event_date)
                if event.fr:
                    event_date = current_date + relativedelta(weekday=FR(dpth))
                    week_list.append(event_date)
                if event.sa:
                    event_date = current_date + relativedelta(weekday=SA(dpth))
                    week_list.append(event_date)
                if event.su:
                    event_date = current_date + relativedelta(weekday=SU(dpth))
                    week_list.append(event_date)

                event_tmpl_start_date = event.date_begin
                event_tmpl_start_time = datetime.strptime(
                    event_tmpl_start_date, "%Y-%m-%d %H:%M:%S").time()

                event_tmpl_end_date = event.date_end
                event_tmpl_end_time = datetime.strptime(
                    event_tmpl_end_date, "%Y-%m-%d %H:%M:%S").time()

                dpth += 1

                for event_day in week_list:

                    event_start_date = datetime.combine(
                        event_day, event_tmpl_start_time)
                    event_end_date = datetime.combine(event_day,
                                                      event_tmpl_end_time)

                    date = event_start_date.strftime('%Y-%m-%d %H:%M:%S')
                    final_date = event.final_date
                    day = event_day.strftime('%Y-%m-%d')
                    event_find = self.env['event.event'].search([
                        ('template_id', '=', event.id),
                        ('date_begin', '=', date)
                    ])
                    if event.end_type == 'end_date' and day > event.final_date:
                        event.state = 'done'
                        return True
                    elif event.end_type == 'count' and event.counter > event.count:
                        event.state = 'done'
                        return True
                    elif not event_find:
                        new_event_id = event.copy(
                            default={
                                'is_template': False,
                                'date_begin': event_start_date,
                                'date_end': event_end_date,
                                'recurrency': False,
                                'template_id': event.id,
                            })
Пример #23
0
import random
from datetime import date
import time
from dateutil.relativedelta import relativedelta, MO, WE, TH, TU, SU, FR, SA
import requests
import xml.etree.ElementTree as et
from vk_api.longpoll import VkLongPoll, VkEventType

now = datetime.datetime.now()
today = date.today()
monday = (today + relativedelta(weekday=MO(-1))).day
tuesday = (today + relativedelta(weekday=TU(-1))).day
wednesday = (today + relativedelta(weekday=WE(-1))).day
thursday = (today + relativedelta(weekday=TH(-1))).day
friday = (today + relativedelta(weekday=FR(-1))).day
saturday = (today + relativedelta(weekday=SA(-1))).day
mon = now.month
moth = ""
user_login = {}
user_password = {}
if mon == 1:
    moth = "Январь"
if mon == 2:
    moth = "Феварль"
if mon == 3:
    moth = "Март"
if mon == 4:
    moth = "Апрель"
if mon == 5:
    moth = "Май"
if mon == 6:
Пример #24
0
 def handle(self) -> date:
     return self.result + relativedelta(weekday=SA(self.number))
Пример #25
0
    def _populate(self, year):
        # New Year's Day (Law 2.977)
        self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"
        # Day after, if it's a Sunday (Law 20.983)
        if year > 2016 and date(year, JAN, 1).weekday() == SUN:
            self[date(year, JAN, 2)] = "Fiestas Patrias [Holiday]"

        # Holy Week (Law 2.977)
        name_fri = "Semana Santa (Viernes Santo) [Good Friday)]"
        name_sat = "Semana Santa (Sábado Santo) [Good Saturday)]"
        name_easter = 'Día de Pascuas [Easter Day]'

        self[easter(year) + rd(weekday=FR(-1))] = name_fri
        self[easter(year) + rd(weekday=SA(-1))] = name_sat
        self[easter(year)] = name_easter

        # Labor Day (Law 2.200, renamed with Law 18.018)
        name = "Día Nacional del Trabajo [Labour Day]"
        self[date(year, MAY, 1)] = name

        # Naval Glories Day (Law 2.977)
        name = "Día de las Glorias Navales [Navy Day]"
        self[date(year, MAY, 21)] = name

        # Saint Peter and Saint Paul (Law 18.432)
        name = "San Pedro y San Pablo [Saint Peter and Saint Paul]"
        if year < 2020:
            self[date(year, JUN, 29)] = name
        else:
            # floating Monday holiday (Law 19.668)
            if date(year, JUN, 29).weekday() <= THU:
                self[date(year, JUN, 29) +
                     rd(date(year, JUN, 29), weekday=MO(-1))] = name
            elif date(year, JUN, 29).weekday() == FRI:
                self[date(year, JUN, 29) + rd(weekday=MO)] = name
            else:
                self[date(year, JUN, 29)] = name

        # Day of Virgin of Carmen (Law 20.148)
        if year > 2006:
            name = "Virgen del Carmen [Our Lady of Mount Carmel]"
            self[date(year, JUL, 16)] = name

        # Day of Assumption of the Virgin (Law 2.977)
        name = "Asunción de la Virgen [Assumption of Mary]"
        self[date(year, AUG, 15)] = name

        # National Holiday Friday preceding Independence Day (Law 20.983)
        if year > 2016 and date(year, SEP, 18).weekday() == SAT:
            self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"

        # National Holiday Monday preceding Independence Day (Law 20.215)
        if year > 2007 and date(year, SEP, 18).weekday() == TUE:
            self[date(year, SEP, 17)] = "Fiestas Patrias [Holiday]"

        # Independence Day (Law 2.977)
        name = "Día de la Independencia [Independence Day]"
        self[date(year, SEP, 18)] = name

        # Day of Glories of the Army of Chile (Law 2.977)
        name = "Día de las Glorias del Ejército [Army Day]"
        self[date(year, SEP, 19)] = name

        # National Holiday Friday following Army Day (Law 20.215)
        if year > 2007 and date(year, SEP, 19).weekday() == THU:
            self[date(year, SEP, 20)] = "Fiestas Patrias [Holiday]"

        # Day of the Meeting of Two Worlds (Law 3.810)
        if year < 2010:
            self[date(year, OCT, 12)] = "Día de la Raza [Columbus day]"
        elif year < 2020:
            self[date(year, OCT, 12)] = "Día del Respeto a la Diversidad"\
                                        " [Day of the Meeting " \
                                        " of Two Worlds]"
        else:
            # floating Monday holiday (Law 19.668)
            name = ("Día del Descubrimiento de dos Mundos [Columbus Day]")
            if date(year, OCT, 12).weekday() <= THU:
                self[date(year, OCT, 12) +
                     rd(date(year, OCT, 12), weekday=MO(-1))] = name
            elif date(year, OCT, 12).weekday() == FRI:
                self[date(year, OCT, 12) + rd(weekday=MO)] = name
            else:
                self[date(year, OCT, 12)] = name

        # National Day of the Evangelical and Protestant Churches (Law 20.299)
        if year > 2007:
            name = ("Día Nacional de las Iglesias Evangélicas y Protestantes "
                    " [Reformation Day]")
            self[date(year, OCT, 31)] = name

        # All Saints Day (Law 2.977)
        name = "Día de Todos los Santos [All Saints Day]"
        self[date(year, NOV, 1)] = name

        # Immaculate Conception (Law 2.977)
        self[date(year, DEC, 8)] = "La Inmaculada Concepción" \
                                   " [Immaculate Conception]"

        # Christmas (Law 2.977)
        self[date(year, DEC, 25)] = "Navidad [Christmas]"

        # región de Arica y Parinacota
        if self.state == 'AP' and year >= 2020:
            # Law 20.663
            self[date(year, JUN, 7)] = ("Asalto y Toma del Morro de Arica"
                                        " [Assault and Capture of Cape Arica]")

        # región de Ñuble
        if self.state == 'NB' and year >= 2014:
            # Law 20.678
            self[date(year, AUG, 20)] =\
                ("Nacimiento del Prócer de la Independencia"
                 " (Chillán y Chillán Viejo)"
                 " [Nativity of Bernardo O'Higgins]")
Пример #26
0
 def __init__(self, day):
     self.first_day = day + relativedelta(weekday=SU(-1))
     self.last_day = day + relativedelta(weekday=SA(+1))
Пример #27
0
    def _populate(self, year):
        # ACT:  Holidays Act 1958
        # NSW:  Public Holidays Act 2010
        # NT:   Public Holidays Act 2013
        # QLD:  Holidays Act 1983
        # SA:   Holidays Act 1910
        # TAS:  Statutory Holidays Act 2000
        # VIC:  Public Holidays Act 1993
        # WA:   Public and Bank Holidays Act 1972

        # TODO do more research on history of Aus holidays

        # New Year's Day
        name = "New Year's Day"
        jan1 = date(year, JAN, 1)
        self[jan1] = name
        if self.observed and jan1.weekday() in WEEKEND:
            self[jan1 + rd(weekday=MO)] = name + " (Observed)"

        # Australia Day
        jan26 = date(year, JAN, 26)
        if year >= 1935:
            if self.prov == "NSW" and year < 1946:
                name = "Anniversary Day"
            else:
                name = "Australia Day"
            self[jan26] = name
            if self.observed and year >= 1946 and jan26.weekday() in WEEKEND:
                self[jan26 + rd(weekday=MO)] = name + " (Observed)"
        elif year >= 1888 and self.prov != "SA":
            name = "Anniversary Day"
            self[jan26] = name

        # Adelaide Cup
        if self.prov == "SA":
            name = "Adelaide Cup"
            if year >= 2006:
                # subject to proclamation ?!?!
                self[date(year, MAR, 1) + rd(weekday=MO(+2))] = name
            else:
                self[date(year, MAR, 1) + rd(weekday=MO(+3))] = name

        # Canberra Day
        # Info from https://www.timeanddate.com/holidays/australia/canberra-day
        # and https://en.wikipedia.org/wiki/Canberra_Day
        if self.prov == "ACT" and year >= 1913:
            name = "Canberra Day"
            if year >= 1913 and year <= 1957:
                self[date(year, MAR, 12)] = name
            elif year >= 1958 and year <= 2007:
                self[date(year, MAR, 1) + rd(weekday=MO(+3))] = name
            elif year >= 2008 and year != 2012:
                self[date(year, MAR, 1) + rd(weekday=MO(+2))] = name
            elif year == 2012:
                self[date(year, MAR, 12)] = name

        # Easter
        self[easter(year) + rd(weekday=FR(-1))] = "Good Friday"
        if self.prov in ("ACT", "NSW", "NT", "QLD", "SA", "VIC"):
            self[easter(year) + rd(weekday=SA(-1))] = "Easter Saturday"
        if self.prov in ("ACT", "NSW", "QLD", "VIC"):
            self[easter(year)] = "Easter Sunday"
        self[easter(year) + rd(weekday=MO)] = "Easter Monday"

        # Anzac Day
        if year > 1920:
            name = "Anzac Day"
            apr25 = date(year, APR, 25)
            self[apr25] = name
            if self.observed:
                if apr25.weekday() == SAT and self.prov in ("WA", "NT"):
                    self[apr25 + rd(weekday=MO)] = name + " (Observed)"
                elif apr25.weekday() == SUN and self.prov in (
                        "ACT",
                        "QLD",
                        "SA",
                        "WA",
                        "NT",
                ):
                    self[apr25 + rd(weekday=MO)] = name + " (Observed)"

        # Western Australia Day
        if self.prov == "WA" and year > 1832:
            if year >= 2015:
                name = "Western Australia Day"
            else:
                name = "Foundation Day"
            self[date(year, JUN, 1) + rd(weekday=MO(+1))] = name

        # Sovereign's Birthday
        if year >= 1952:
            name = "Queen's Birthday"
        elif year > 1901:
            name = "King's Birthday"
        if year >= 1936:
            name = "Queen's Birthday"
            if self.prov == "QLD":
                if year == 2012:
                    self[date(year, JUN, 11)] = "Queen's Diamond Jubilee"
                if year < 2016 and year != 2012:
                    dt = date(year, JUN, 1) + rd(weekday=MO(+2))
                    self[dt] = name
                else:
                    dt = date(year, OCT, 1) + rd(weekday=MO)
                    self[dt] = name
            elif self.prov == "WA":
                # by proclamation ?!?!
                self[date(year, OCT, 1) + rd(weekday=MO(-1))] = name
            elif self.prov in ("NSW", "VIC", "ACT", "SA", "NT", "TAS"):
                dt = date(year, JUN, 1) + rd(weekday=MO(+2))
                self[dt] = name
        elif year > 1911:
            self[date(year, JUN, 3)] = name  # George V
        elif year > 1901:
            self[date(year, NOV, 9)] = name  # Edward VII

        # Picnic Day
        if self.prov == "NT":
            name = "Picnic Day"
            self[date(year, AUG, 1) + rd(weekday=MO)] = name

        # Bank Holiday
        if self.prov == "NSW":
            if year >= 1912:
                name = "Bank Holiday"
                self[date(year, 8, 1) + rd(weekday=MO)] = name

        # Labour Day
        name = "Labour Day"
        if self.prov in ("NSW", "ACT", "SA"):
            self[date(year, OCT, 1) + rd(weekday=MO)] = name
        elif self.prov == "WA":
            self[date(year, MAR, 1) + rd(weekday=MO)] = name
        elif self.prov == "VIC":
            self[date(year, MAR, 1) + rd(weekday=MO(+2))] = name
        elif self.prov == "QLD":
            if 2013 <= year <= 2015:
                self[date(year, OCT, 1) + rd(weekday=MO)] = name
            else:
                self[date(year, MAY, 1) + rd(weekday=MO)] = name
        elif self.prov == "NT":
            name = "May Day"
            self[date(year, MAY, 1) + rd(weekday=MO)] = name
        elif self.prov == "TAS":
            name = "Eight Hours Day"
            self[date(year, MAR, 1) + rd(weekday=MO(+2))] = name

        # Family & Community Day
        if self.prov == "ACT":
            name = "Family & Community Day"
            if 2007 <= year <= 2009:
                self[date(year, NOV, 1) + rd(weekday=TU)] = name
            elif year == 2010:
                # first Monday of the September/October school holidays
                # moved to the second Monday if this falls on Labour day
                # TODO need a formula for the ACT school holidays then
                # http://www.cmd.act.gov.au/communication/holidays
                self[date(year, SEP, 26)] = name
            elif year == 2011:
                self[date(year, OCT, 10)] = name
            elif year == 2012:
                self[date(year, OCT, 8)] = name
            elif year == 2013:
                self[date(year, SEP, 30)] = name
            elif year == 2014:
                self[date(year, SEP, 29)] = name
            elif year == 2015:
                self[date(year, SEP, 28)] = name
            elif year == 2016:
                self[date(year, SEP, 26)] = name
            elif year == 2017:
                self[date(year, SEP, 25)] = name

        # Reconciliation Day
        if self.prov == "ACT":
            name = "Reconciliation Day"
            if year >= 2018:
                self[date(year, 5, 27) + rd(weekday=MO)] = name

        if self.prov == "VIC":
            # Grand Final Day
            if year == 2020:
                # Rescheduled due to COVID-19
                self[date(year, OCT, 23)] = "Grand Final Day"
            elif year == 2021:
                # Rescheduled due to COVID-19
                self[date(year, SEP, 24)] = "Grand Final Day"
            elif year >= 2015:
                self[date(year, SEP, 24) + rd(weekday=FR)] = "Grand Final Day"

            # Melbourne Cup
            self[date(year, NOV, 1) + rd(weekday=TU)] = "Melbourne Cup"

        # The Royal Queensland Show (Ekka)
        # The Show starts on the first Friday of August - providing this is
        # not prior to the 5th - in which case it will begin on the second
        # Friday. The Wednesday during the show is a public holiday.
        if self.prov == "QLD":
            name = "The Royal Queensland Show"
            if year == 2020:
                self[date(year, AUG, 14)] = name
            if year == 2021:
                self[date(year, OCT, 29)] = name
            else:
                self[date(year, AUG, 5) + rd(weekday=FR) +
                     rd(weekday=WE)] = name

        # Christmas Day
        name = "Christmas Day"
        dec25 = date(year, DEC, 25)
        self[dec25] = name
        if self.observed and dec25.weekday() in WEEKEND:
            self[date(year, DEC, 27)] = name + " (Observed)"

        # Boxing Day
        if self.prov == "SA":
            name = "Proclamation Day"
        else:
            name = "Boxing Day"
        dec26 = date(year, DEC, 26)
        self[dec26] = name
        if self.observed and dec26.weekday() in WEEKEND:
            self[date(year, DEC, 28)] = name + " (Observed)"
Пример #28
0
def main():

    #MAIN IDEA:
    #Identify the sales volume and ROAS per margin and display as a bubble chart in data studio
    c = CurrencyConverter()

    print('------------Product Margins------------')
    #analytics dates to pull individually
    #NEED TO REWORK THIS TO HAVE LESS API REQUESTS
    today = date.today()
    mon = today + relativedelta(
        weekday=MO(-2)
    )  #last MON: -2 because it will run every monday so we need to look 2 mondays back
    tue = today + relativedelta(weekday=TU(-1))  #last TUE
    wed = today + relativedelta(weekday=WE(-1))  #last WED
    thu = today + relativedelta(weekday=TH(-1))  #last THU
    fri = today + relativedelta(weekday=FR(-1))  #last FRI
    sat = today + relativedelta(weekday=SA(-1))  #last SAT
    sun = today + relativedelta(weekday=SU(-1))  #last SUN
    weekArr = [mon, tue, wed, thu, fri, sat, sun]

    analyticsCSV = ""
    #pull for each day of the week - avoids data sampling this way but takes a bit longer
    for day in weekArr:
        analyticsCSV += analytics_pull.main(str(day))
        print("Pulled date: " + str(day))
    dfAnalytics = csv_parser.parseToCSV(analyticsCSV, "ANL")

    dfAnalytics['date'] = dfAnalytics.apply(
        lambda row: match_maker.CheckDateFormatAnalytics(row), axis=1)
    dfAnalytics = dfAnalytics[dfAnalytics.date != -1]
    dfAnalytics['date'] = dfAnalytics.apply(lambda row: formatDate(row),
                                            axis=1)

    print('-----Analytics Dataframe-----')

    #adwords
    adwordsCSV = adwords_pull.get_raw_report()

    dfAdwords = csv_parser.parseToCSV(adwordsCSV, "ADW")

    #REMOVE THE SPACE AFTER THE GID - WILL VARY DEPENDING ON CLIENTS
    GIDnew = []
    for dfAdwordsIndex, dfAdwordsRow in dfAdwords.iterrows():
        newGID = dfAdwordsRow['GID'].partition(" ")[0]

        GIDnew.append(newGID)

    dfAdwords = dfAdwords.drop(columns="GID")
    dfAdwords.loc[:, "GID"] = GIDnew

    print('-----Adwords Dataframe-----')

    sql = '''
    SELECT dfAdwords.Date, SUM(dfAdwords.Cost) AS Cost, dfAdwords.GID
    FROM dfAdwords
    GROUP BY dfAdwords.Date, dfAdwords.GID
    '''
    dfAdwords = pandasql.sqldf(sql, locals())

    print('-----Grouped Adwords Dataframe-----')

    #XML
    dfXML = process_xml.main(margins=True)

    dfXML['GID'] = dfXML['GID'].str.lower()
    dfAnalytics['productSku'] = dfAnalytics['productSku'].str.lower()

    print('-----Default XML Dataframe-----')

    sql = '''
    SELECT dfXML.Margin, dfXML.GID, dfXML.Brand
    FROM dfXML
    GROUP BY dfXML.Margin, dfXML.GID, dfXML.Brand
    '''

    dfXML = pandasql.sqldf(sql, locals())

    print('-----Grouped XML Dataframe-----')

    sql = '''
    SELECT dfXML.Margin, dfXML.Brand, dfAnalytics.date, dfAnalytics.itemQuantity, dfAnalytics.productSku,
    dfAnalytics.productName, dfAnalytics.itemRevenue
    FROM dfAnalytics
    INNER JOIN dfXML ON dfXML.GID = dfAnalytics.productSku
    '''
    dfXML = pandasql.sqldf(sql, locals())

    print('-----Joined XML Dataframe-----')
    print(dfXML)

    sql = '''
    SELECT dfXML.Margin, dfXML.Brand, dfXML.date, dfXML.itemQuantity, dfXML.productSku,
    dfXML.productName, dfXML.itemRevenue, dfAdwords.Cost
    FROM dfXML
    INNER JOIN dfAdwords ON dfXML.Date = dfAdwords.Date AND dfXML.productSku = dfAdwords.GID
    '''

    dfXML = pandasql.sqldf(sql, locals())
    print('-----Joined XML Dataframe-----')
    print(dfXML)

    newCost = []
    newROAS = []
    for dfXMLIndex, dfXMLRow in dfXML.iterrows():
        newVal = c.convert(dfXMLRow['Cost'] / 1000000, 'USD', 'YOUR_CURRENCY')
        newCost.append(newVal)
        if float(newVal) <= 0:
            newROAS.append(0)
        else:
            newROAS.append(float(dfXMLRow['itemRevenue']) / float(newVal))

    dfXML.loc[:, "newCost"] = newCost
    dfXML.loc[:, "newROAS"] = newROAS

    print('-----Final XML Dataframe-----')

    sql = '''
    SELECT 
    date,
    Margin,
    (SUM(CAST(itemRevenue as float64)) / sum(CAST(newCost as float64))) as ROAS,
    SUM(CAST(itemQuantity as int64)) as salesVolume
    FROM dfXML
    GROUP BY Margin, date
    '''
    dfXML = pandasql.sqldf(sql, locals())

    dfXML.to_gbq('DATASET_NAME.TABLE_NAME',
                 project_id='YOUR_PROJECT_ID',
                 chunksize=None,
                 if_exists='append',
                 table_schema=None,
                 location='LOCATION',
                 progress_bar=True,
                 credentials=google_auth.getCreds())
Пример #29
0
    def _populate(self, year):
        # New Year's Day
        if self.observed and date(year, JAN, 1):
            self[date(year, JAN, 1)] = "Año Nuevo [New Year's Day]"

        # The Three Wise Men Day
        if self.observed and date(year, JAN, 6):
            name = "Día de los Reyes Magos [The Three Wise Men Day] (Observed)"
            self[date(year, JAN, 6)] = name

        # The Three Wise Men Day
        if self.observed and date(year, FEB, 3):
            name = "Día de la virgen de Suyapa [Our Lady of Suyapa] (Observed)"
            self[date(year, FEB, 3)] = name

        # The Father's Day
        if self.observed and date(year, MAR, 19):
            name = "Día del Padre [Father's Day] (Observed)"
            self[date(year, MAR, 19)] = name

        # Maundy Thursday
        self[easter(year) +
             rd(weekday=TH(-1))] = "Jueves Santo [Maundy Thursday]"

        # Good Friday
        self[easter(year) + rd(weekday=FR(-1))] = "Viernes Santo [Good Friday]"

        # Holy Saturday
        self[easter(year) +
             rd(weekday=SA(-1))] = "Sábado de Gloria [Holy Saturday]"

        # Easter Sunday
        self[easter(year) +
             rd(weekday=SU(-1))] = "Domingo de Resurrección [Easter Sunday]"

        # America Day
        if self.observed and date(year, APR, 14):
            self[date(year, APR, 14)] = "Día de las Américas [America Day]"

        # Labor Day
        if self.observed and date(year, MAY, 1):
            self[date(year, MAY, 1)] = "Día del Trabajo [Labour Day]"

        # Mother's Day
        may_first = date(int(year), 5, 1)
        weekday_seq = may_first.weekday()
        mom_day = 14 - weekday_seq
        if self.observed and date(year, MAY, mom_day):
            str_day = "Día de la madre [Mother's Day] (Observed)"
            self[date(year, MAY, mom_day)] = str_day

        # Children's Day
        if self.observed and date(year, SEP, 10):
            name = "Día del niño [Children day] (Observed)"
            self[date(year, SEP, 10)] = name

        # Independence Day
        if self.observed and date(year, SEP, 15):
            name = "Día de la Independencia [Independence Day]"
            self[date(year, SEP, 15)] = name

        # Teacher's Day
        if self.observed and date(year, SEP, 17):
            name = "Día del Maestro [Teacher's day] (Observed)"
            self[date(year, SEP, 17)] = name

        # October Holidays are joined on 3 days starting at October 3 to 6.
        # Some companies work medium day and take the rest on saturday.
        # This holiday is variant and some companies work normally.
        # If start day is weekend is ignored.
        # The main objective of this is to increase the tourism.

        # https://www.hondurastips.hn/2017/09/20/de-donde-nace-el-feriado-morazanico/

        if year <= 2014:
            # Morazan's Day
            if self.observed and date(year, OCT, 3):
                self[date(year, OCT, 3)] = "Día de Morazán [Morazan's Day]"

            # Columbus Day
            if self.observed and date(year, OCT, 12):
                self[date(year, OCT, 12)] = "Día de la Raza [Columbus Day]"

            # Amy Day
            if self.observed and date(year, OCT, 21):
                str_day = "Día de las Fuerzas Armadas [Army Day]"
                self[date(year, OCT, 21)] = str_day
        else:
            # Morazan Weekend
            if self.observed and date(year, OCT, 3):
                name = "Semana Morazánica [Morazan Weekend]"
                self[date(year, OCT, 3)] = name

            # Morazan Weekend
            if self.observed and date(year, OCT, 4):
                name = "Semana Morazánica [Morazan Weekend]"
                self[date(year, OCT, 4)] = name

            # Morazan Weekend
            if self.observed and date(year, OCT, 5):
                name = "Semana Morazánica [Morazan Weekend]"
                self[date(year, OCT, 5)] = name

        # Christmas
        self[date(year, DEC, 25)] = "Navidad [Christmas]"
Пример #30
0
from collections import namedtuple, defaultdict, deque
from datetime import date
from dateutil.relativedelta import relativedelta, MO, TU, WE, TH, FR, SA, SU
from graphviz import Graph, Digraph
from itertools import groupby, product
from operator import itemgetter
from utils import _sanitize_username, _sanitize_question

# This is needed when obtaining date for last Monday, Tuesday, etc.
WEEKDAYS = {
    'Mon': MO(-1),
    'Tue': TU(-1),
    'Wed': WE(-1),
    'Thu': TH(-1),
    'Fri': FR(-1),
    'Sat': SA(-1),
    'Sun': SU(-1)
}

# Ordering months.
MONTHS = {
    'Jan': 1,
    'Feb': 2,
    'Mar': 3,
    'Apr': 4,
    'May': 5,
    'Jun': 6,
    'Jul': 7,
    'Aug': 8,
    'Sep': 9,
    'Oct': 10,