Reverse engineering and modifying existing python script for new purpose [on hold]

Multi tool use
$begingroup$
I am trying to reverse engineer and modify to work in reverse the python script radarrsync.
Its new purpose is to pull a list from two seperate radarrs via api, comparing for matches, to display the 'tmdbid', the 'hasFile' value (true/false), the 'id' and the 'path' values from the slave radarr of any matches and then to send a delete request to the slave radarr using the 'id' if just the 'tmdbid' match and use the modified path value to send a remove command to the actual file on top of the delete request if the 'hasFile' value == true.
Currently if I comment out the 'hasFile' if line the script runs but errors "message": "MethodNotAllowed" and doesn't delete anything (although tries to delete everything in the list), and when running with the 'hasFile' if statement it exits early as its unable to evaluate it.
Can anyone take a look and see what I have missed please
import os
import logging
import json
import sys
import requests
import configparser
import argparse
import shutil
import time
parser = argparse.ArgumentParser(description='RadarrClean. Compare two Radarr servers and clean matches from the slave.')
parser.add_argument('--config', action="store", type=str, help='Location of config file.')
parser.add_argument('--debug', help='Enable debug logging.', action="store_true")
parser.add_argument('--whatif', help="Read-Only. What would happen if I ran this. No posts are sent. Should be used with --debug", action="store_true")
args = parser.parse_args()
def ConfigSectionMap(section):
dict1 = {}
options = Config.options(section)
for option in options:
try:
dict1[option] = Config.get(section, option)
if dict1[option] == -1:
logger.debug("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
Config = configparser.ConfigParser()
settingsFilename = os.path.join(os.getcwd(), 'Config.txt')
if args.config:
settingsFilename = args.config
elif not os.path.isfile(settingsFilename):
print("Creating default config. Please edit and run again.")
shutil.copyfile(os.path.join(os.getcwd(), 'Config.default'), settingsFilename)
sys.exit(0)
Config.read(settingsFilename)
print(ConfigSectionMap('Radarr_PQ')['rootfolders'].split(';'))
########################################################################################################################
logger = logging.getLogger()
if ConfigSectionMap("General")['log_level'] == 'DEBUG':
logger.setLevel(logging.DEBUG)
elif ConfigSectionMap("General")['log_level'] == 'VERBOSE':
logger.setLevel(logging.VERBOSE)
else:
logger.setLevel(logging.INFO)
if args.debug:
logger.setLevel(logging.DEBUG)
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
fileHandler = logging.FileHandler(ConfigSectionMap('General')['log_path'],'w','utf-8')
fileHandler.setFormatter(logFormatter)
logger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler(sys.stdout)
consoleHandler.setFormatter(logFormatter)
logger.addHandler(consoleHandler)
########################################################################################################################
session = requests.Session()
session.trust_env = False
radarr_url = ConfigSectionMap("RadarrMaster")['url']
radarr_key = ConfigSectionMap("RadarrMaster")['key']
radarrMovies = session.get('{0}/api/movie?apikey={1}'.format(radarr_url, radarr_key))
if radarrMovies.status_code != 200:
logger.error('Master Radarr server error - response {}'.format(radarrMovies.status_code))
sys.exit(0)
servers = {}
for section in Config.sections():
section = str(section)
if "Radarr_" in section:
server = (str.split(section,'Radarr_'))[1]
servers[server] = ConfigSectionMap(section)
movies = session.get('{0}/api/movie?apikey={1}'.format(servers[server]['url'], servers[server]['key']))
if movies.status_code != 200:
logger.error('{0} Radarr server error - response {1}'.format(server, movies.status_code))
sys.exit(0)
else:
servers[server]['movies'] =
servers[server]['matchMovies'] = 0
servers[server]['searchid'] =
for movie in movies.json():
servers[server]['movies'].append(movie['tmdbId'])
for movie in radarrMovies.json():
for name, server in servers.items():
if movie['tmdbId'] in server['movies']:
if movie['hasFile'] == "true":
if movie['sizeOnDisk'] != 0:
if 'rootfolders' in server:
allowedFolders = server['rootfolders'].split(';')
for folder in allowedFolders:
if not folder in movie['path']:
continue
if 'local_path' in server:
path = str(movie['path']).replace(server['local_path'], server['cloud_path'])
logging.debug('Updating movie path from: {0} to {1}'.format(movie['path'], path))
else:
path = movie['path']
logging.debug('server: {0}'.format(name))
logging.debug('title: {0}'.format(movie['title']))
logging.debug('hasFile: {0}'.format(movie['hasFile']))
logging.debug('tmdbId: {0}'.format(movie['tmdbId']))
logging.debug('id: {0}'.format(movie['id']))
logging.debug('path: {0}'.format(path))
payload = {str(movie['id'])}
logging.debug('payload: {0}'.format(payload))
server['matchMovies'] += 1
if args.whatif:
logging.debug('WhatIf: Not actually removing movie from Radarr {0}.'.format(name))
else:
if server['matchMovies'] > 0:
logging.debug('Sleeping for: {0} seconds.'.format(ConfigSectionMap('General')['wait_between_delete']))
time.sleep(int(ConfigSectionMap('General')['wait_between_delete']))
r = session.delete('{0}/api/movie?apikey={1}'.format(server['url'], server['key']), data=json.dumps(payload))
logger.info('Removing {0} from Radarr {1} server'.format(movie['title'], name))
Example of the type of values in the file pulled by the api call
{
"title": "Anaconda",
"sizeOnDisk": 1289110670,
"downloaded": true,
"hasFile": true,
"path": "/movies/Anaconda (1997)",
"profileId": 4,
"tmdbId": 9360,
"titleSlug": "anaconda-9360",
"id": 206
},
{
"title": "Analyze That",
"sizeOnDisk": 628338045,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze That (2002)",
"profileId": 4,
"tmdbId": 9932,
"titleSlug": "analyze-that-9932",
"id": 207
},
{
"title": "Analyze This",
"sizeOnDisk": 756275693,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze This (1999)",
"profileId": 4,
"tmdbId": 9535,
"titleSlug": "analyze-this-9535",
"id": 208
},
python-3.x
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
put on hold as off-topic by πάντα ῥεῖ, Jamal♦ 3 hours ago
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Code not implemented or not working as intended: Code Review is a community where programmers peer-review your working code to address issues such as security, maintainability, performance, and scalability. We require that the code be working correctly, to the best of the author's knowledge, before proceeding with a review." – πάντα ῥεῖ, Jamal
If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |
$begingroup$
I am trying to reverse engineer and modify to work in reverse the python script radarrsync.
Its new purpose is to pull a list from two seperate radarrs via api, comparing for matches, to display the 'tmdbid', the 'hasFile' value (true/false), the 'id' and the 'path' values from the slave radarr of any matches and then to send a delete request to the slave radarr using the 'id' if just the 'tmdbid' match and use the modified path value to send a remove command to the actual file on top of the delete request if the 'hasFile' value == true.
Currently if I comment out the 'hasFile' if line the script runs but errors "message": "MethodNotAllowed" and doesn't delete anything (although tries to delete everything in the list), and when running with the 'hasFile' if statement it exits early as its unable to evaluate it.
Can anyone take a look and see what I have missed please
import os
import logging
import json
import sys
import requests
import configparser
import argparse
import shutil
import time
parser = argparse.ArgumentParser(description='RadarrClean. Compare two Radarr servers and clean matches from the slave.')
parser.add_argument('--config', action="store", type=str, help='Location of config file.')
parser.add_argument('--debug', help='Enable debug logging.', action="store_true")
parser.add_argument('--whatif', help="Read-Only. What would happen if I ran this. No posts are sent. Should be used with --debug", action="store_true")
args = parser.parse_args()
def ConfigSectionMap(section):
dict1 = {}
options = Config.options(section)
for option in options:
try:
dict1[option] = Config.get(section, option)
if dict1[option] == -1:
logger.debug("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
Config = configparser.ConfigParser()
settingsFilename = os.path.join(os.getcwd(), 'Config.txt')
if args.config:
settingsFilename = args.config
elif not os.path.isfile(settingsFilename):
print("Creating default config. Please edit and run again.")
shutil.copyfile(os.path.join(os.getcwd(), 'Config.default'), settingsFilename)
sys.exit(0)
Config.read(settingsFilename)
print(ConfigSectionMap('Radarr_PQ')['rootfolders'].split(';'))
########################################################################################################################
logger = logging.getLogger()
if ConfigSectionMap("General")['log_level'] == 'DEBUG':
logger.setLevel(logging.DEBUG)
elif ConfigSectionMap("General")['log_level'] == 'VERBOSE':
logger.setLevel(logging.VERBOSE)
else:
logger.setLevel(logging.INFO)
if args.debug:
logger.setLevel(logging.DEBUG)
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
fileHandler = logging.FileHandler(ConfigSectionMap('General')['log_path'],'w','utf-8')
fileHandler.setFormatter(logFormatter)
logger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler(sys.stdout)
consoleHandler.setFormatter(logFormatter)
logger.addHandler(consoleHandler)
########################################################################################################################
session = requests.Session()
session.trust_env = False
radarr_url = ConfigSectionMap("RadarrMaster")['url']
radarr_key = ConfigSectionMap("RadarrMaster")['key']
radarrMovies = session.get('{0}/api/movie?apikey={1}'.format(radarr_url, radarr_key))
if radarrMovies.status_code != 200:
logger.error('Master Radarr server error - response {}'.format(radarrMovies.status_code))
sys.exit(0)
servers = {}
for section in Config.sections():
section = str(section)
if "Radarr_" in section:
server = (str.split(section,'Radarr_'))[1]
servers[server] = ConfigSectionMap(section)
movies = session.get('{0}/api/movie?apikey={1}'.format(servers[server]['url'], servers[server]['key']))
if movies.status_code != 200:
logger.error('{0} Radarr server error - response {1}'.format(server, movies.status_code))
sys.exit(0)
else:
servers[server]['movies'] =
servers[server]['matchMovies'] = 0
servers[server]['searchid'] =
for movie in movies.json():
servers[server]['movies'].append(movie['tmdbId'])
for movie in radarrMovies.json():
for name, server in servers.items():
if movie['tmdbId'] in server['movies']:
if movie['hasFile'] == "true":
if movie['sizeOnDisk'] != 0:
if 'rootfolders' in server:
allowedFolders = server['rootfolders'].split(';')
for folder in allowedFolders:
if not folder in movie['path']:
continue
if 'local_path' in server:
path = str(movie['path']).replace(server['local_path'], server['cloud_path'])
logging.debug('Updating movie path from: {0} to {1}'.format(movie['path'], path))
else:
path = movie['path']
logging.debug('server: {0}'.format(name))
logging.debug('title: {0}'.format(movie['title']))
logging.debug('hasFile: {0}'.format(movie['hasFile']))
logging.debug('tmdbId: {0}'.format(movie['tmdbId']))
logging.debug('id: {0}'.format(movie['id']))
logging.debug('path: {0}'.format(path))
payload = {str(movie['id'])}
logging.debug('payload: {0}'.format(payload))
server['matchMovies'] += 1
if args.whatif:
logging.debug('WhatIf: Not actually removing movie from Radarr {0}.'.format(name))
else:
if server['matchMovies'] > 0:
logging.debug('Sleeping for: {0} seconds.'.format(ConfigSectionMap('General')['wait_between_delete']))
time.sleep(int(ConfigSectionMap('General')['wait_between_delete']))
r = session.delete('{0}/api/movie?apikey={1}'.format(server['url'], server['key']), data=json.dumps(payload))
logger.info('Removing {0} from Radarr {1} server'.format(movie['title'], name))
Example of the type of values in the file pulled by the api call
{
"title": "Anaconda",
"sizeOnDisk": 1289110670,
"downloaded": true,
"hasFile": true,
"path": "/movies/Anaconda (1997)",
"profileId": 4,
"tmdbId": 9360,
"titleSlug": "anaconda-9360",
"id": 206
},
{
"title": "Analyze That",
"sizeOnDisk": 628338045,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze That (2002)",
"profileId": 4,
"tmdbId": 9932,
"titleSlug": "analyze-that-9932",
"id": 207
},
{
"title": "Analyze This",
"sizeOnDisk": 756275693,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze This (1999)",
"profileId": 4,
"tmdbId": 9535,
"titleSlug": "analyze-this-9535",
"id": 208
},
python-3.x
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
put on hold as off-topic by πάντα ῥεῖ, Jamal♦ 3 hours ago
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Code not implemented or not working as intended: Code Review is a community where programmers peer-review your working code to address issues such as security, maintainability, performance, and scalability. We require that the code be working correctly, to the best of the author's knowledge, before proceeding with a review." – πάντα ῥεῖ, Jamal
If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |
$begingroup$
I am trying to reverse engineer and modify to work in reverse the python script radarrsync.
Its new purpose is to pull a list from two seperate radarrs via api, comparing for matches, to display the 'tmdbid', the 'hasFile' value (true/false), the 'id' and the 'path' values from the slave radarr of any matches and then to send a delete request to the slave radarr using the 'id' if just the 'tmdbid' match and use the modified path value to send a remove command to the actual file on top of the delete request if the 'hasFile' value == true.
Currently if I comment out the 'hasFile' if line the script runs but errors "message": "MethodNotAllowed" and doesn't delete anything (although tries to delete everything in the list), and when running with the 'hasFile' if statement it exits early as its unable to evaluate it.
Can anyone take a look and see what I have missed please
import os
import logging
import json
import sys
import requests
import configparser
import argparse
import shutil
import time
parser = argparse.ArgumentParser(description='RadarrClean. Compare two Radarr servers and clean matches from the slave.')
parser.add_argument('--config', action="store", type=str, help='Location of config file.')
parser.add_argument('--debug', help='Enable debug logging.', action="store_true")
parser.add_argument('--whatif', help="Read-Only. What would happen if I ran this. No posts are sent. Should be used with --debug", action="store_true")
args = parser.parse_args()
def ConfigSectionMap(section):
dict1 = {}
options = Config.options(section)
for option in options:
try:
dict1[option] = Config.get(section, option)
if dict1[option] == -1:
logger.debug("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
Config = configparser.ConfigParser()
settingsFilename = os.path.join(os.getcwd(), 'Config.txt')
if args.config:
settingsFilename = args.config
elif not os.path.isfile(settingsFilename):
print("Creating default config. Please edit and run again.")
shutil.copyfile(os.path.join(os.getcwd(), 'Config.default'), settingsFilename)
sys.exit(0)
Config.read(settingsFilename)
print(ConfigSectionMap('Radarr_PQ')['rootfolders'].split(';'))
########################################################################################################################
logger = logging.getLogger()
if ConfigSectionMap("General")['log_level'] == 'DEBUG':
logger.setLevel(logging.DEBUG)
elif ConfigSectionMap("General")['log_level'] == 'VERBOSE':
logger.setLevel(logging.VERBOSE)
else:
logger.setLevel(logging.INFO)
if args.debug:
logger.setLevel(logging.DEBUG)
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
fileHandler = logging.FileHandler(ConfigSectionMap('General')['log_path'],'w','utf-8')
fileHandler.setFormatter(logFormatter)
logger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler(sys.stdout)
consoleHandler.setFormatter(logFormatter)
logger.addHandler(consoleHandler)
########################################################################################################################
session = requests.Session()
session.trust_env = False
radarr_url = ConfigSectionMap("RadarrMaster")['url']
radarr_key = ConfigSectionMap("RadarrMaster")['key']
radarrMovies = session.get('{0}/api/movie?apikey={1}'.format(radarr_url, radarr_key))
if radarrMovies.status_code != 200:
logger.error('Master Radarr server error - response {}'.format(radarrMovies.status_code))
sys.exit(0)
servers = {}
for section in Config.sections():
section = str(section)
if "Radarr_" in section:
server = (str.split(section,'Radarr_'))[1]
servers[server] = ConfigSectionMap(section)
movies = session.get('{0}/api/movie?apikey={1}'.format(servers[server]['url'], servers[server]['key']))
if movies.status_code != 200:
logger.error('{0} Radarr server error - response {1}'.format(server, movies.status_code))
sys.exit(0)
else:
servers[server]['movies'] =
servers[server]['matchMovies'] = 0
servers[server]['searchid'] =
for movie in movies.json():
servers[server]['movies'].append(movie['tmdbId'])
for movie in radarrMovies.json():
for name, server in servers.items():
if movie['tmdbId'] in server['movies']:
if movie['hasFile'] == "true":
if movie['sizeOnDisk'] != 0:
if 'rootfolders' in server:
allowedFolders = server['rootfolders'].split(';')
for folder in allowedFolders:
if not folder in movie['path']:
continue
if 'local_path' in server:
path = str(movie['path']).replace(server['local_path'], server['cloud_path'])
logging.debug('Updating movie path from: {0} to {1}'.format(movie['path'], path))
else:
path = movie['path']
logging.debug('server: {0}'.format(name))
logging.debug('title: {0}'.format(movie['title']))
logging.debug('hasFile: {0}'.format(movie['hasFile']))
logging.debug('tmdbId: {0}'.format(movie['tmdbId']))
logging.debug('id: {0}'.format(movie['id']))
logging.debug('path: {0}'.format(path))
payload = {str(movie['id'])}
logging.debug('payload: {0}'.format(payload))
server['matchMovies'] += 1
if args.whatif:
logging.debug('WhatIf: Not actually removing movie from Radarr {0}.'.format(name))
else:
if server['matchMovies'] > 0:
logging.debug('Sleeping for: {0} seconds.'.format(ConfigSectionMap('General')['wait_between_delete']))
time.sleep(int(ConfigSectionMap('General')['wait_between_delete']))
r = session.delete('{0}/api/movie?apikey={1}'.format(server['url'], server['key']), data=json.dumps(payload))
logger.info('Removing {0} from Radarr {1} server'.format(movie['title'], name))
Example of the type of values in the file pulled by the api call
{
"title": "Anaconda",
"sizeOnDisk": 1289110670,
"downloaded": true,
"hasFile": true,
"path": "/movies/Anaconda (1997)",
"profileId": 4,
"tmdbId": 9360,
"titleSlug": "anaconda-9360",
"id": 206
},
{
"title": "Analyze That",
"sizeOnDisk": 628338045,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze That (2002)",
"profileId": 4,
"tmdbId": 9932,
"titleSlug": "analyze-that-9932",
"id": 207
},
{
"title": "Analyze This",
"sizeOnDisk": 756275693,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze This (1999)",
"profileId": 4,
"tmdbId": 9535,
"titleSlug": "analyze-this-9535",
"id": 208
},
python-3.x
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
$endgroup$
I am trying to reverse engineer and modify to work in reverse the python script radarrsync.
Its new purpose is to pull a list from two seperate radarrs via api, comparing for matches, to display the 'tmdbid', the 'hasFile' value (true/false), the 'id' and the 'path' values from the slave radarr of any matches and then to send a delete request to the slave radarr using the 'id' if just the 'tmdbid' match and use the modified path value to send a remove command to the actual file on top of the delete request if the 'hasFile' value == true.
Currently if I comment out the 'hasFile' if line the script runs but errors "message": "MethodNotAllowed" and doesn't delete anything (although tries to delete everything in the list), and when running with the 'hasFile' if statement it exits early as its unable to evaluate it.
Can anyone take a look and see what I have missed please
import os
import logging
import json
import sys
import requests
import configparser
import argparse
import shutil
import time
parser = argparse.ArgumentParser(description='RadarrClean. Compare two Radarr servers and clean matches from the slave.')
parser.add_argument('--config', action="store", type=str, help='Location of config file.')
parser.add_argument('--debug', help='Enable debug logging.', action="store_true")
parser.add_argument('--whatif', help="Read-Only. What would happen if I ran this. No posts are sent. Should be used with --debug", action="store_true")
args = parser.parse_args()
def ConfigSectionMap(section):
dict1 = {}
options = Config.options(section)
for option in options:
try:
dict1[option] = Config.get(section, option)
if dict1[option] == -1:
logger.debug("skip: %s" % option)
except:
print("exception on %s!" % option)
dict1[option] = None
return dict1
Config = configparser.ConfigParser()
settingsFilename = os.path.join(os.getcwd(), 'Config.txt')
if args.config:
settingsFilename = args.config
elif not os.path.isfile(settingsFilename):
print("Creating default config. Please edit and run again.")
shutil.copyfile(os.path.join(os.getcwd(), 'Config.default'), settingsFilename)
sys.exit(0)
Config.read(settingsFilename)
print(ConfigSectionMap('Radarr_PQ')['rootfolders'].split(';'))
########################################################################################################################
logger = logging.getLogger()
if ConfigSectionMap("General")['log_level'] == 'DEBUG':
logger.setLevel(logging.DEBUG)
elif ConfigSectionMap("General")['log_level'] == 'VERBOSE':
logger.setLevel(logging.VERBOSE)
else:
logger.setLevel(logging.INFO)
if args.debug:
logger.setLevel(logging.DEBUG)
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s] %(message)s")
fileHandler = logging.FileHandler(ConfigSectionMap('General')['log_path'],'w','utf-8')
fileHandler.setFormatter(logFormatter)
logger.addHandler(fileHandler)
consoleHandler = logging.StreamHandler(sys.stdout)
consoleHandler.setFormatter(logFormatter)
logger.addHandler(consoleHandler)
########################################################################################################################
session = requests.Session()
session.trust_env = False
radarr_url = ConfigSectionMap("RadarrMaster")['url']
radarr_key = ConfigSectionMap("RadarrMaster")['key']
radarrMovies = session.get('{0}/api/movie?apikey={1}'.format(radarr_url, radarr_key))
if radarrMovies.status_code != 200:
logger.error('Master Radarr server error - response {}'.format(radarrMovies.status_code))
sys.exit(0)
servers = {}
for section in Config.sections():
section = str(section)
if "Radarr_" in section:
server = (str.split(section,'Radarr_'))[1]
servers[server] = ConfigSectionMap(section)
movies = session.get('{0}/api/movie?apikey={1}'.format(servers[server]['url'], servers[server]['key']))
if movies.status_code != 200:
logger.error('{0} Radarr server error - response {1}'.format(server, movies.status_code))
sys.exit(0)
else:
servers[server]['movies'] =
servers[server]['matchMovies'] = 0
servers[server]['searchid'] =
for movie in movies.json():
servers[server]['movies'].append(movie['tmdbId'])
for movie in radarrMovies.json():
for name, server in servers.items():
if movie['tmdbId'] in server['movies']:
if movie['hasFile'] == "true":
if movie['sizeOnDisk'] != 0:
if 'rootfolders' in server:
allowedFolders = server['rootfolders'].split(';')
for folder in allowedFolders:
if not folder in movie['path']:
continue
if 'local_path' in server:
path = str(movie['path']).replace(server['local_path'], server['cloud_path'])
logging.debug('Updating movie path from: {0} to {1}'.format(movie['path'], path))
else:
path = movie['path']
logging.debug('server: {0}'.format(name))
logging.debug('title: {0}'.format(movie['title']))
logging.debug('hasFile: {0}'.format(movie['hasFile']))
logging.debug('tmdbId: {0}'.format(movie['tmdbId']))
logging.debug('id: {0}'.format(movie['id']))
logging.debug('path: {0}'.format(path))
payload = {str(movie['id'])}
logging.debug('payload: {0}'.format(payload))
server['matchMovies'] += 1
if args.whatif:
logging.debug('WhatIf: Not actually removing movie from Radarr {0}.'.format(name))
else:
if server['matchMovies'] > 0:
logging.debug('Sleeping for: {0} seconds.'.format(ConfigSectionMap('General')['wait_between_delete']))
time.sleep(int(ConfigSectionMap('General')['wait_between_delete']))
r = session.delete('{0}/api/movie?apikey={1}'.format(server['url'], server['key']), data=json.dumps(payload))
logger.info('Removing {0} from Radarr {1} server'.format(movie['title'], name))
Example of the type of values in the file pulled by the api call
{
"title": "Anaconda",
"sizeOnDisk": 1289110670,
"downloaded": true,
"hasFile": true,
"path": "/movies/Anaconda (1997)",
"profileId": 4,
"tmdbId": 9360,
"titleSlug": "anaconda-9360",
"id": 206
},
{
"title": "Analyze That",
"sizeOnDisk": 628338045,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze That (2002)",
"profileId": 4,
"tmdbId": 9932,
"titleSlug": "analyze-that-9932",
"id": 207
},
{
"title": "Analyze This",
"sizeOnDisk": 756275693,
"downloaded": true,
"hasFile": true,
"path": "/movies/Analyze This (1999)",
"profileId": 4,
"tmdbId": 9535,
"titleSlug": "analyze-this-9535",
"id": 208
},
python-3.x
python-3.x
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
edited 6 hours ago
Geof Grouch
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked 6 hours ago


Geof GrouchGeof Grouch
61
61
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Geof Grouch is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
put on hold as off-topic by πάντα ῥεῖ, Jamal♦ 3 hours ago
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Code not implemented or not working as intended: Code Review is a community where programmers peer-review your working code to address issues such as security, maintainability, performance, and scalability. We require that the code be working correctly, to the best of the author's knowledge, before proceeding with a review." – πάντα ῥεῖ, Jamal
If this question can be reworded to fit the rules in the help center, please edit the question.
put on hold as off-topic by πάντα ῥεῖ, Jamal♦ 3 hours ago
This question appears to be off-topic. The users who voted to close gave this specific reason:
- "Code not implemented or not working as intended: Code Review is a community where programmers peer-review your working code to address issues such as security, maintainability, performance, and scalability. We require that the code be working correctly, to the best of the author's knowledge, before proceeding with a review." – πάντα ῥεῖ, Jamal
If this question can be reworded to fit the rules in the help center, please edit the question.
add a comment |
add a comment |
0
active
oldest
votes
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
xkf3fN6,JYHWBrSnT XFJTPEjOg3m hM25cCn UVd4 E,drLuTgccuoi3uEXdnofMaZ8J1 OI,qEn1I7RB r7exHcZI H mgN UuU hDIN