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