forked from Dictionarry-Hub/profilarr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
exportarr.py
134 lines (99 loc) · 4.94 KB
/
exportarr.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
from helpers import *
import os
import re
def prompt_export_choice():
options = { "1": "Custom Formats", "2": "Quality Profiles" }
print_message("Please select what you want to export:", "blue")
for number, option in options.items():
print_message(f"{number}. {option}", "green")
print_message("Enter the number(s) of your choice, multiple separated by commas, or type 'all' for all options", "yellow")
user_choice = input("Your choice: ")
if user_choice.lower() == 'all':
return list(options.values())
else:
return [options[choice] for choice in user_choice.split(',') if choice in options]
def create_export_path(export_path, app):
# Convert app to lowercase
app = app.lower() # Ensure app is in lowercase
# Create a directory path for the export in lowercase
dir_path = os.path.join(export_path, 'custom_formats', app).lower() # Convert entire path to lowercase
# Create the directory if it doesn't exist
os.makedirs(dir_path, exist_ok=True)
return dir_path
def export_custom_formats(app, instances, config):
for instance in instances:
print_message(f"Exporting Custom Formats for {app.capitalize()} : {instance['name']}", 'blue')
url = instance['base_url']
api_key = instance['api_key']
# Get the export path from the config
export_path = config['settings']['export_path']
# Create the export directory
dir_path = create_export_path(export_path, app)
# Assuming 'export' is a valid resource_type for the API
response = make_request('get', url, api_key, 'customformat')
successful_exports = 0 # Counter for successful exports
# Scrub the JSON data and save each custom format in its own file
all_custom_formats = []
for custom_format in response:
# Remove the 'id' field
custom_format.pop('id', None)
all_custom_formats.append(custom_format)
successful_exports += 1 # Increment the counter if the export was successful
file_name = f"custom formats ({app.lower()} - {instance['name'].lower()}).json"
# Save all custom formats to a single file in the export directory
try:
with open(os.path.join(dir_path, file_name), 'w') as f:
json.dump(all_custom_formats, f, indent=4)
status = 'SUCCESS'
status_color = 'green'
except Exception as e:
status = 'FAILED'
status_color = 'red'
print_message(f"Exported {successful_exports} custom formats to {dir_path} for {instance['name']}", 'yellow')
print()
def create_quality_profiles_export_path(app, config):
# Get the export path from the config
export_path = config['settings']['export_path']
# Create a directory path for the export
dir_path = os.path.join(export_path, 'quality_profiles', app)
# Create the directory if it doesn't exist
os.makedirs(dir_path, exist_ok=True)
return dir_path
def export_quality_profiles(app, instances, config):
for instance in instances:
print_message(f"Exporting Quality Profiles for {app.capitalize()} : {instance['name']}", 'blue')
url = instance['base_url']
api_key = instance['api_key']
# Create the export directory
dir_path = create_quality_profiles_export_path(app, config)
# Assuming 'qualityprofile' is the valid resource_type for the API
response = make_request('get', url, api_key, 'qualityprofile')
successful_exports = 0 # Counter for successful exports
# Scrub the JSON data and save each quality profile in its own file
for quality_profile in response:
# Remove the 'id' field
quality_profile.pop('id', None)
# Create a file name from the quality profile name and app
file_name = f"{quality_profile['name']} ({app.lower()} - {instance['name'].lower()}).json"
file_name = re.sub(r'[\\/*?:"<>|]', '', file_name) # Remove invalid characters
# Save the quality profile to a file in the export directory
try:
with open(os.path.join(dir_path, file_name), 'w') as f:
json.dump([quality_profile], f, indent=4) # Wrap quality_profile in a list
status = 'SUCCESS'
status_color = 'green'
except Exception as e:
status = 'FAILED'
status_color = 'red'
if status == 'SUCCESS':
successful_exports += 1 # Increment the counter if the export was successful
print_message(f"Exported {successful_exports} quality profiles to {dir_path} for {instance['name']}", 'yellow')
print()
def main():
app = get_app_choice()
instances = get_instance_choice(app)
config = load_config()
export_custom_formats(app, instances, config)
export_quality_profiles(app, instances, config)
if __name__ == "__main__":
main()