Skip to content

Commit c5391c1

Browse files
authored
Merge pull request #58 from sirstudly/2_103
2 parents dbbbaf0 + fad717d commit c5391c1

File tree

9 files changed

+211
-26
lines changed

9 files changed

+211
-26
lines changed

base/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def request(self, method, url, **kwargs):
9494
self.last_request_time = time.time()
9595

9696
if response.status_code in self.RETRY_CODES:
97-
logger.error(f"request error: {response.status_code} - retrying...")
97+
logger.error(f"request error: {response.status_code} - retrying... {url}")
9898
retries += 1
9999
if method == 'GET':
100100
time.sleep(self.GET_RATE_LIMIT)

content/classes.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -989,6 +989,8 @@ def available(self):
989989
if datetime.datetime.utcnow() > self.offset_airtime[offset]:
990990
return True
991991
return False
992+
if not hasattr(self, 'first_aired') or self.first_aired is None:
993+
return False
992994
return datetime.datetime.utcnow() > datetime.datetime.strptime(self.first_aired, '%Y-%m-%dT%H:%M:%S.000Z')
993995
elif self.type == 'movie':
994996
release_date = None
@@ -998,18 +1000,18 @@ def available(self):
9981000
if release.release_type == 'digital' or release.release_type == 'physical' or release.release_type == 'tv':
9991001
if release_date == None:
10001002
release_date = release.release_date
1001-
elif datetime.datetime.strptime(release_date, '%Y-%m-%d') > datetime.datetime.strptime(release.release_date, '%Y-%m-%d'):
1003+
elif release.release_date is not None and datetime.datetime.strptime(release_date, '%Y-%m-%d') > datetime.datetime.strptime(release.release_date, '%Y-%m-%d'):
10021004
release_date = release.release_date
10031005
# If no release date was found, select the theatrical release date + 2 Month delay
10041006
if release_date == None:
10051007
for release in releases:
10061008
if release_date == None:
10071009
release_date = release.release_date
1008-
elif datetime.datetime.strptime(release_date, '%Y-%m-%d') > datetime.datetime.strptime(release.release_date, '%Y-%m-%d'):
1010+
elif release.release_date is not None and datetime.datetime.strptime(release_date, '%Y-%m-%d') > datetime.datetime.strptime(release.release_date, '%Y-%m-%d'):
10091011
release_date = release.release_date
1010-
release_date = datetime.datetime.strptime(
1011-
release_date, '%Y-%m-%d') + datetime.timedelta(days=60)
1012-
release_date = release_date.strftime("%Y-%m-%d")
1012+
if release_date is not None:
1013+
release_date = datetime.datetime.strptime(release_date, '%Y-%m-%d') + datetime.timedelta(days=60)
1014+
release_date = release_date.strftime("%Y-%m-%d")
10131015
# Get trakt 'Latest HD/4k Releases' Lists to accept early releases
10141016
match = False
10151017
if trakt.early_releases == "true":
@@ -1023,6 +1025,8 @@ def available(self):
10231025
ui_print("item: '" + self.query() +
10241026
"' seems to be released prior to its official release date and will be downloaded.")
10251027
return True
1028+
if release_date is None:
1029+
return False
10261030
if hasattr(self, "offset_airtime"):
10271031
for offset in self.offset_airtime:
10281032
if datetime.datetime.utcnow() > (datetime.datetime.strptime(release_date, '%Y-%m-%d') + datetime.timedelta(hours=float(offset))):
@@ -1040,6 +1044,8 @@ def available(self):
10401044
return datetime.datetime.utcnow() > datetime.datetime.strptime(release_date, '%Y-%m-%d')
10411045
elif self.type == 'season':
10421046
try:
1047+
if not hasattr(self, 'first_aired') or self.first_aired is None:
1048+
return False
10431049
if hasattr(self, "offset_airtime") and len(self.offset_airtime) > 0:
10441050
for offset in self.offset_airtime:
10451051
if datetime.datetime.utcnow() > datetime.datetime.strptime(self.first_aired, '%Y-%m-%dT%H:%M:%S.000Z') + datetime.timedelta(hours=float(offset)):
@@ -1049,6 +1055,8 @@ def available(self):
10491055
except:
10501056
return True
10511057
elif self.type == 'episode':
1058+
if not hasattr(self, 'first_aired') or self.first_aired is None:
1059+
return False
10521060
if hasattr(self, "offset_airtime"):
10531061
for offset in self.offset_airtime:
10541062
if datetime.datetime.utcnow() > datetime.datetime.strptime(self.first_aired, '%Y-%m-%dT%H:%M:%S.000Z') + datetime.timedelta(hours=float(offset)):
@@ -1186,6 +1194,7 @@ def download(self, retries=0, library=[], parentReleases=[]):
11861194
# set anime info before episodes are removed
11871195
self.isanime()
11881196
if self.type == 'movie':
1197+
ui_print(f"processing movie: {self.title} ({self.year})", debug=ui_settings.debug)
11891198
if (len(self.uncollected(library)) > 0 or self.version_missing()) and len(self.versions()) > 0:
11901199
if self.released() and not self.watched() and not self.downloading():
11911200
if not hasattr(self, "year") or self.year == None:
@@ -1227,6 +1236,7 @@ def download(self, retries=0, library=[], parentReleases=[]):
12271236
if retry:
12281237
self.watch()
12291238
elif self.type == 'show':
1239+
ui_print(f"processing show: {self.title} ({self.year})", debug=ui_settings.debug)
12301240
if len(self.versions()) > 0 and self.released() and (not self.collected(library) or self.version_missing()) and not self.watched():
12311241
self.isanime()
12321242
self.Seasons = self.uncollected(library)
@@ -1362,6 +1372,7 @@ def download(self, retries=0, library=[], parentReleases=[]):
13621372
toc = time.perf_counter()
13631373
ui_print('took ' + str(round(toc - tic, 2)) + 's')
13641374
elif self.type == 'season':
1375+
ui_print(f"processing: {self.parentTitle} {self.title}", debug=ui_settings.debug)
13651376
debrid_downloaded = False
13661377
for release in parentReleases:
13671378
if regex.match(self.deviation(), release.title, regex.I):

content/services/plex.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from ui.ui_print import *
66

77
name = 'Plex'
8-
session = requests.Session()
8+
session = custom_session(get_rate_limit=1.0, post_rate_limit=1.0) # 1 second between requests = 60 requests/minute
99
users = []
1010
headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
1111
current_library = []
@@ -28,7 +28,7 @@ def logerror(response):
2828
else:
2929
ui_print("plex error: (401 unauthorized): token for user '"+name+"' does not seem to work. check your plex user settings.")
3030

31-
def get(url, timeout=60):
31+
def get(session: requests.Session, url: str, timeout=60):
3232
try:
3333
response = session.get(url, headers=headers, timeout=timeout)
3434
logerror(response)
@@ -38,7 +38,7 @@ def get(url, timeout=60):
3838
ui_print("plex error: (json exception): " + str(e), debug=ui_settings.debug)
3939
return None
4040

41-
def post(url, data):
41+
def post(session: requests.Session, url: str, data):
4242
try:
4343
response = session.post(url, data=data, headers=headers)
4444
logerror(response)
@@ -346,7 +346,7 @@ def setup(cls, new=False):
346346
working = False
347347
while not working:
348348
try:
349-
response = get(library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
349+
response = get(session, library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
350350
working = True
351351
if len(response.MediaContainer.Directory) == 0:
352352
print("It looks like this server does not have any libraries set-up! Please open the plex webui, setup at least one library and point it to your mounted debrid service drive.")
@@ -480,7 +480,7 @@ def call(paths):
480480
while refreshing:
481481
refreshing = False
482482
url = library.url + '/library/sections/?X-Plex-Token=' + users[0][1]
483-
response = get(url)
483+
response = get(session, url)
484484
for section_ in response.MediaContainer.Directory:
485485
if section_.refreshing:
486486
refreshing = True
@@ -501,7 +501,7 @@ def __new__(cls, element):
501501
names = []
502502
element_type = ("show" if element.type in ["show","season","episode"] else "movie")
503503
url = library.url + '/library/sections/?X-Plex-Token=' + users[0][1]
504-
response = get(url)
504+
response = get(session, url)
505505
paths = []
506506
for section_ in response.MediaContainer.Directory:
507507
if section_.key in library.refresh.sections and element_type == section_.type:
@@ -547,7 +547,7 @@ def setup(cls, new=False):
547547
working = False
548548
while not working:
549549
try:
550-
response = get(library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
550+
response = get(session, library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
551551
working = True
552552
if len(response.MediaContainer.Directory) == 0:
553553
print("It looks like this server does not have any libraries set-up! Please open the plex webui, setup at least one library and point it to your mounted debrid service drive.")
@@ -595,7 +595,7 @@ def call(element):
595595
url = library.url + '/library/sections/' + str(library_item.librarySectionID) + '/all?type=' + type_string + '&id=' + library_item.ratingKey + '&label.locked=1' + tags_string + '&X-Plex-Token=' + users[0][1]
596596
response = session.put(url,headers=headers)
597597
url = library.url + '/library/metadata/' + library_item.ratingKey + '?X-Plex-Token=' + users[0][1]
598-
response = get(url)
598+
response = get(session, url)
599599
library_item.__dict__.update(response.MediaContainer.Metadata[0].__dict__)
600600
except Exception as e:
601601
ui_print("[plex] error: couldnt add labels! Turn on debug printing for more info.")
@@ -785,7 +785,7 @@ def __new__(self,silent=False):
785785
if library.check == [['']]:
786786
library.check = []
787787
try:
788-
response = get(library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
788+
response = get(session, library.url + '/library/sections/?X-Plex-Token=' + users[0][1])
789789
for Directory in response.MediaContainer.Directory:
790790
if ([Directory.key] in library.check or library.check == []) and Directory.type in ["movie","show"]:
791791
types = ['1'] if Directory.type == "movie" else ['2', '3', '4']
@@ -804,7 +804,7 @@ def __new__(self,silent=False):
804804
section_title = ''
805805
for type in types:
806806
url = library.url + '/library/sections/' + section + '/all?type=' + type + '&X-Plex-Token=' + users[0][1]
807-
response = get(url)
807+
response = get(session, url)
808808
if hasattr(response, 'MediaContainer'):
809809
if hasattr(response.MediaContainer, 'Metadata'):
810810
for element in response.MediaContainer.Metadata:
@@ -860,7 +860,7 @@ def __new__(self,silent=False):
860860
if not item in current_library:
861861
updated = True
862862
url = library.url + '/library/metadata/' + item.ratingKey + '?X-Plex-Token=' + users[0][1]
863-
response = get(url)
863+
response = get(session, url)
864864
item.__dict__.update(response.MediaContainer.Metadata[0].__dict__)
865865
else:
866866
match = next((x for x in current_library if item == x), None)
@@ -934,7 +934,7 @@ def match(self):
934934
service,query = EID.split('://')
935935
query = '-'.join([service,query])
936936
url = current_module.library.url + '/library/metadata/' + some_local_media.ratingKey + '/matches?manual=1&title=' + query + '&agent=' + agent + '&language=en-US&X-Plex-Token=' + users[0][1]
937-
response = get(url)
937+
response = get(session, url)
938938
try:
939939
match = response.MediaContainer.SearchResult[0]
940940
if match.type == 'show':

content/services/trakt.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,9 +232,10 @@ def post(url, data):
232232

233233
def post2(url, data):
234234
try:
235-
response = session.post(url, headers={
236-
'Content-type': "application/json"}, data=data)
237-
logerror(response)
235+
response = session.post(url, headers={'Content-type': "application/json"}, data=data)
236+
if response.status_code not in [200, 201]:
237+
ui_print(f"[trakt] error {response.status_code}: " + str(response.content), ui_settings.debug)
238+
return None
238239
response = json.loads(response.content, object_hook=lambda d: SimpleNamespace(**d))
239240
time.sleep(1.1)
240241
except Exception as e:

0 commit comments

Comments
 (0)