-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathradarr.py
76 lines (67 loc) · 2.84 KB
/
radarr.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import requests
import json
class RadarrApi:
baseUrl = None
apiKey = None
indexer = ""
year = ""
tmdbId = None
sizeOnDisk = ""
releaseTitle = ""
def __init__(self, baseUrl, apiKey):
self.baseUrl = baseUrl
self.apiKey = apiKey
def loadData(self, downloadId):
if self.apiKey is None or self.baseUrl is None or downloadId is None:
return
payload = {"apikey": self.apiKey, "page": 1, "sortKey": "date", "sortDir": "desc", "pageSize": 20}
response = requests.get(self.baseUrl + "/history", params=payload)
if response.status_code != 200:
raise ValueError(
'Request returned an error %s, the response is:\n%s'
% (response.status_code, response.text)
)
data = dict(json.loads(response.text))
for record in data["records"]:
record = dict(record)
recordDownloadId = record.get("downloadId")
indexer = record.get("data", {}).get("indexer")
self.releaseTitle = record.get("sourceTitle", "")
if recordDownloadId == downloadId and indexer is not None:
movie = record.get("movie", {})
self.year = str(movie.get("year", ""))
self.indexer = indexer
self.tmdbId = str(movie.get("tmdbId", ""))
size = int(record.get("data", {}).get("size", "0"))
self.sizeOnDisk = self.sizeof_fmt(size)
return
return
def getMovie(self, movieId):
payload = {"apikey": self.apiKey}
response = requests.get(self.baseUrl + "/movie/" + movieId, params=payload)
if response.status_code != 200:
raise ValueError(
'Request returned an error %s, the response is:\n%s'
% (response.status_code, response.text)
)
return json.loads(response.text)
def unmonitorMovie(self, movie):
movie["monitored"] = False
headers = {'Content-type': 'application/json', 'X-Api-Key': self.apiKey}
response = requests.put(self.baseUrl + "/movie/" + str(movie["id"]), data=json.dumps(movie), headers=headers)
if response.status_code != 202:
raise ValueError(
'Request returned an error %s, the response is:\n%s'
% (response.status_code, response.text)
)
def unmonitorMovieIfNeeded(self, movieId, event):
if event == "Download":
movie = self.getMovie(movieId)
if movie.get("monitored", False):
self.unmonitorMovie(movie)
def sizeof_fmt(self, num, suffix='o'):
for unit in ['','K','M','G','T','P','E','Z']:
if abs(num) < 1024.0:
return "%3.1f%s%s" % (num, unit, suffix)
num /= 1024.0
return "%.1f%s%s" % (num, 'Y', suffix)