|
5 | 5 | import csv |
6 | 6 | from datetime import datetime |
7 | 7 | import urllib3 |
8 | | - |
9 | | -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) |
| 8 | +import argparse |
10 | 9 |
|
11 | 10 | secretsVersion = raw_input('To edit production server, enter the name of the secrets file: ') |
12 | 11 | if secretsVersion != '': |
|
18 | 17 | else: |
19 | 18 | print 'Editing Stage' |
20 | 19 |
|
| 20 | +parser = argparse.ArgumentParser() |
| 21 | +parser.add_argument('-k', '--deletedKey', help='the key to be deleted. optional - if not provided, the script will ask for input') |
| 22 | +parser.add_argument('-v', '--deletedValue', help='the value to be deleted. optional - if not provided, the script will ask for input') |
| 23 | +parser.add_argument('-i', '--handle', help='handle of the community to retreive. optional - if not provided, the script will ask for input') |
| 24 | +args = parser.parse_args() |
| 25 | + |
| 26 | +if args.deletedKey: |
| 27 | + deletedKey = args.deletedKey |
| 28 | +else: |
| 29 | + deletedKey = raw_input('Enter the key to be deleted: ') |
| 30 | +if args.deletedValue: |
| 31 | + deletedValue = args.deletedValue |
| 32 | +else: |
| 33 | + deletedValue = raw_input('Enter the value to be deleted: ') |
| 34 | +if args.handle: |
| 35 | + handle = args.handle |
| 36 | +else: |
| 37 | + handle = raw_input('Enter collection handle: ') |
| 38 | + |
| 39 | +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) |
| 40 | + |
21 | 41 | baseURL = secrets.baseURL |
22 | 42 | email = secrets.email |
23 | 43 | password = secrets.password |
24 | 44 | filePath = secrets.filePath |
25 | 45 | verify = secrets.verify |
26 | | - |
27 | | -collectionHandle = raw_input('Enter collection handle: ') |
28 | | -deletedKey = raw_input('Enter key to be deleted: ') |
29 | | -deletedValue = raw_input('Enter value to be deleted: ') |
| 46 | +skippedCollections = secrets.skippedCollections |
30 | 47 |
|
31 | 48 | startTime = time.time() |
32 | 49 | data = {'email':email,'password':password} |
|
38 | 55 | status = requests.get(baseURL+'/rest/status', headers=header, cookies=cookies, verify=verify).json() |
39 | 56 | print 'authenticated' |
40 | 57 |
|
41 | | -itemList = [] |
42 | | -endpoint = baseURL+'/rest/handle/'+collectionHandle |
| 58 | +endpoint = baseURL+'/rest/handle/'+handle |
43 | 59 | collection = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json() |
44 | 60 | collectionID = collection['uuid'] |
| 61 | +collSels = '&collSel[]=' + collectionID |
| 62 | + |
| 63 | +f=csv.writer(open(filePath+'deletedKey'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb')) |
| 64 | +f.writerow(['itemID']+['deletedKey']+['deletedValue']+['delete']+['post']) |
| 65 | +recordsEdited = 0 |
45 | 66 | offset = 0 |
46 | 67 | items = '' |
| 68 | +itemLinks = [] |
47 | 69 | while items != []: |
48 | | - items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=200&offset='+str(offset), headers=header, cookies=cookies, verify=verify) |
49 | | - while items.status_code != 200: |
50 | | - time.sleep(5) |
51 | | - items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=200&offset='+str(offset), headers=header, cookies=cookies, verify=verify) |
52 | | - items = items.json() |
53 | | - for k in range (0, len (items)): |
54 | | - itemID = items[k]['uuid'] |
55 | | - itemList.append(itemID) |
| 70 | + endpoint = baseURL+'/rest/filtered-items?query_field[]='+deletedKey+'&query_op[]=exists&query_val[]='+collSels+'&limit=200&offset='+str(offset) |
| 71 | + print endpoint |
| 72 | + response = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json() |
| 73 | + items = response['items'] |
| 74 | + for item in items: |
| 75 | + itemMetadataProcessed = [] |
| 76 | + itemLink = item['link'] |
| 77 | + itemLinks.append(itemLink) |
56 | 78 | offset = offset + 200 |
57 | | -elapsedTime = time.time() - startTime |
58 | | -m, s = divmod(elapsedTime, 60) |
59 | | -h, m = divmod(m, 60) |
60 | | -print 'Item list creation time: ','%d:%02d:%02d' % (h, m, s) |
61 | | - |
62 | | -recordsEdited = 0 |
63 | | -f=csv.writer(open(filePath+'deletedKey'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb')) |
64 | | -f.writerow(['itemID']+['deletedKey']+['deletedValue']+['delete']+['post']) |
65 | | -for number, itemID in enumerate(itemList): |
66 | | - itemsRemaining = len(itemList) - number |
67 | | - print 'Items remaining: ', itemsRemaining, 'ItemID: ', itemID |
68 | | - metadata = requests.get(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify).json() |
| 79 | + print offset |
| 80 | +for itemLink in itemLinks: |
69 | 81 | itemMetadataProcessed = [] |
| 82 | + print itemLink |
| 83 | + metadata = requests.get(baseURL + itemLink + '/metadata', headers=header, cookies=cookies, verify=verify).json() |
70 | 84 | for l in range (0, len (metadata)): |
| 85 | + metadata[l].pop('schema', None) |
| 86 | + metadata[l].pop('element', None) |
| 87 | + metadata[l].pop('qualifier', None) |
71 | 88 | if metadata[l]['key'] == deletedKey and metadata[l]['value'] == deletedValue: |
72 | 89 | provNote = '\''+deletedKey+':'+deletedValue+'\' was deleted through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.' |
73 | 90 | provNoteElement = {} |
|
77 | 94 | itemMetadataProcessed.append(provNoteElement) |
78 | 95 | else: |
79 | 96 | itemMetadataProcessed.append(metadata[l]) |
80 | | - |
81 | 97 | if itemMetadataProcessed != metadata: |
82 | 98 | recordsEdited = recordsEdited + 1 |
83 | 99 | itemMetadataProcessed = json.dumps(itemMetadataProcessed) |
84 | | - print 'updated', itemID, recordsEdited |
85 | | - delete = requests.delete(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify) |
| 100 | + print 'updated', itemLink, recordsEdited |
| 101 | + delete = requests.delete(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify) |
86 | 102 | print delete |
87 | | - post = requests.put(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify, data=itemMetadataProcessed) |
| 103 | + post = requests.put(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify, data=itemMetadataProcessed) |
88 | 104 | print post |
89 | | - f.writerow([itemID]+[deletedKey]+[deletedValue]+[delete]+[post]) |
| 105 | + f.writerow([itemLink]+[deletedKey]+[deletedValue]+[delete]+[post]) |
90 | 106 |
|
91 | 107 | logout = requests.post(baseURL+'/rest/logout', headers=header, cookies=cookies, verify=verify) |
92 | 108 |
|
|
0 commit comments