From f950b3719f5e28ae58c940dca03a7480c9b95fec Mon Sep 17 00:00:00 2001 From: Oscar Andersson Date: Thu, 27 Dec 2018 20:02:44 +0100 Subject: [PATCH 1/7] Add Ombi issues counter --- Varken.py | 2 ++ data/varken.example.ini | 3 +++ varken/iniparser.py | 6 +++++- varken/ombi.py | 30 +++++++++++++++++++++++++++++- varken/structures.py | 7 +++++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Varken.py b/Varken.py index 20aea2b..b0b5ab9 100644 --- a/Varken.py +++ b/Varken.py @@ -121,6 +121,8 @@ if __name__ == "__main__": schedule.every(server.request_type_run_seconds).seconds.do(threaded, OMBI.get_request_counts) if server.request_total_counts: schedule.every(server.request_total_run_seconds).seconds.do(threaded, OMBI.get_all_requests) + if server.request_issues_counts: + schedule.every(server.request_issues_type_run_seconds).seconds.do(threaded, OMBI.get_issues_counts) if CONFIG.sickchill_enabled: for server in CONFIG.sickchill_servers: diff --git a/data/varken.example.ini b/data/varken.example.ini index 39c382b..e1db4da 100644 --- a/data/varken.example.ini +++ b/data/varken.example.ini @@ -83,6 +83,9 @@ get_request_type_counts = true request_type_run_seconds = 300 get_request_total_counts = true request_total_run_seconds = 300 +get_request_issues_counts = true +request_type_issues_run_seconds = 300 + [sickchill-1] url = sickchill.domain.tld:8081 diff --git a/varken/iniparser.py b/varken/iniparser.py index c920d96..a304450 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -179,9 +179,13 @@ class INIParser(object): request_total_run_seconds = self.config.getint(section, 'request_total_run_seconds') + request_issues_counts = self.config.getboolean(section, 'get_request_issues_counts') + + request_issues_type_run_seconds = self.config.getint(section, 'request_type_issues_run_seconds') + server = OmbiServer(server_id, scheme + url, apikey, verify_ssl, request_type_counts, request_type_run_seconds, request_total_counts, - request_total_run_seconds) + request_total_run_seconds, request_issues_counts, request_issues_type_run_seconds) if service == 'sickchill': get_missing = self.config.getboolean(section, 'get_missing') diff --git a/varken/ombi.py b/varken/ombi.py index c535aba..03cd8c3 100644 --- a/varken/ombi.py +++ b/varken/ombi.py @@ -3,7 +3,7 @@ from requests import Session, Request from datetime import datetime, timezone from varken.helpers import connection_handler, hashit -from varken.structures import OmbiRequestCounts, OmbiMovieRequest, OmbiTVRequest +from varken.structures import OmbiRequestCounts, OmbiIssuesCounts, OmbiMovieRequest, OmbiTVRequest class OmbiAPI(object): @@ -165,3 +165,31 @@ class OmbiAPI(object): ] self.dbmanager.write_points(influx_payload) + + def get_issues_counts(self): + now = datetime.now(timezone.utc).astimezone().isoformat() + endpoint = '/api/v1/Issues/count' + + req = self.session.prepare_request(Request('GET', self.server.url + endpoint)) + get = connection_handler(self.session, req, self.server.verify_ssl) + + if not get: + return + + requests = OmbiIssuesCounts(**get) + influx_payload = [ + { + "measurement": "Ombi", + "tags": { + "type": "Issues_Counts" + }, + "time": now, + "fields": { + "pending": requests.pending, + "in_progress": requests.inProgress, + "resolved": requests.resolved + } + } + ] + + self.dbmanager.write_points(influx_payload) diff --git a/varken/structures.py b/varken/structures.py index bfc297c..7b57f85 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -61,6 +61,8 @@ class OmbiServer(NamedTuple): request_type_run_seconds: int = 30 request_total_counts: bool = False request_total_run_seconds: int = 30 + request_issues_counts: bool = False + request_issues_type_run_seconds: int = 30 class TautulliServer(NamedTuple): @@ -106,6 +108,11 @@ class OmbiRequestCounts(NamedTuple): approved: int = 0 available: int = 0 +class OmbiIssuesCounts(NamedTuple): + pending: int = 0 + inProgress: int = 0 + resolved: int = 0 + class TautulliStream(NamedTuple): rating: str = None From ba63276df3781a84b8b1777d8aab84a9a0d32a25 Mon Sep 17 00:00:00 2001 From: Oscar Andersson Date: Thu, 27 Dec 2018 22:07:41 +0100 Subject: [PATCH 2/7] Add possibility to get all issues --- Varken.py | 2 ++ data/varken.example.ini | 3 +- varken/iniparser.py | 8 +++++- varken/ombi.py | 61 ++++++++++++++++++++++++++++++++++++++++- varken/structures.py | 18 ++++++++++++ 5 files changed, 89 insertions(+), 3 deletions(-) diff --git a/Varken.py b/Varken.py index b0b5ab9..99ab580 100644 --- a/Varken.py +++ b/Varken.py @@ -123,6 +123,8 @@ if __name__ == "__main__": schedule.every(server.request_total_run_seconds).seconds.do(threaded, OMBI.get_all_requests) if server.request_issues_counts: schedule.every(server.request_issues_type_run_seconds).seconds.do(threaded, OMBI.get_issues_counts) + if server.issues_total_counts: + schedule.every(server.issues_total_run_seconds).seconds.do(threaded, OMBI.get_all_issues) if CONFIG.sickchill_enabled: for server in CONFIG.sickchill_servers: diff --git a/data/varken.example.ini b/data/varken.example.ini index e1db4da..ffec3e5 100644 --- a/data/varken.example.ini +++ b/data/varken.example.ini @@ -85,7 +85,8 @@ get_request_total_counts = true request_total_run_seconds = 300 get_request_issues_counts = true request_type_issues_run_seconds = 300 - +get_issues_total_counts = true +issues_total_run_seconds = 300 [sickchill-1] url = sickchill.domain.tld:8081 diff --git a/varken/iniparser.py b/varken/iniparser.py index a304450..76552e1 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -183,9 +183,15 @@ class INIParser(object): request_issues_type_run_seconds = self.config.getint(section, 'request_type_issues_run_seconds') + issues_total_counts = self.config.getboolean(section, 'get_issues_total_counts') + + issues_total_run_seconds = self.config.getint(section, 'issues_total_run_seconds') + server = OmbiServer(server_id, scheme + url, apikey, verify_ssl, request_type_counts, request_type_run_seconds, request_total_counts, - request_total_run_seconds, request_issues_counts, request_issues_type_run_seconds) + request_total_run_seconds, request_issues_counts, + request_issues_type_run_seconds, issues_total_counts, + issues_total_run_seconds) if service == 'sickchill': get_missing = self.config.getboolean(section, 'get_missing') diff --git a/varken/ombi.py b/varken/ombi.py index 03cd8c3..e0e8831 100644 --- a/varken/ombi.py +++ b/varken/ombi.py @@ -3,7 +3,7 @@ from requests import Session, Request from datetime import datetime, timezone from varken.helpers import connection_handler, hashit -from varken.structures import OmbiRequestCounts, OmbiIssuesCounts, OmbiMovieRequest, OmbiTVRequest +from varken.structures import OmbiRequestCounts, OmbiIssuesCounts, OmbiIssue, OmbiMovieRequest, OmbiTVRequest class OmbiAPI(object): @@ -193,3 +193,62 @@ class OmbiAPI(object): ] self.dbmanager.write_points(influx_payload) + + def get_all_issues(self): + now = datetime.now(timezone.utc).astimezone().isoformat() + endpoint = '/api/v1/Issues/' + + req = self.session.prepare_request(Request('GET', self.server.url + endpoint)) + get_issues = connection_handler(self.session, req, self.server.verify_ssl) + + + if not any([get_issues]): + self.logger.error('No json replies. Discarding job') + return + + issues_count = len(get_issues) + + try: + issue_list = [OmbiIssue(**issue) for issue in get_issues] + except TypeError as e: + self.logger.error('TypeError has occurred : %s while creating OmbiIssue structure', e) + return + + influx_payload = [ + { + "measurement": "Ombi", + "tags": { + "type": "Issues_Total", + "server": self.server.id + }, + "time": now, + "fields": { + "total": issues_count + } + } + ] + # Request Type: Movie = 1, TV Show = 0 + # Status: 0 = Pending, 1 = In Progress, 2 = Resolved + for issue in issue_list: + hash_id = hashit(f'{issue.id}{issue.requestId}{issue.title}') + + influx_payload.append( + { + "measurement": "Ombi", + "tags": { + "type": "Issues", + "server": self.server.id, + "request_type": issue.requestType, + "status": issue.status, + "title": issue.title, + "subject": issue.subject, + "description": issue.description + }, + "time": now, + "fields": { + "hash": hash_id + } + } + ) + + self.dbmanager.write_points(influx_payload) \ No newline at end of file diff --git a/varken/structures.py b/varken/structures.py index 7b57f85..721a0fe 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -63,6 +63,8 @@ class OmbiServer(NamedTuple): request_total_run_seconds: int = 30 request_issues_counts: bool = False request_issues_type_run_seconds: int = 30 + issues_total_counts: bool = False + issues_total_run_seconds: int = 30 class TautulliServer(NamedTuple): @@ -402,6 +404,22 @@ class OmbiMovieRequest(NamedTuple): canApprove: bool = None id: int = None +class OmbiIssue(NamedTuple): + title: str = None + requestType: int = None + providerId: int = None + requestId: int = None + subject: str = None + description: str = None + issueCategoryId: int = None + issueCategory: dict = None + status: int = None + resovledDate: None = None + userReportedId: str = None + userReported: str = None + comments: str = None + id: int = None + class OmbiTVRequest(NamedTuple): tvDbId: int = None From ec85c4b4a62870b448f3a715ebb7a30c0cffcc7d Mon Sep 17 00:00:00 2001 From: Oscar Andersson Date: Thu, 27 Dec 2018 22:28:36 +0100 Subject: [PATCH 3/7] Fix variable names to follow structure --- Varken.py | 8 ++++---- data/varken.example.ini | 8 ++++---- varken/iniparser.py | 14 +++++++------- varken/ombi.py | 2 +- varken/structures.py | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Varken.py b/Varken.py index 99ab580..a377098 100644 --- a/Varken.py +++ b/Varken.py @@ -121,10 +121,10 @@ if __name__ == "__main__": schedule.every(server.request_type_run_seconds).seconds.do(threaded, OMBI.get_request_counts) if server.request_total_counts: schedule.every(server.request_total_run_seconds).seconds.do(threaded, OMBI.get_all_requests) - if server.request_issues_counts: - schedule.every(server.request_issues_type_run_seconds).seconds.do(threaded, OMBI.get_issues_counts) - if server.issues_total_counts: - schedule.every(server.issues_total_run_seconds).seconds.do(threaded, OMBI.get_all_issues) + if server.issue_status_counts: + schedule.every(server.issue_status_run_seconds).seconds.do(threaded, OMBI.get_issue_counts) + if server.issue_total_counts: + schedule.every(server.issue_total_run_seconds).seconds.do(threaded, OMBI.get_all_issues) if CONFIG.sickchill_enabled: for server in CONFIG.sickchill_servers: diff --git a/data/varken.example.ini b/data/varken.example.ini index ffec3e5..6069be3 100644 --- a/data/varken.example.ini +++ b/data/varken.example.ini @@ -83,10 +83,10 @@ get_request_type_counts = true request_type_run_seconds = 300 get_request_total_counts = true request_total_run_seconds = 300 -get_request_issues_counts = true -request_type_issues_run_seconds = 300 -get_issues_total_counts = true -issues_total_run_seconds = 300 +get_issue_status_counts = true +issue_status_run_seconds = 300 +get_issue_total_counts = true +issue_total_run_seconds = 300 [sickchill-1] url = sickchill.domain.tld:8081 diff --git a/varken/iniparser.py b/varken/iniparser.py index 76552e1..67d0b9b 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -179,19 +179,19 @@ class INIParser(object): request_total_run_seconds = self.config.getint(section, 'request_total_run_seconds') - request_issues_counts = self.config.getboolean(section, 'get_request_issues_counts') + issue_status_counts = self.config.getboolean(section, 'get_issue_status_counts') - request_issues_type_run_seconds = self.config.getint(section, 'request_type_issues_run_seconds') + issue_status_run_seconds = self.config.getint(section, 'issue_status_run_seconds') - issues_total_counts = self.config.getboolean(section, 'get_issues_total_counts') + issue_total_counts = self.config.getboolean(section, 'get_issue_total_counts') - issues_total_run_seconds = self.config.getint(section, 'issues_total_run_seconds') + issue_total_run_seconds = self.config.getint(section, 'issue_total_run_seconds') server = OmbiServer(server_id, scheme + url, apikey, verify_ssl, request_type_counts, request_type_run_seconds, request_total_counts, - request_total_run_seconds, request_issues_counts, - request_issues_type_run_seconds, issues_total_counts, - issues_total_run_seconds) + request_total_run_seconds, issue_status_counts, + issue_status_run_seconds, issue_total_counts, + issue_total_run_seconds) if service == 'sickchill': get_missing = self.config.getboolean(section, 'get_missing') diff --git a/varken/ombi.py b/varken/ombi.py index e0e8831..c3f1d36 100644 --- a/varken/ombi.py +++ b/varken/ombi.py @@ -166,7 +166,7 @@ class OmbiAPI(object): self.dbmanager.write_points(influx_payload) - def get_issues_counts(self): + def get_issue_counts(self): now = datetime.now(timezone.utc).astimezone().isoformat() endpoint = '/api/v1/Issues/count' diff --git a/varken/structures.py b/varken/structures.py index 721a0fe..dec726b 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -61,10 +61,10 @@ class OmbiServer(NamedTuple): request_type_run_seconds: int = 30 request_total_counts: bool = False request_total_run_seconds: int = 30 - request_issues_counts: bool = False - request_issues_type_run_seconds: int = 30 - issues_total_counts: bool = False - issues_total_run_seconds: int = 30 + issue_status_counts: bool = False + issue_status_run_seconds: int = 30 + issue_total_counts: bool = False + issue_total_run_seconds: int = 30 class TautulliServer(NamedTuple): From dfcbee4eb40d3e9832e2823951db8874c51ce636 Mon Sep 17 00:00:00 2001 From: Oscar Andersson Date: Sat, 29 Dec 2018 20:46:28 +0100 Subject: [PATCH 4/7] Remove detailed version of issues --- Varken.py | 2 -- data/varken.example.ini | 2 -- varken/iniparser.py | 7 +---- varken/ombi.py | 61 +---------------------------------------- varken/structures.py | 18 ------------ 5 files changed, 2 insertions(+), 88 deletions(-) diff --git a/Varken.py b/Varken.py index a377098..c157646 100644 --- a/Varken.py +++ b/Varken.py @@ -123,8 +123,6 @@ if __name__ == "__main__": schedule.every(server.request_total_run_seconds).seconds.do(threaded, OMBI.get_all_requests) if server.issue_status_counts: schedule.every(server.issue_status_run_seconds).seconds.do(threaded, OMBI.get_issue_counts) - if server.issue_total_counts: - schedule.every(server.issue_total_run_seconds).seconds.do(threaded, OMBI.get_all_issues) if CONFIG.sickchill_enabled: for server in CONFIG.sickchill_servers: diff --git a/data/varken.example.ini b/data/varken.example.ini index 6069be3..d7d858b 100644 --- a/data/varken.example.ini +++ b/data/varken.example.ini @@ -85,8 +85,6 @@ get_request_total_counts = true request_total_run_seconds = 300 get_issue_status_counts = true issue_status_run_seconds = 300 -get_issue_total_counts = true -issue_total_run_seconds = 300 [sickchill-1] url = sickchill.domain.tld:8081 diff --git a/varken/iniparser.py b/varken/iniparser.py index 67d0b9b..beb4d3f 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -183,15 +183,10 @@ class INIParser(object): issue_status_run_seconds = self.config.getint(section, 'issue_status_run_seconds') - issue_total_counts = self.config.getboolean(section, 'get_issue_total_counts') - - issue_total_run_seconds = self.config.getint(section, 'issue_total_run_seconds') - server = OmbiServer(server_id, scheme + url, apikey, verify_ssl, request_type_counts, request_type_run_seconds, request_total_counts, request_total_run_seconds, issue_status_counts, - issue_status_run_seconds, issue_total_counts, - issue_total_run_seconds) + issue_status_run_seconds) if service == 'sickchill': get_missing = self.config.getboolean(section, 'get_missing') diff --git a/varken/ombi.py b/varken/ombi.py index c3f1d36..ebf3af5 100644 --- a/varken/ombi.py +++ b/varken/ombi.py @@ -3,7 +3,7 @@ from requests import Session, Request from datetime import datetime, timezone from varken.helpers import connection_handler, hashit -from varken.structures import OmbiRequestCounts, OmbiIssuesCounts, OmbiIssue, OmbiMovieRequest, OmbiTVRequest +from varken.structures import OmbiRequestCounts, OmbiIssuesCounts, OmbiMovieRequest, OmbiTVRequest class OmbiAPI(object): @@ -192,63 +192,4 @@ class OmbiAPI(object): } ] - self.dbmanager.write_points(influx_payload) - - def get_all_issues(self): - now = datetime.now(timezone.utc).astimezone().isoformat() - endpoint = '/api/v1/Issues/' - - req = self.session.prepare_request(Request('GET', self.server.url + endpoint)) - get_issues = connection_handler(self.session, req, self.server.verify_ssl) - - - if not any([get_issues]): - self.logger.error('No json replies. Discarding job') - return - - issues_count = len(get_issues) - - try: - issue_list = [OmbiIssue(**issue) for issue in get_issues] - except TypeError as e: - self.logger.error('TypeError has occurred : %s while creating OmbiIssue structure', e) - return - - influx_payload = [ - { - "measurement": "Ombi", - "tags": { - "type": "Issues_Total", - "server": self.server.id - }, - "time": now, - "fields": { - "total": issues_count - } - } - ] - # Request Type: Movie = 1, TV Show = 0 - # Status: 0 = Pending, 1 = In Progress, 2 = Resolved - for issue in issue_list: - hash_id = hashit(f'{issue.id}{issue.requestId}{issue.title}') - - influx_payload.append( - { - "measurement": "Ombi", - "tags": { - "type": "Issues", - "server": self.server.id, - "request_type": issue.requestType, - "status": issue.status, - "title": issue.title, - "subject": issue.subject, - "description": issue.description - }, - "time": now, - "fields": { - "hash": hash_id - } - } - ) - self.dbmanager.write_points(influx_payload) \ No newline at end of file diff --git a/varken/structures.py b/varken/structures.py index dec726b..4916fee 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -63,8 +63,6 @@ class OmbiServer(NamedTuple): request_total_run_seconds: int = 30 issue_status_counts: bool = False issue_status_run_seconds: int = 30 - issue_total_counts: bool = False - issue_total_run_seconds: int = 30 class TautulliServer(NamedTuple): @@ -404,22 +402,6 @@ class OmbiMovieRequest(NamedTuple): canApprove: bool = None id: int = None -class OmbiIssue(NamedTuple): - title: str = None - requestType: int = None - providerId: int = None - requestId: int = None - subject: str = None - description: str = None - issueCategoryId: int = None - issueCategory: dict = None - status: int = None - resovledDate: None = None - userReportedId: str = None - userReported: str = None - comments: str = None - id: int = None - class OmbiTVRequest(NamedTuple): tvDbId: int = None From 0629c61a29dde252f8a8e0cbdd02f9bfe64a68ce Mon Sep 17 00:00:00 2001 From: "Nicholas St. Germain" Date: Sat, 29 Dec 2018 21:57:48 -0600 Subject: [PATCH 5/7] pep8 for merge + changes --- varken/helpers.py | 3 +-- varken/iniparser.py | 7 ++++--- varken/ombi.py | 2 +- varken/structures.py | 1 + 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/varken/helpers.py b/varken/helpers.py index beae9af..648eb5a 100644 --- a/varken/helpers.py +++ b/varken/helpers.py @@ -33,7 +33,7 @@ class GeoIPHandler(object): def update(self): today = date.today() - dbdate = None + try: dbdate = date.fromtimestamp(stat(self.dbfile).st_ctime) except FileNotFoundError: @@ -55,7 +55,6 @@ class GeoIPHandler(object): else: self.logger.debug('Geolite2 DB will update in %s days', abs(td.days)) - def download(self): tar_dbfile = abspath(join(self.data_folder, 'GeoLite2-City.tar.gz')) url = 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz' diff --git a/varken/iniparser.py b/varken/iniparser.py index beb4d3f..badbdc4 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -66,7 +66,7 @@ class INIParser(object): search = (r'(?:([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}|' # domain... r'localhost|' # localhost... - r'^[a-zA-Z0-9_-]*|' # hostname only. My soul dies a little every time this is used... + r'^[a-zA-Z0-9_-]*|' # hostname only. My soul dies a little every time this is used... r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip ) # Include search for port if it is needed. @@ -80,7 +80,8 @@ class INIParser(object): valid = match(regex, url_check) is not None if not valid: if inc_port: - self.logger.error('%s is invalid in module [%s]! URL must host/IP and port if not 80 or 443. ie. localhost:8080', + self.logger.error('%s is invalid in module [%s]! URL must host/IP and ' + 'port if not 80 or 443. ie. localhost:8080', url_check, module) exit(1) else: @@ -185,7 +186,7 @@ class INIParser(object): server = OmbiServer(server_id, scheme + url, apikey, verify_ssl, request_type_counts, request_type_run_seconds, request_total_counts, - request_total_run_seconds, issue_status_counts, + request_total_run_seconds, issue_status_counts, issue_status_run_seconds) if service == 'sickchill': diff --git a/varken/ombi.py b/varken/ombi.py index 7299273..86f8e33 100644 --- a/varken/ombi.py +++ b/varken/ombi.py @@ -189,4 +189,4 @@ class OmbiAPI(object): } ] - self.dbmanager.write_points(influx_payload) \ No newline at end of file + self.dbmanager.write_points(influx_payload) diff --git a/varken/structures.py b/varken/structures.py index 4916fee..694b8cc 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -108,6 +108,7 @@ class OmbiRequestCounts(NamedTuple): approved: int = 0 available: int = 0 + class OmbiIssuesCounts(NamedTuple): pending: int = 0 inProgress: int = 0 From c95f7519a53e8666f3784b39d3edba20f950a893 Mon Sep 17 00:00:00 2001 From: "Nicholas St. Germain" Date: Sat, 29 Dec 2018 22:04:39 -0600 Subject: [PATCH 6/7] add ability to filter by encoding/decoding status --- varken/tautulli.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/varken/tautulli.py b/varken/tautulli.py index 5bde35a..336bba9 100644 --- a/varken/tautulli.py +++ b/varken/tautulli.py @@ -108,6 +108,8 @@ class TautulliAPI(object): "quality": quality, "video_decision": video_decision.title(), "transcode_decision": decision.title(), + "transcode_hw_decoding": session.transcode_hw_decoding, + "transcode_hw_encoding": session.transcode_hw_encoding, "media_type": session.media_type.title(), "audio_codec": session.audio_codec.upper(), "audio_profile": session.audio_profile.upper(), From 570d90c7209722dfe19f65bd79f5c4f8f24eeb58 Mon Sep 17 00:00:00 2001 From: "Nicholas St. Germain" Date: Sat, 29 Dec 2018 22:33:58 -0600 Subject: [PATCH 7/7] add missing key lastSearchTime --- varken/structures.py | 1 + 1 file changed, 1 insertion(+) diff --git a/varken/structures.py b/varken/structures.py index 694b8cc..7339d17 100644 --- a/varken/structures.py +++ b/varken/structures.py @@ -327,6 +327,7 @@ class TVShow(NamedTuple): sceneEpisodeNumber: int = None sceneSeasonNumber: int = None series: dict = None + lastSearchTime: str = None id: int = None