def __init__(self, stdabbr, stdoffset=None, dstabbr=None, dstoffset=None, start=None, end=None): global relativedelta from dateutil import relativedelta self._std_abbr = stdabbr self._dst_abbr = dstabbr try: stdoffset = _total_seconds(stdoffset) except (TypeError, AttributeError): pass try: dstoffset = _total_seconds(dstoffset) except (TypeError, AttributeError): pass if stdoffset is not None: self._std_offset = datetime.timedelta(seconds=stdoffset) else: self._std_offset = ZERO if dstoffset is not None: self._dst_offset = datetime.timedelta(seconds=dstoffset) elif dstabbr and stdoffset is not None: self._dst_offset = self._std_offset + datetime.timedelta(hours=+1) else: self._dst_offset = ZERO if dstabbr and start is None: self._start_delta = relativedelta.relativedelta( hours=+2, month=4, day=1, weekday=relativedelta.SU(+1)) else: self._start_delta = start if dstabbr and end is None: self._end_delta = relativedelta.relativedelta( hours=+1, month=10, day=31, weekday=relativedelta.SU(-1)) else: self._end_delta = end self._dst_base_offset_ = self._dst_offset - self._std_offset self.hasdst = bool(self._start_delta)
def check_date(timeslot): try: scheduled_time = parse(timeslot) except ParserError: return "I couldn't parse the date, please use YYYY-MM-DD HH:00 UTC." logging.debug(f"{scheduled_time=}") if scheduled_time.minute or scheduled_time.second: return "We only schedule talks at the beginning of the hour." with open(Path("../speakers_corner_talks.yml")) as f: other_times = { talk["time"].replace(tzinfo=pytz.UTC) for talk in yaml.load(f) } nearby = {scheduled_time + timedelta(hours=n) for n in (-1, 0, 1)} if nearby & other_times: return ("I found another talk within one hour time" " difference, please use another time slot.") # Mailing list updates are on Sunday, we require at least 2 updates between now # and the talk now = datetime.now(tz=pytz.UTC) if (now + relativedelta.relativedelta(weekday=relativedelta.SU(2)) > scheduled_time): return "The earliest you may schedule is the week after next."
def get_sunday(): """ Gets the last calendar Sunday. :return sun: datetime object for Sunday. """ today = datetime.datetime.now() start = today - datetime.timedelta((today.weekday() + 1) % 7) sun = start + relativedelta.relativedelta(weekday=relativedelta.SU(-1)) return sun
def test_weekly_custom_value(self): today = dt.today() - timedelta(days=123) res = dh.weekly(today) # whoa - why rd.SU? because to prevent overlap between periods # (ie: two periods sharing the same saturday) we only go # backwards 6 days in time. self.assertEqual(res[0], today + rd.relativedelta(weekday=rd.SU(-1))) self.assertEqual(res[1], today + rd.relativedelta(weekday=rd.SA)) self.assertEqual(res[2], today)
def test_prev_weekly_digest_date(self): today = date(year=2012, month=02, day=28) digestobj, created = dh.get_create_digest_feed(self.get_user(), self.feedobj, 'weekly', 'sun') digestobj.date_last_digest = today digestobj.save() prev_dt = dh.date_prev_digest(digestobj, today) self.assertEqual(prev_dt, today - rd.relativedelta(weekday=rd.SU(-1)))
def week_started_date(as_datetime=False): today = datetime.datetime.utcnow() start = today - datetime.timedelta((today.weekday() + 1) % 7) dt = start + relativedelta.relativedelta(weekday=relativedelta.SU(-1)) if as_datetime: return dt return dt.strftime("%Y-%m-%d")
def _delta(self, x, isend=0): from dateutil import relativedelta kwargs = {} if x.month is not None: kwargs["month"] = x.month if x.weekday is not None: kwargs["weekday"] = relativedelta.weekday(x.weekday, x.week) if x.week > 0: kwargs["day"] = 1 else: kwargs["day"] = 31 elif x.day: kwargs["day"] = x.day elif x.yday is not None: kwargs["yearday"] = x.yday elif x.jyday is not None: kwargs["nlyearday"] = x.jyday if not kwargs: # Default is to start on first sunday of april, and end # on last sunday of october. if not isend: kwargs["month"] = 4 kwargs["day"] = 1 kwargs["weekday"] = relativedelta.SU(+1) else: kwargs["month"] = 10 kwargs["day"] = 31 kwargs["weekday"] = relativedelta.SU(-1) if x.time is not None: kwargs["seconds"] = x.time else: # Default is 2AM. kwargs["seconds"] = 7200 if isend: # Convert to standard time, to follow the documented way # of working with the extra hour. See the documentation # of the tzinfo class. delta = self._dst_offset - self._std_offset kwargs["seconds"] -= delta.seconds + delta.days * 86400 return relativedelta.relativedelta(**kwargs)
def get_datetime(t): # get start and end of this week week_s = t + relativedelta.relativedelta( hour=0, minute=0, second=0, weekday=relativedelta.MO(-1)) week_e = t + relativedelta.relativedelta( hour=23, minute=59, second=59, weekday=relativedelta.SU(0)) month_s = t + relativedelta.relativedelta( hour=0, minute=0, second=0, day=1) month_e = t + relativedelta.relativedelta( hour=23, minute=59, second=59, day=1, months=1, days=-1) day_s = t + relativedelta.relativedelta(hour=0, minute=0, second=0) day_e = t + relativedelta.relativedelta(hour=23, minute=59, second=59) return week_s, week_e, month_s, month_e, day_s, day_e
def get_time_stamp(time_frame): today = datetime.now() if time_frame.name == 'Week': today = datetime.now() start = today - timedelta((today.weekday() + 1) % 7) last_sunday = start + relativedelta.relativedelta(weekday=relativedelta.SU(-1)) return last_sunday elif time_frame.name == 'Month': return datetime(today.year, today.month, 1, tzinfo=tz.tzutc()) elif time_frame.name == 'Year': return datetime(today.year, 1, 1, tzinfo=tz.tzutc()) else: # return timestamp for beginning of current day return datetime(today.year, today.month, today.day, tzinfo=tz.tzutc())
def _get_playlists(self, playlist_xml): xmlparser = etree.XMLParser( ns_clean=True, recover=True, encoding='utf-8') tree = etree.fromstring(playlist_xml, parser=xmlparser) data = [] playlists = tree.xpath('//RVPlaylistNode[@type="3"]') playlists = [ x for x in playlists if x.attrib['displayName'].lower() not in EXCLUDE_LOWER ] for pl in playlists: songs = pl.xpath('array/RVDocumentCue') song_names = [ x.attrib['displayName'] for x in songs if x.attrib['displayName'].lower() not in EXCLUDE_LOWER ] if len(song_names) < 2: # unlikely to be a setlist continue date = None for attr in ('displayName', 'modifiedDate'): value = pl.attrib[attr] # If this is an actual date, it is probably not dayfirst dayfirst = 'Date' not in attr try: date = date_parser.parse(value, dayfirst=dayfirst) except ValueError: pass else: break sunday = date + relativedelta.relativedelta( weekday=relativedelta.SU(-1) ) data.append({ 'date': sunday.date(), 'modified': pl.attrib['modifiedDate'], 'uid': pl.attrib['UUID'], 'name': pl.attrib['displayName'].strip(), 'songs': song_names, }) data.sort(key=lambda x: x['date']) return data
def meetup_day(year, month, targetday, targetweek): weekdays = dict(zip(list(calendar.day_name), range(7))) steps = dict(zip(['1st', '2nd', '3rd', '4th', 'last'], range(7, 36, 7))) steps['teenth'] = 19 targetday = weekdays[targetday] getDay = { 0: relativedelta.MO(-1), 1: relativedelta.TU(-1), 2: relativedelta.WE(-1), 3: relativedelta.TH(-1), 4: relativedelta.FR(-1), 5: relativedelta.SA(-1), 6: relativedelta.SU(-1), } d = datetime.date(year, month, 1) + relativedelta.relativedelta( day=steps[targetweek], weekday=getDay[targetday]) return d
def all_weekdays(year, month, week, day_of_week): dt = date(year, month, 1) if week == 'last': clean_week = int(-1) if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12: day_offset = 31 elif month == 2: day_offset = 28 else: day_offset = 30 else: clean_week = +int(week.strip("stndrh")) day_offset = 0 if day_of_week == 'Monday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.MO(clean_week)) return the_date elif day_of_week == 'Tuesday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.TU(clean_week)) return the_date elif day_of_week == 'Wednesday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.WE(clean_week)) return the_date elif day_of_week == 'Thursday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.TH(clean_week)) return the_date elif day_of_week == 'Friday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.FR(clean_week)) return the_date elif day_of_week == 'Saturday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.SA(clean_week)) return the_date elif day_of_week == 'Sunday': the_date = dt + rdelta.relativedelta(days=day_offset, weekday=rdelta.SU(clean_week)) return the_date
def _last_interval(self): dr = self.date_range if 'days' in dr: __, num, interval = dr.split() end = end_of_day(self.pivot) start = start_of_day(end + timezone.timedelta(days=-int(num))) elif 'week' in dr: start = start_of_day( self.pivot) + rdelta.relativedelta(weekday=rdelta.SU(-2)) end = end_of_day(self.pivot) + rdelta.relativedelta( weeks=-1, weekday=rdelta.SA(1)) elif 'month' in dr: start = start_of_day(self.pivot) + rdelta.relativedelta(months=-1, day=1) end = end_of_day(self.pivot) + rdelta.relativedelta(months=-1, day=31) elif 'year' in dr: start = start_of_day(self.pivot) + rdelta.relativedelta( years=-1, month=1, day=1) end = end_of_day(self.pivot) + rdelta.relativedelta( years=-1, month=12, day=31) return start, end
def handle(self, *args, **options): logger = logging.getLogger("management") url = "https://rest.tsheets.com/api/v1/timesheets" querystring = { "start_date": options["start_date"], "end_date": options["end_date"], "on_the_clock": "no", "per_page": 50, "page": 1, } def get_token(): return os.environ["TSHEETS_TOKEN"] headers = {"Authorization": f"Bearer {get_token()}"} more = True while more: response = requests.request("GET", url, headers=headers, params=querystring) if response.status_code != 200: if response.status_code == 429: # Too Many Requests sleep(5 * 60) # Sleep for 5 minutes else: response.raise_for_status() response = response.json() for user in response.get("supplemental_data", {}).get("users", {}).values(): tsheets_user = create_model_from_dict(TSheetsUser, user) jobdiva_user = Candidate.objects.filter( EMAIL=user["email"].lower()).first() if not jobdiva_user: logger.error( f'Jobdiva Candidate {user["email"]} not found while loading tsheets models' ) sentry_sdk.capture_message( f'Jobdiva Candidate {user["email"]} not found while loading tsheets models' ) continue else: jobdiva_user.tsheets_user = tsheets_user jobdiva_user.save() for jobcode in response["supplemental_data"].get("jobcodes", {}).values(): create_model_from_dict(JobCode, jobcode) timesheets = response["results"]["timesheets"].values() logger.info(f"Found {len(timesheets)} timesheets") for timesheet in timesheets: _type = timesheet.pop("type") if _type == "regular": model_obj = create_model_from_dict(RegularTimesheet, timesheet) elif _type == "manual": model_obj = create_model_from_dict(ManualTimesheet, timesheet) next_sunday = relativedelta.relativedelta( weekday=relativedelta.SU(1)) timesheet_entry, _ = TimesheetEntry.objects.get_or_create( weekendingdate=( datetime.strptime(model_obj.date, "%Y-%m-%d") + next_sunday).date(), user=model_obj.user, ) model_obj.timesheet_entry = timesheet_entry model_obj.save() more = bool(response["more"]) querystring.update({"page": querystring["page"] + 1})
def get_n_sundays_ago(n): today = datetime.now() n_sundays_ago = relativedelta.relativedelta(weekday=relativedelta.SU(-n)) return (today + n_sundays_ago).strftime("%Y-%m-%d")
def OnActionMenu(self, event=None): id = event.GetId() dateJour = datetime.date.today() if id == ID_AUJOURDHUI: self.SetDate(dateJour) if id == ID_HIER: self.SetDate(dateJour - datetime.timedelta(days=1)) if id == ID_DEMAIN: self.SetDate(dateJour + datetime.timedelta(days=1)) # Semaine if id == ID_SEMAINE_ACTUELLE + 1: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.MO(-1)) self.SetDate(date) if id == ID_SEMAINE_ACTUELLE + 2: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.MO(-1)) self.SetDate(date + datetime.timedelta(days=6)) if id == ID_SEMAINE_PRECEDENTE + 1: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.SU(-1)) self.SetDate(date - datetime.timedelta(days=6)) if id == ID_SEMAINE_PRECEDENTE + 2: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.SU(-1)) self.SetDate(date) if id == ID_SEMAINE_SUIVANTE + 1: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.MO(+1)) self.SetDate(date) if id == ID_SEMAINE_SUIVANTE + 2: date = dateJour + relativedelta.relativedelta( weekday=relativedelta.MO(+1)) self.SetDate(date + datetime.timedelta(days=6)) # Mois if id == ID_MOIS_ACTUEL + 1: self.SetDate(datetime.date(dateJour.year, dateJour.month, 1)) if id == ID_MOIS_ACTUEL + 2: mois = calendar.monthrange(dateJour.year, dateJour.month) self.SetDate(datetime.date(dateJour.year, dateJour.month, mois[1])) if id == ID_MOIS_PRECEDENT + 1: date = dateJour + relativedelta.relativedelta(months=-1) self.SetDate(datetime.date(date.year, date.month, 1)) if id == ID_MOIS_PRECEDENT + 2: date = dateJour + relativedelta.relativedelta(months=-1) mois = calendar.monthrange(date.year, date.month) self.SetDate(datetime.date(date.year, date.month, mois[1])) if id == ID_MOIS_SUIVANT + 1: date = dateJour + relativedelta.relativedelta(months=+1) self.SetDate(datetime.date(date.year, date.month, 1)) if id == ID_MOIS_SUIVANT + 2: date = dateJour + relativedelta.relativedelta(months=+1) mois = calendar.monthrange(date.year, date.month) self.SetDate(datetime.date(date.year, date.month, mois[1])) # Année if id == ID_ANNEE_ACTUELLE + 1: self.SetDate(datetime.date(dateJour.year, 1, 1)) if id == ID_ANNEE_ACTUELLE + 2: self.SetDate(datetime.date(dateJour.year, 12, 31)) if id == ID_ANNEE_PRECEDENTE + 1: date = dateJour + relativedelta.relativedelta(years=-1) self.SetDate(datetime.date(date.year, 1, 1)) if id == ID_ANNEE_PRECEDENTE + 2: date = dateJour + relativedelta.relativedelta(years=-1) self.SetDate(datetime.date(date.year, 12, 31)) if id == ID_ANNEE_SUIVANTE + 1: date = dateJour + relativedelta.relativedelta(years=+1) self.SetDate(datetime.date(date.year, 1, 1)) if id == ID_ANNEE_SUIVANTE + 2: date = dateJour + relativedelta.relativedelta(years=+1) self.SetDate(datetime.date(date.year, 12, 31)) if id == ID_AIDE: from Utils import UTILS_Aide UTILS_Aide.Aide("Slectionnerunedate")
def following_sunday(dt): rd = reldate.relativedelta(weekday=reldate.SU(+1), hours=+8) rd2 = reldate.relativedelta(hour=8, minute=0, second=0, microsecond=0) return dt + rd + rd2
def get_mothers_day_date(year): """Given the passed in year int, return the date Mother's Day is celebrated assuming it's the 2nd Sunday of May.""" return date(year, 5, 1) + rd.relativedelta(weekday=rd.SU(+2))
def get_time_zone_1970(city_id, birth_date): pd.set_option('use_inf_as_null', True) time_tabs = pd.read_csv(path + 'time_tabs.csv', header=None, index_col=0, names=('table_number', 'date_start', 'zone_type')) city_np = np.load('astro/data/atlas/city_table_np.npy') latitude = city_np[city_id][0] # ['new_lat'] longitude = city_np[city_id][1] # ['new_long'] zone_type_field6 = int(city_np[city_id][2]) # ['time_zone'] time_type_field7 = int(city_np[city_id][3]) # ['zone_type'] py_tz_name = int(city_np[city_id][4]) # ['tz_name'] stored_time_zone = city_np[city_id][5] # ['n_time_zone'] stored_dst = city_np[city_id][6] # ['dst'] time_deconstruct = birth_date.timetuple() date_year = time_deconstruct[0] date_month = time_deconstruct[1] date_day = time_deconstruct[2] date_hour = time_deconstruct[3] date_min = time_deconstruct[4] dst = 0. final_zone = 0.0 date_change = date_year * 624000 + date_month * 48000 + date_day * 1500 + date_hour * 60 + date_min # date_change = 1239496620 # print date_change, zone_type_field6, time_type_field7 message = 0 if zone_type_field6 < 12000: final_zone = zone_type_field6 # print "Starting Time Zone: ", time_type_field7 else: while zone_type_field6 > 12000: zone_type_field6 = zone_type_field6 - 12000 # print 'Initial zone: ', zone_type_field6 z = time_tabs.loc[zone_type_field6:zone_type_field6].copy() len_table = len(z.index) i = 1 starting_date = z['date_start'].iloc[0] # print z['date_start'].iloc[i] while i < len_table: if date_change < starting_date: final_zone = longitude * 60 dst = 0. message = 30 break else: if starting_date <= date_change < z['date_start'].iloc[i]: final_zone = z['zone_type'].iloc[i - 1] zone_type_field6 = z['zone_type'].iloc[i - 1] break i += 1 # print "Find out DST",time_type_field7,dst if time_type_field7 > 30001: if time_type_field7 == 30002: if zone_type_field6 == 4500: dst = 0. else: dst = 1. if time_type_field7 == 30003: if zone_type_field6 == 4500: dst = 0. else: time_type_field7 = 30001 if time_type_field7 < 50: if time_type_field7 == 2: dst = 1. if time_type_field7 == 3: dst = 2. if time_type_field7 == 4: dst = .5 if time_type_field7 == 6: dst = 20. / 60 if time_type_field7 == 7: dst = 40. / 60 if 50 < time_type_field7 < 30000: while 50 < time_type_field7 < 30000: time_type_field7 = time_type_field7 - 50 # print time_type_field7, 'First Pass' z = time_tabs.loc[time_type_field7:time_type_field7].copy() # print z, date_change if z.iloc[0]['zone_type'] == 30004 and date_change < 1222753500: message = 10 # illinois if z.iloc[0]['zone_type'] == 30005 and date_change < 1222753500: message = 20 # Pennyslvania len_table = len(z.index) i = 1 starting_date = z['date_start'].iloc[0] # print starting_date # print z['date_start'].iloc[i] while i < len_table: if date_change < starting_date: dst = 0. final_zone = longitude * 60 message = 30 break else: # print 'i am here' if starting_date <= date_change < z['date_start'].iloc[i]: # print 'zone_type', z['zone_type'].iloc[i - 1] time_type_field7 = z['zone_type'].iloc[i - 1] dst = z['zone_type'].iloc[i - 1] # print 'DST',z['zone_type'].iloc[i - 1] if dst == 2: dst = 1. if dst == 3: dst = 2. if dst == 4: dst = .5 if dst == 6: dst = 20. / 60 if dst == 7: dst = 40. / 60 break i += 1 if message == 10 and dst == 1: message = 10 elif message == 20 and dst == 1: message = 20 elif message == 30 and dst == 0: message = 30 else: message = 0 # print time_type_field7,dst,message if time_type_field7 == 30001: # cutoff date is 1987 4 26 2 am # next cut off is 2007 3 11 2 am 1252528620 # After 2007 if date_change > 1252528620: date_dst_last = datetime(date_year, 3, date_day, 2, 0) + relativedelta.relativedelta \ (day=1, weekday=relativedelta.SU(2)) date_change_dst = date_dst_last.year * 624000 + date_dst_last.month * 48000 + date_dst_last.day * 1500 + 120 # + date_min # print 'post 2007-3-11-2am', date_change_dst date_std_last = datetime(date_year, 10, date_day, 2, 0) + relativedelta.relativedelta \ (day=31, weekday=relativedelta.SU(1)) date_change_std = date_std_last.year * 624000 + date_std_last.month * 48000 + date_std_last.day * 1500 + 120 # + date_min # print 'date of change post 2007', date_year, 'dst: ', date_dst_last, 'std: ', date_std_last, 'dst', dst # print date_change, date_change_dst, date_change_std if date_change < date_change_dst: dst = 0. # print 'i am here - std time pre dst(2007) ' else: if date_change < (date_change_dst + 24 * 60): # print "Message: Please make sure you have correct time as we are switching" dst = 1. elif date_change < date_change_std: dst = 1. # print ' i am now dst post(2007)' if date_change_std <= date_change <= (date_change_std + 24 * 60): # print "Message: Please make sure you have correct time as we are switching back to std" dst = 0. elif date_change > date_change_std: # print 'back to std time post 2007' dst = 0. # first sunday of april to last sunday in october up to 2007 if date_change >= 1240087620 and date_change < 1252528620: date_dst_last = datetime(date_year, 3, date_day, 0, 0) + relativedelta.relativedelta \ (day=30, weekday=relativedelta.SU(1)) date_change_dst = date_dst_last.year * 624000 + date_dst_last.month * 48000 + date_dst_last.day * 1500 + 120 # + date_min date_std_last = datetime(date_year, 10, date_day, 0, 0) + relativedelta.relativedelta \ (day=31, weekday=relativedelta.SU(-1)) date_change_std = date_std_last.year * 624000 + date_std_last.month * 48000 + date_std_last.day * 1500 + 120 # + date_min # print 'date of change pre 1987-NAREN', date_year, 'dst: ', date_dst_last, 'std: ', date_std_last, 'dst', dst # print date_change, date_change_dst if date_change < date_change_dst: dst = 0. # print 'i am here - std time pre dst(2007) ' else: if date_change < (date_change_dst + 24 * 60): # print "Message: Please make sure you have correct time as we are switching" dst = 1. elif date_change < date_change_std: dst = 1. # print ' i am now dst post(2007)' if date_change_std <= date_change <= (date_change_std + 24 * 60): # print "Message: Please make sure you have correct time as we are switching back to std" dst = 0. elif date_change > date_change_std: # print 'back to std time post 2007' dst = 0. # last sunday of april to last sunday in october up to 1987 april 5 2 am if date_change < 1240087620: date_dst_last = datetime(date_year, 4, date_day, 2, 0) + relativedelta.relativedelta \ (day=30, weekday=relativedelta.SU(-1)) date_change_dst = date_dst_last.year * 624000 + date_dst_last.month * 48000 + date_dst_last.day * 1500 + 120 date_std_last = datetime(date_year, 10, date_day, 2, 0) + relativedelta.relativedelta \ (day=31, weekday=relativedelta.SU(-1)) date_change_std = date_std_last.year * 624000 + date_std_last.month * 48000 + date_std_last.day * 1500 + 120 # print 'date of change pre 1987-naren', date_year, 'dst: ', date_dst_last, 'std: ', date_std_last, 'dst', dst # print date_change, date_change_dst, date_change_std if date_change < date_change_dst: dst = 0. # print 'i am here - std time pre dst(2007) ' else: if date_change < (date_change_dst + 24 * 60): # print "Message: Please make sure you have correct time as we are switching" dst = 1. elif date_change < date_change_std: dst = 1. # print ' i am now dst post(2007)' if date_change_std <= date_change <= (date_change_std + 24 * 60): # print "Message: Please make sure you have correct time as we are switching back to std" dst = 0. elif date_change > date_change_std: # print 'back to std time post 2007' dst = 0. final_zone = -final_zone / 900. return latitude, longitude, final_zone, float( dst), py_tz_name, stored_time_zone, stored_dst, message, 0
# domain = https://www.antiochca.gov cur_dir = os.getcwd() save_dir = cur_dir + "/data/arrests/" if not os.path.exists(save_dir): os.makedirs(save_dir) html_page = requests.get(webpage).text today = datetime.datetime.now() start = today - datetime.timedelta((today.weekday() + 1) % 7) sat = start + relativedelta.relativedelta(weekday=relativedelta.SA(-1)) sun = sat + relativedelta.relativedelta(weekday=relativedelta.SU(-1)) # Gave up on trying to use strptime to strip the time sat_date = str(sat).replace("-", "_").split() sun_date = str(sun).replace("-", "_").split() file_name = "arrest_reports_" + str(sun_date[0]) + "_" + str(sat_date[0]) print(file_name) def get_files(): # file_name = line_list[1].replace(" ", "_")[:-1] # file_name = save_dir + file_name # document = requests.get(url_2, allow_redirects=True) pdf = urllib.request.urlopen(webpage) with open(save_dir + file_name + ".pdf", "wb") as file: file.write(pdf.read())
import logging import os from datetime import datetime from dateutil import relativedelta from functools import wraps from time import sleep from zeep import Client DATETIME_STRING_FMT = "%Y-%m-%d" one_sunday_ago = relativedelta.relativedelta(weekday=relativedelta.SU(-5)) last_sunday_string = (datetime.now() + one_sunday_ago).strftime(DATETIME_STRING_FMT) two_mondays_ago = relativedelta.relativedelta(weekday=relativedelta.MO(-6)) two_mondays_ago_string = (datetime.now() - two_mondays_ago).strftime(DATETIME_STRING_FMT) RETRY_ATTEMPTS = 2 class BaseJobDivaClient: def __init__(self, service): self.username = os.environ["JOBDIVA_USERNAME"] self.password = os.environ["JOBDIVA_PASSWORD"] self.logger = logging.getLogger(f"JobDivaClient - {service}") self._client = Client( f"https://ws.jobdiva.com/axis2-1.6.1/services/{service}?wsdl") for method_name in dir(self._client.service): if not method_name.startswith("__"):