Skip to content

Commit 13a6d6c

Browse files
author
ehanson8
committed
updates
1 parent f6d0dd8 commit 13a6d6c

File tree

3 files changed

+284
-0
lines changed

3 files changed

+284
-0
lines changed

replaceKeyForCollection.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import json
2+
import requests
3+
import secrets
4+
import time
5+
import csv
6+
from datetime import datetime
7+
8+
secretsVersion = raw_input('To edit production server, enter the name of the secrets file: ')
9+
if secretsVersion != '':
10+
try:
11+
secrets = __import__(secretsVersion)
12+
print 'Editing Production'
13+
except ImportError:
14+
print 'Editing Stage'
15+
else:
16+
print 'Editing Stage'
17+
18+
baseURL = secrets.baseURL
19+
email = secrets.email
20+
password = secrets.password
21+
filePath = secrets.filePath
22+
verify = secrets.verify
23+
24+
requests.packages.urllib3.disable_warnings()
25+
26+
oldKey = raw_input('Enter old key: ')
27+
newKey = raw_input('Enter new key: ')
28+
handle = raw_input('Enter collection handle: ')
29+
30+
startTime = time.time()
31+
data = json.dumps({'email':email,'password':password})
32+
header = {'content-type':'application/json','accept':'application/json'}
33+
session = requests.post(baseURL+'/rest/login', headers=header, verify=verify, data=data).content
34+
headerAuth = {'content-type':'application/json','accept':'application/json', 'rest-dspace-token':session}
35+
print 'authenticated'
36+
37+
itemList = []
38+
endpoint = baseURL+'/rest/handle/'+handle
39+
collection = requests.get(endpoint, headers=headerAuth, verify=verify).json()
40+
collectionID = collection['id']
41+
offset = 0
42+
items = ''
43+
while items != []:
44+
items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=1000&offset='+str(offset), headers=headerAuth, verify=verify)
45+
while items.status_code != 200:
46+
time.sleep(5)
47+
items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=1000&offset='+str(offset), headers=headerAuth, verify=verify)
48+
items = items.json()
49+
for k in range (0, len (items)):
50+
itemID = items[k]['id']
51+
itemList.append(itemID)
52+
offset = offset + 1000
53+
elapsedTime = time.time() - startTime
54+
m, s = divmod(elapsedTime, 60)
55+
h, m = divmod(m, 60)
56+
print 'Item list creation time: ','%d:%02d:%02d' % (h, m, s)
57+
58+
recordsEdited = 0
59+
elementsEdited = 0
60+
f=csv.writer(open(filePath+'replaceKey'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb'))
61+
f.writerow(['itemID']+['replacedKey']+['replacedValue']+['delete']+['post'])
62+
for number, itemID in enumerate(itemList):
63+
replacedElement = ''
64+
itemMetadataProcessed = []
65+
itemsRemaining = len(itemList) - number
66+
print 'Items remaining: ', itemsRemaining, 'ItemID: ', itemID
67+
metadata = requests.get(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify).json()
68+
for l in range (0, len (metadata)):
69+
if metadata[l]['key'] == oldKey:
70+
replacedElement = metadata[l]
71+
updatedMetadataElement = {}
72+
updatedMetadataElement['key'] = newKey
73+
updatedMetadataElement['value'] = unicode(replacedElement['value'])
74+
updatedMetadataElement['language'] = unicode(replacedElement['language'])
75+
print updatedMetadataElement
76+
itemMetadataProcessed.append(updatedMetadataElement)
77+
provNote = '\''+oldKey+'\' was replaced by \''+newKey+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.'
78+
provNoteElement = {}
79+
provNoteElement['key'] = 'dc.description.provenance'
80+
provNoteElement['value'] = unicode(provNote)
81+
provNoteElement['language'] = 'en_US'
82+
itemMetadataProcessed.append(provNoteElement)
83+
elementsEdited = elementsEdited + 1
84+
else:
85+
if metadata[l] not in itemMetadataProcessed:
86+
itemMetadataProcessed.append(metadata[l])
87+
if replacedElement != '':
88+
recordsEdited = recordsEdited + 1
89+
itemMetadataProcessed = json.dumps(itemMetadataProcessed)
90+
print 'updated', itemID, recordsEdited, elementsEdited
91+
delete = requests.delete(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify)
92+
print delete
93+
post = requests.put(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify, data=itemMetadataProcessed)
94+
print post
95+
f.writerow([itemID]+[replacedElement['key']]+[replacedElement['value'].encode('utf-8')]+[delete]+[post])
96+
else:
97+
print 'not updated', itemID
98+
99+
logout = requests.post(baseURL+'/rest/logout', headers=headerAuth, verify=verify)
100+
101+
elapsedTime = time.time() - startTime
102+
m, s = divmod(elapsedTime, 60)
103+
h, m = divmod(m, 60)
104+
print 'Total script run time: ', '%d:%02d:%02d' % (h, m, s)

replaceKeyForCommunity.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import json
2+
import requests
3+
import secrets
4+
import time
5+
import csv
6+
from datetime import datetime
7+
8+
secretsVersion = raw_input('To edit production server, enter the name of the secrets file: ')
9+
if secretsVersion != '':
10+
try:
11+
secrets = __import__(secretsVersion)
12+
print 'Editing Production'
13+
except ImportError:
14+
print 'Editing Stage'
15+
else:
16+
print 'Editing Stage'
17+
18+
baseURL = secrets.baseURL
19+
email = secrets.email
20+
password = secrets.password
21+
filePath = secrets.filePath
22+
verify = secrets.verify
23+
24+
requests.packages.urllib3.disable_warnings()
25+
26+
oldKey = raw_input('Enter old key: ')
27+
newKey = raw_input('Enter new key: ')
28+
handle = raw_input('Enter community handle: ')
29+
30+
startTime = time.time()
31+
data = json.dumps({'email':email,'password':password})
32+
header = {'content-type':'application/json','accept':'application/json'}
33+
session = requests.post(baseURL+'/rest/login', headers=header, verify=verify, data=data).content
34+
headerAuth = {'content-type':'application/json','accept':'application/json', 'rest-dspace-token':session}
35+
print 'authenticated'
36+
37+
itemList = []
38+
endpoint = baseURL+'/rest/handle/'+handle
39+
community = requests.get(endpoint, headers=headerAuth, verify=verify).json()
40+
communityID = community['id']
41+
42+
collections = requests.get(baseURL+'/rest/communities/'+str(communityID)+'/collections', headers=headerAuth, verify=verify).json()
43+
for j in range (0, len (collections)):
44+
collectionID = collections[j]['id']
45+
if collectionID != 24:
46+
offset = 0
47+
items = ''
48+
while items != []:
49+
items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=1000&offset='+str(offset), headers=headerAuth, verify=verify)
50+
while items.status_code != 200:
51+
time.sleep(5)
52+
items = requests.get(baseURL+'/rest/collections/'+str(collectionID)+'/items?limit=1000&offset='+str(offset), headers=headerAuth, verify=verify)
53+
items = items.json()
54+
for k in range (0, len (items)):
55+
itemID = items[k]['id']
56+
itemList.append(itemID)
57+
offset = offset + 1000
58+
elapsedTime = time.time() - startTime
59+
m, s = divmod(elapsedTime, 60)
60+
h, m = divmod(m, 60)
61+
print 'Item list creation time: ','%d:%02d:%02d' % (h, m, s)
62+
63+
recordsEdited = 0
64+
elementsEdited = 0
65+
f=csv.writer(open(filePath+'replaceKey'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb'))
66+
f.writerow(['itemID']+['replacedKey']+['replacedValue']+['delete']+['post'])
67+
for number, itemID in enumerate(itemList):
68+
replacedElement = ''
69+
itemMetadataProcessed = []
70+
itemsRemaining = len(itemList) - number
71+
print 'Items remaining: ', itemsRemaining, 'ItemID: ', itemID
72+
metadata = requests.get(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify).json()
73+
for l in range (0, len (metadata)):
74+
if metadata[l]['key'] == oldKey:
75+
replacedElement = metadata[l]
76+
updatedMetadataElement = {}
77+
updatedMetadataElement['key'] = newKey
78+
updatedMetadataElement['value'] = unicode(replacedElement['value'])
79+
updatedMetadataElement['language'] = unicode(replacedElement['language'])
80+
print updatedMetadataElement
81+
itemMetadataProcessed.append(updatedMetadataElement)
82+
provNote = '\''+oldKey+'\' was replaced by \''+newKey+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.'
83+
provNoteElement = {}
84+
provNoteElement['key'] = 'dc.description.provenance'
85+
provNoteElement['value'] = unicode(provNote)
86+
provNoteElement['language'] = 'en_US'
87+
itemMetadataProcessed.append(provNoteElement)
88+
elementsEdited = elementsEdited + 1
89+
else:
90+
if metadata[l] not in itemMetadataProcessed:
91+
itemMetadataProcessed.append(metadata[l])
92+
if replacedElement != '':
93+
recordsEdited = recordsEdited + 1
94+
itemMetadataProcessed = json.dumps(itemMetadataProcessed)
95+
print 'updated', itemID, recordsEdited, elementsEdited
96+
delete = requests.delete(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify)
97+
print delete
98+
post = requests.put(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify, data=itemMetadataProcessed)
99+
print post
100+
f.writerow([itemID]+[replacedElement['key']]+[replacedElement['value'].encode('utf-8')]+[delete]+[post])
101+
else:
102+
print 'not updated', itemID
103+
104+
logout = requests.post(baseURL+'/rest/logout', headers=headerAuth, verify=verify)
105+
106+
elapsedTime = time.time() - startTime
107+
m, s = divmod(elapsedTime, 60)
108+
h, m = divmod(m, 60)
109+
print 'Total script run time: ', '%d:%02d:%02d' % (h, m, s)

replaceKeyValuePairOnItemIdCSV.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import json
2+
import requests
3+
import secrets
4+
import time
5+
import csv
6+
from datetime import datetime
7+
8+
secretsVersion = raw_input('To edit production server, enter the name of the secrets file: ')
9+
if secretsVersion != '':
10+
try:
11+
secrets = __import__(secretsVersion)
12+
print 'Editing Production'
13+
except ImportError:
14+
print 'Editing Stage'
15+
else:
16+
print 'Editing Stage'
17+
18+
baseURL = secrets.baseURL
19+
email = secrets.email
20+
password = secrets.password
21+
filePath = secrets.filePath
22+
verify = secrets.verify
23+
24+
requests.packages.urllib3.disable_warnings()
25+
26+
data = json.dumps({'email':email,'password':password})
27+
header = {'content-type':'application/json','accept':'application/json'}
28+
session = requests.post(baseURL+'/rest/login', headers=header, verify=verify, data=data).content
29+
headerAuth = {'content-type':'application/json','accept':'application/json', 'rest-dspace-token':session}
30+
31+
filename = filePath+raw_input('Enter filename (including \'.csv\'): ')
32+
replacedKey = raw_input('Enter key: ')
33+
replacementKey = replacedKey
34+
startTime = time.time()
35+
36+
f=csv.writer(open(filePath+'replacedKeyValuePair'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb'))
37+
f.writerow(['itemID']+['replacedKey']+['replacedValue']+['replacementValue']+['delete']+['post'])
38+
39+
with open(filename) as csvfile:
40+
reader = csv.DictReader(csvfile)
41+
for row in reader:
42+
itemMetadataProcessed = []
43+
itemID = row['itemID']
44+
replacedValue = row['replacedValue'].decode('utf-8')
45+
replacementValue = row['replacementValue'].decode('utf-8')
46+
itemMetadata = requests.get(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify).json()
47+
for element in itemMetadata:
48+
languageValue = element['language']
49+
if element['key'] == replacedKey and element['value'] == replacedValue:
50+
updatedMetadataElement = {}
51+
updatedMetadataElement['key'] = replacementKey
52+
updatedMetadataElement['value'] = unicode(replacementValue)
53+
updatedMetadataElement['language'] = languageValue
54+
itemMetadataProcessed.append(updatedMetadataElement)
55+
56+
provNote = '\''+replacedKey+': '+replacedValue+'\' was replaced by \''+replacementKey+': '+replacementValue+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.'
57+
provNoteElement = {}
58+
provNoteElement['key'] = 'dc.description.provenance'
59+
provNoteElement['value'] = unicode(provNote)
60+
provNoteElement['language'] = 'en_US'
61+
itemMetadataProcessed.append(provNoteElement)
62+
else:
63+
itemMetadataProcessed.append(element)
64+
print itemMetadata
65+
itemMetadataProcessed = json.dumps(itemMetadataProcessed)
66+
67+
delete = requests.delete(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify)
68+
print delete
69+
post = requests.put(baseURL+'/rest/items/'+str(itemID)+'/metadata', headers=headerAuth, verify=verify, data=itemMetadataProcessed)
70+
print post
71+
f.writerow([itemID]+[replacedKey.encode('utf-8')]+[replacedValue.encode('utf-8')]+[replacementValue.encode('utf-8')]+[delete]+[post])

0 commit comments

Comments
 (0)