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}
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)
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())
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))
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)
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')
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
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)
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
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)
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
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
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"
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")
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]"
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)
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
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, })
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:
def handle(self) -> date: return self.result + relativedelta(weekday=SA(self.number))
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]")
def __init__(self, day): self.first_day = day + relativedelta(weekday=SU(-1)) self.last_day = day + relativedelta(weekday=SA(+1))
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)"
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())
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]"
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,