|
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('-1', '--replacedKey', help='the key to be replaced. optional - if not provided, the script will ask for input') |
| 12 | +parser.add_argument('-2', '--replacementKey', help='the replacement key. optional - if not provided, the script will ask for input') |
| 13 | +args = parser.parse_args() |
| 14 | + |
| 15 | +if args.replacedKey: |
| 16 | + replacedKey = args.replacedKey |
| 17 | +else: |
| 18 | + replacedKey = raw_input('Enter the key to be replaced: ') |
| 19 | +if args.replacementKey: |
| 20 | + replacementKey = args.replacementKey |
| 21 | +else: |
| 22 | + replacementKey = raw_input('Enter the replacement key: ') |
8 | 23 |
|
9 | 24 | urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) |
10 | 25 |
|
|
24 | 39 | filePath = secrets.filePath |
25 | 40 | verify = secrets.verify |
26 | 41 |
|
27 | | -oldKey = raw_input('Enter old key: ') |
28 | | -newKey = raw_input('Enter new key: ') |
29 | | - |
30 | 42 | startTime = time.time() |
31 | 43 | data = {'email':email,'password':password} |
32 | 44 | header = {'content-type':'application/json','accept':'application/json'} |
|
37 | 49 | status = requests.get(baseURL+'/rest/status', headers=header, cookies=cookies, verify=verify).json() |
38 | 50 | print 'authenticated' |
39 | 51 |
|
40 | | -itemList = [] |
41 | | -endpoint = baseURL+'/rest/communities' |
42 | | -communities = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json() |
43 | | -for i in range (0, len (communities)): |
44 | | - communityID = communities[i]['uuid'] |
45 | | - collections = requests.get(baseURL+'/rest/communities/'+str(communityID)+'/collections', headers=header, cookies=cookies, verify=verify).json() |
46 | | - for j in range (0, len (collections)): |
47 | | - collectionID = collections[j]['uuid'] |
48 | | - if collectionID != '4dccec82-4cfb-4583-a728-2cb823b15ef0': |
49 | | - offset = 0 |
50 | | - items = '' |
51 | | - while items != []: |
52 | | - items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=200&offset='+str(offset), headers=header, cookies=cookies, verify=verify) |
53 | | - while items.status_code != 200: |
54 | | - time.sleep(5) |
55 | | - items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=200&offset='+str(offset), headers=header, cookies=cookies, verify=verify) |
56 | | - items = items.json() |
57 | | - for k in range (0, len (items)): |
58 | | - itemID = items[k]['uuid'] |
59 | | - itemList.append(itemID) |
60 | | - offset = offset + 200 |
61 | | -elapsedTime = time.time() - startTime |
62 | | -m, s = divmod(elapsedTime, 60) |
63 | | -h, m = divmod(m, 60) |
64 | | -print 'Item list creation time: ','%d:%02d:%02d' % (h, m, s) |
65 | | - |
66 | | -recordsEdited = 0 |
67 | | -elementsEdited = 0 |
68 | 52 | f=csv.writer(open(filePath+'replaceKey'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb')) |
69 | 53 | f.writerow(['itemID']+['replacedKey']+['replacedValue']+['delete']+['post']) |
70 | | -for number, itemID in enumerate(itemList): |
71 | | - replacedElement = '' |
72 | | - itemMetadataProcessed = [] |
73 | | - itemsRemaining = len(itemList) - number |
74 | | - print 'Items remaining: ', itemsRemaining, 'ItemID: ', itemID |
75 | | - metadata = requests.get(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify).json() |
76 | | - for l in range (0, len (metadata)): |
77 | | - if metadata[l]['key'] == oldKey: |
78 | | - replacedElement = metadata[l] |
79 | | - updatedMetadataElement = {} |
80 | | - updatedMetadataElement['key'] = newKey |
81 | | - updatedMetadataElement['value'] = unicode(replacedElement['value']) |
82 | | - updatedMetadataElement['language'] = unicode(replacedElement['language']) |
83 | | - print updatedMetadataElement |
84 | | - itemMetadataProcessed.append(updatedMetadataElement) |
85 | | - provNote = '\''+oldKey+'\' was replaced by \''+newKey+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.' |
86 | | - provNoteElement = {} |
87 | | - provNoteElement['key'] = 'dc.description.provenance' |
88 | | - provNoteElement['value'] = unicode(provNote) |
89 | | - provNoteElement['language'] = 'en_US' |
90 | | - itemMetadataProcessed.append(provNoteElement) |
91 | | - elementsEdited = elementsEdited + 1 |
92 | | - else: |
93 | | - if metadata[l] not in itemMetadataProcessed: |
94 | | - itemMetadataProcessed.append(metadata[l]) |
95 | | - if replacedElement != '': |
96 | | - recordsEdited = recordsEdited + 1 |
| 54 | +offset = 0 |
| 55 | +recordsEdited = 0 |
| 56 | +items = '' |
| 57 | +while items != []: |
| 58 | + endpoint = baseURL+'/rest/filtered-items?query_field[]='+replacedKey+'&query_op[]=exists&query_val[]=&limit=200&offset='+str(offset) |
| 59 | + print endpoint |
| 60 | + response = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json() |
| 61 | + items = response['items'] |
| 62 | + for item in items: |
| 63 | + itemMetadataProcessed = [] |
| 64 | + itemLink = item['link'] |
| 65 | + metadata = requests.get(baseURL + itemLink + '/metadata', headers=header, cookies=cookies, verify=verify).json() |
| 66 | + for l in range (0, len (metadata)): |
| 67 | + metadata[l].pop('schema', None) |
| 68 | + metadata[l].pop('element', None) |
| 69 | + metadata[l].pop('qualifier', None) |
| 70 | + if metadata[l]['key'] == replacedKey: |
| 71 | + replacedElement = metadata[l] |
| 72 | + updatedMetadataElement = {} |
| 73 | + updatedMetadataElement['key'] = replacementKey |
| 74 | + updatedMetadataElement['value'] = unicode(replacedElement['value']) |
| 75 | + updatedMetadataElement['language'] = unicode(replacedElement['language']) |
| 76 | + print updatedMetadataElement |
| 77 | + itemMetadataProcessed.append(updatedMetadataElement) |
| 78 | + provNote = '\''+replacedKey+'\' was replaced by \''+replacementKey+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.' |
| 79 | + provNoteElement = {} |
| 80 | + provNoteElement['key'] = 'dc.description.provenance' |
| 81 | + provNoteElement['value'] = unicode(provNote) |
| 82 | + provNoteElement['language'] = 'en_US' |
| 83 | + itemMetadataProcessed.append(provNoteElement) |
| 84 | + else: |
| 85 | + if metadata[l] not in itemMetadataProcessed: |
| 86 | + itemMetadataProcessed.append(metadata[l]) |
97 | 87 | itemMetadataProcessed = json.dumps(itemMetadataProcessed) |
98 | | - print 'updated', itemID, recordsEdited, elementsEdited |
99 | | - delete = requests.delete(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify) |
| 88 | + print itemMetadataProcessed |
| 89 | + delete = requests.delete(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify) |
100 | 90 | print delete |
101 | | - post = requests.put(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=header, cookies=cookies, verify=verify, data=itemMetadataProcessed) |
| 91 | + post = requests.put(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify, data=itemMetadataProcessed) |
102 | 92 | print post |
103 | 93 | f.writerow([itemID]+[replacedElement['key']]+[replacedElement['value'].encode('utf-8')]+[delete]+[post]) |
104 | | - else: |
105 | | - print 'not updated', itemID |
| 94 | + offset = offset + 200 |
| 95 | + print offset |
106 | 96 |
|
107 | 97 | logout = requests.post(baseURL+'/rest/logout', headers=header, cookies=cookies, verify=verify) |
108 | 98 |
|
|
0 commit comments