diff --git a/sickgear/processTV.py b/sickgear/processTV.py index 45f28304..46c2e464 100644 --- a/sickgear/processTV.py +++ b/sickgear/processTV.py @@ -14,8 +14,8 @@ # You should have received a copy of the GNU General Public License # along with SickGear. If not, see . +from datetime import datetime, timezone from functools import partial -import datetime import os import re import shutil @@ -570,7 +570,7 @@ class ProcessTVShow(object): archives = [os.path.basename(x) for x in unused_files] if unused_files: for f in unused_files: - archive_history.setdefault(f, SGDatetime.timestamp_near(datetime.datetime.utcnow())) + archive_history.setdefault(f, SGDatetime.timestamp_near(datetime.now(timezone.utc))) if init_history_cnt != len(archive_history): try: diff --git a/sickgear/providers/filesharingtalk.py b/sickgear/providers/filesharingtalk.py index 1030e272..a2fa748c 100644 --- a/sickgear/providers/filesharingtalk.py +++ b/sickgear/providers/filesharingtalk.py @@ -14,7 +14,7 @@ # You should have received a copy of the GNU General Public License # along with SickGear. If not, see . -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone import difflib import re import time @@ -154,7 +154,7 @@ class FSTProvider(generic.NZBProvider): rls_dt = None age_arg = 'hours' if 'hour' in age_dim else 'days' if 'day' in age_dim else None if age_arg: - rls_dt = datetime.utcnow() - timedelta(**{age_arg: float(age_value)}) + rls_dt = datetime.now(timezone.utc) - timedelta(**{age_arg: float(age_value)}) info_url = self._link(tr['data-url'].strip()) except (AttributeError, TypeError, ValueError): continue diff --git a/sickgear/webserve.py b/sickgear/webserve.py index 2505ba9c..f5a6d7c3 100644 --- a/sickgear/webserve.py +++ b/sickgear/webserve.py @@ -16,12 +16,12 @@ # along with SickGear. If not, see . # noinspection PyProtectedMember +from datetime import datetime, timedelta, timezone from mimetypes import MimeTypes from urllib.parse import urljoin import base64 import copy -import datetime import glob import hashlib import io @@ -440,8 +440,8 @@ class CalendarHandler(BaseHandler): logger.log(f'Receiving iCal request from {self.request.remote_ip}') # Limit dates - past_date = (datetime.date.today() + datetime.timedelta(weeks=-52)).toordinal() - future_date = (datetime.date.today() + datetime.timedelta(weeks=52)).toordinal() + past_date = (datetime.date.today() + timedelta(weeks=-52)).toordinal() + future_date = (datetime.date.today() + timedelta(weeks=52)).toordinal() utc = tz.gettz('GMT', zoneinfo_priority=True) # Get all the shows that are not paused and are currently on air @@ -473,8 +473,7 @@ class CalendarHandler(BaseHandler): for episode in episode_list: air_date_time = network_timezones.parse_date_time(episode['airdate'], show['airs'], show['network']).astimezone(utc) - air_date_time_end = air_date_time + datetime.timedelta( - minutes=helpers.try_int(show['runtime'], 60)) + air_date_time_end = air_date_time + timedelta(minutes=helpers.try_int(show['runtime'], 60)) # Create event for episode desc = '' if not episode['description'] else f'{nl}{episode["description"].splitlines()[0]}' @@ -1123,12 +1122,12 @@ class MainHandler(WebHandler): """ display the episodes """ today_dt = datetime.date.today() today = today_dt.toordinal() - yesterday_dt = today_dt - datetime.timedelta(days=1) + yesterday_dt = today_dt - timedelta(days=1) yesterday = yesterday_dt.toordinal() - tomorrow = (datetime.date.today() + datetime.timedelta(days=1)).toordinal() - next_week_dt = (datetime.date.today() + datetime.timedelta(days=7)) - next_week = (next_week_dt + datetime.timedelta(days=1)).toordinal() - recently = (yesterday_dt - datetime.timedelta(days=sickgear.EPISODE_VIEW_MISSED_RANGE)).toordinal() + tomorrow = (datetime.date.today() + timedelta(days=1)).toordinal() + next_week_dt = (datetime.date.today() + timedelta(days=7)) + next_week = (next_week_dt + timedelta(days=1)).toordinal() + recently = (yesterday_dt - timedelta(days=sickgear.EPISODE_VIEW_MISSED_RANGE)).toordinal() done_show_list = [] qualities = Quality.SNATCHED + Quality.DOWNLOADED + Quality.ARCHIVED + [IGNORED, SKIPPED] @@ -1281,8 +1280,8 @@ class MainHandler(WebHandler): sql_result.sort(key=sorts[sickgear.EPISODE_VIEW_SORT]) - t.next_week = datetime.datetime.combine(next_week_dt, datetime.time(tzinfo=network_timezones.SG_TIMEZONE)) - t.today = datetime.datetime.now(network_timezones.SG_TIMEZONE) + t.next_week = datetime.combine(next_week_dt, datetime.time(tzinfo=network_timezones.SG_TIMEZONE)) + t.today = datetime.now(network_timezones.SG_TIMEZONE) t.sql_results = sql_result return t.respond() @@ -1331,7 +1330,7 @@ class MainHandler(WebHandler): @staticmethod def get_footer_time(change_layout=True, json_dump=True): - now = datetime.datetime.now() + now = datetime.now() events = [ ('recent', sickgear.search_recent_scheduler.time_left), ('backlog', sickgear.search_backlog_scheduler.next_backlog_timeleft), @@ -5235,7 +5234,7 @@ class AddShows(Home): age_args.update({dim: value}) if age_args: - dt = datetime.datetime.utcnow() + dt = datetime.now(timezone.utc) if 'months' in age_args and 'days' in age_args: age_args['days'] -= 1 dt += relativedelta(day=1) @@ -5362,8 +5361,7 @@ class AddShows(Home): airtime = cur_show_info.airs_time if not airtime or (0, 0) == (airtime.hour, airtime.minute): airtime = dateutil.parser.parse('23:59').time() - dt = datetime.datetime.combine( - dateutil.parser.parse(cur_show_info.firstaired, parseinfo).date(), airtime) + dt = datetime.combine(dateutil.parser.parse(cur_show_info.firstaired, parseinfo).date(), airtime) ord_premiered, str_premiered, started_past, oldest_dt, newest_dt, oldest, newest, _, _, _, _ \ = self.sanitise_dates(dt, oldest_dt, newest_dt, oldest, newest) @@ -5699,7 +5697,7 @@ class AddShows(Home): footnote = None filtered = [] - today = datetime.datetime.today() + today = datetime.today() months = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] this_month = '%s-%s' % (months[today.month], today.strftime('%Y')) @@ -5720,8 +5718,8 @@ class AddShows(Home): dt_prev_month = dateutil.parser.parse('1-%s' % prev_month) except (BaseException, Exception): prev_month = None - get_prev_month = (lambda _dt: _dt.replace(day=1) - datetime.timedelta(days=1)) - get_next_month = (lambda _dt: _dt.replace(day=28) + datetime.timedelta(days=5)) + get_prev_month = (lambda _dt: _dt.replace(day=1) - timedelta(days=1)) + get_next_month = (lambda _dt: _dt.replace(day=28) + timedelta(days=5)) get_month_year = (lambda _dt: '%s-%s' % (months[_dt.month], _dt.strftime('%Y'))) if prev_month: dt_next_month = get_next_month(dt_prev_month) @@ -6013,18 +6011,17 @@ class AddShows(Home): @staticmethod def sanitise_dates(date, oldest_dt, newest_dt, oldest, newest, episode_info=None, combine_ep_airtime=False): parseinfo = dateutil.parser.parserinfo(dayfirst=False, yearfirst=True) - dt = date if isinstance(date, datetime.datetime) else dateutil.parser.parse(date) + dt = date if isinstance(date, datetime) else dateutil.parser.parse(date) if episode_info: airtime = episode_info.airtime \ or episode_info.timestamp and SGDatetime.from_timestamp(episode_info.timestamp).time() if not airtime or (0, 0) == (airtime.hour, airtime.minute): airtime = dateutil.parser.parse('23:59').time() if combine_ep_airtime: - dt = datetime.datetime.combine( - dateutil.parser.parse(date, parseinfo).date(), airtime) + dt = datetime.combine(dateutil.parser.parse(date, parseinfo).date(), airtime) ord_premiered = dt.toordinal() - ord_now = datetime.datetime.now().toordinal() + ord_now = datetime.now().toordinal() started_past = ord_premiered < ord_now str_premiered = SGDatetime.sbfdate(dt) # an invalid dt becomes '' (e.g. 0202-12-28) if str_premiered: @@ -6042,8 +6039,7 @@ class AddShows(Home): return_past = False if episode_info: # noinspection PyUnboundLocalVariable - dt_returning = datetime.datetime.combine( - dateutil.parser.parse(episode_info.firstaired, parseinfo).date(), airtime) + dt_returning = datetime.combine(dateutil.parser.parse(episode_info.firstaired, parseinfo).date(), airtime) ord_returning = dt_returning.toordinal() return_past = ord_returning < ord_now @@ -6531,10 +6527,8 @@ class Manage(MainHandler): d_status, d_qual = Quality.split_composite_status(cur_result_event['action']) if None is s_status and cur_result_event['action'] in Quality.SNATCHED_ANY: s_status, s_quality = Quality.split_composite_status(cur_result_event['action']) - aged = ((datetime.datetime.now() - - datetime.datetime.strptime(str(cur_result_event['date']), - sickgear.history.dateFormat)) - .total_seconds()) + aged = ((datetime.now() - datetime.strptime(str(cur_result_event['date']), + sickgear.history.dateFormat)).total_seconds()) h = 60 * 60 d = 24 * h days = aged // d @@ -7750,7 +7744,7 @@ class History(MainHandler): key=lambda y: y.get('fails')[0].get('timestamp'), reverse=True) t.provider_fail_stats = sorted([item for item in t.provider_fail_stats], - key=lambda y: y.get('next_try') or datetime.timedelta(weeks=65535), + key=lambda y: y.get('next_try') or timedelta(weeks=65535), reverse=False) def img(_item, as_class=False): @@ -7786,7 +7780,7 @@ class History(MainHandler): key=lambda y: y.get('fails')[0].get('timestamp'), reverse=True) t.domain_fail_stats = sorted([item for item in t.domain_fail_stats], - key=lambda y: y.get('next_try') or datetime.timedelta(weeks=65535), + key=lambda y: y.get('next_try') or timedelta(weeks=65535), reverse=False) article_match = r'^((?:A(?!\s+to)n?)|The)\s+(.*)$' @@ -7862,7 +7856,7 @@ class History(MainHandler): my_db = db.DBConnection() my_db.action('UPDATE history SET hide = ? WHERE date < ' + str( - (datetime.datetime.now() - datetime.timedelta(days=30)).strftime(history.dateFormat)), [1]) + (datetime.now() - timedelta(days=30)).strftime(history.dateFormat)), [1]) ui.notifications.message('Removed history entries greater than 30 days old') self.redirect('/history/') @@ -9822,8 +9816,7 @@ class CachedImages(MainHandler): dummy_file = '%s.%s.dummy' % (os.path.splitext(filename)[0], source) if os.path.isfile(dummy_file): if os.stat(dummy_file).st_mtime \ - < (SGDatetime.timestamp_near(datetime.datetime.now() - - datetime.timedelta(days=days, minutes=minutes))): + < (SGDatetime.timestamp_near(datetime.now() - timedelta(days=days, minutes=minutes))): CachedImages.delete_dummy_image(dummy_file) else: result = False @@ -9928,7 +9921,7 @@ class CachedImages(MainHandler): """ if not os.path.isfile(filename) or \ os.stat(filename).st_mtime < \ - SGDatetime.timestamp_near(td=datetime.timedelta(days=days)): + SGDatetime.timestamp_near(td=timedelta(days=days)): return True return False