-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathaviary_api_report_resources_json.py
70 lines (56 loc) · 2.7 KB
/
aviary_api_report_resources_json.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
##############################################################################################
# desc: connect to the Aviary API and get media item metadata
# exploritory / proof-of-concept code
# usage: python3 aviary_api_report_resources_json.py --server ${aviary_server_name} --output ${output_path}
# license: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication
# date: June 15, 2022
##############################################################################################
# Proof-of-concept only
from getpass import getpass
from time import sleep
import argparse
import json
import logging
from aviary import api as aviaryApi
from aviary import utilities as aviaryUtilities
#
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--server', required=True, help='Servername.')
parser.add_argument('--output', required=True, help='Location to store JSON (like) output file.')
parser.add_argument('--wait', required=False, help='Time to wait between API calls.', type=float, default=0.1)
parser.add_argument('--logging_level', required=False, help='Logging level.', default=logging.WARNING)
return parser.parse_args()
#
def process(args, session, output_file):
collections = aviaryApi.get_collection_list(args, session)
collection_list = json.loads(collections)
for collection in collection_list['data']:
print(f"Collection: {collection['id']}")
resources = aviaryApi.get_collection_resources(args, session, collection['id'])
# resources = aviaryApi.get_collection_resources(args, session, 2226)
# resources = aviaryApi.get_collection_resources(args, session, 1787)
resource_list = json.loads(resources)
for i, resource in enumerate(resource_list['data']):
if ('resource_id' in resource):
item = aviaryApi.get_resource_item(args, session, resource['resource_id'])
output_file.write(json.dumps(json.loads(item)))
output_file.write("\n")
else:
output_file.write(json.dumps(resource))
output_file.write("\n")
print(resource) # error
sleep(args.wait)
aviaryUtilities.progressIndicator(i, args.logging_level)
print(f"\nResource count: {i + 1}")
print("Test only - pagination FAILS 2023 April due to no upstream documentation on how to paginate")
#
def main():
args = parse_args()
username = input('Username:')
password = getpass('Password:')
session = aviaryApi.init_session(args, username, password)
with open(args.output, 'wt', encoding="utf-8", newline='') as output_file:
process(args, session, output_file)
if __name__ == "__main__":
main()