Skip to content

Commit be74ce7

Browse files
committed
updates
1 parent dc436b3 commit be74ce7

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

replaceValueInCommunityFromCSV.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
import json
2+
import requests
3+
import secrets
4+
import csv
5+
import time
6+
import urllib3
7+
import argparse
8+
from datetime import datetime
9+
10+
baseURL = secrets.baseURL
11+
email = secrets.email
12+
password = secrets.password
13+
filePath = secrets.filePath
14+
verify = secrets.verify
15+
16+
parser = argparse.ArgumentParser()
17+
parser.add_argument('-i', '--handle', help='handle of the community. optional - if not provided, the script will ask for input')
18+
parser.add_argument('-f', '--fileName', help='the CSV file of changes. optional - if not provided, the script will ask for input')
19+
args = parser.parse_args()
20+
21+
if args.fileName:
22+
fileName = filePath+args.fileName
23+
else:
24+
fileName = filePath+raw_input('Enter the file name of the CSV of changes (including \'.csv\'): ')
25+
if args.handle:
26+
handle = args.handle
27+
else:
28+
handle = raw_input('Enter community handle: ')
29+
30+
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
31+
32+
secretsVersion = raw_input('To edit production server, enter the name of the secrets file: ')
33+
if secretsVersion != '':
34+
try:
35+
secrets = __import__(secretsVersion)
36+
print 'Editing Production'
37+
except ImportError:
38+
print 'Editing Stage'
39+
40+
41+
42+
startTime = time.time()
43+
data = {'email':email,'password':password}
44+
header = {'content-type':'application/json','accept':'application/json'}
45+
session = requests.post(baseURL+'/rest/login', headers=header, verify=verify, params=data).cookies['JSESSIONID']
46+
cookies = {'JSESSIONID': session}
47+
headerFileUpload = {'accept':'application/json'}
48+
cookiesFileUpload = cookies
49+
status = requests.get(baseURL+'/rest/status', headers=header, cookies=cookies, verify=verify).json()
50+
userFullName = status['fullname']
51+
print 'authenticated'
52+
53+
endpoint = baseURL+'/rest/handle/'+handle
54+
community = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json()
55+
communityID = community['uuid']
56+
collections = requests.get(baseURL+'/rest/communities/'+str(communityID)+'/collections', headers=header, cookies=cookies, verify=verify).json()
57+
collSels = ''
58+
for j in range (0, len (collections)):
59+
collectionID = collections[j]['uuid']
60+
collSel = '&collSel[]=' + collectionID
61+
collSels = collSels + collSel
62+
63+
f=csv.writer(open(filePath+'replacedValues'+datetime.now().strftime('%Y-%m-%d %H.%M.%S')+'.csv', 'wb'))
64+
f.writerow(['handle']+['replacedValue']+['replacementValue'])
65+
with open(fileName) as csvfile:
66+
reader = csv.DictReader(csvfile)
67+
for row in reader:
68+
replacedValue = row['replacedValue']
69+
replacementValue = row['replacementValue']
70+
offset = 0
71+
recordsEdited = 0
72+
items = ''
73+
while items != []:
74+
endpoint = baseURL+'/rest/filtered-items?query_field[]=*&query_op[]=equals&query_val[]='+replacedValue+collSels+'&limit=200&offset='+str(offset)
75+
print endpoint
76+
77+
response = requests.get(endpoint, headers=header, cookies=cookies, verify=verify).json()
78+
items = response['items']
79+
for item in items:
80+
itemMetadataProcessed = []
81+
itemLink = item['link']
82+
metadata = requests.get(baseURL + itemLink + '/metadata', headers=header, cookies=cookies, verify=verify).json()
83+
for l in range (0, len (metadata)):
84+
metadata[l].pop('schema', None)
85+
metadata[l].pop('element', None)
86+
metadata[l].pop('qualifier', None)
87+
languageValue = metadata[l]['language']
88+
if metadata[l]['value'] == replacedValue:
89+
key = metadata[l]['key']
90+
replacedElement = metadata[l]
91+
updatedMetadataElement = {}
92+
updatedMetadataElement['key'] = metadata[l]['key']
93+
updatedMetadataElement['value'] = unicode(replacementValue)
94+
updatedMetadataElement['language'] = languageValue
95+
itemMetadataProcessed.append(updatedMetadataElement)
96+
provNote = '\''+key+': '+replacedValue+'\' was replaced by \''+key+': '+replacementValue+'\' through a batch process on '+datetime.now().strftime('%Y-%m-%d %H:%M:%S')+'.'
97+
provNoteElement = {}
98+
provNoteElement['key'] = 'dc.description.provenance'
99+
provNoteElement['value'] = unicode(provNote)
100+
provNoteElement['language'] = 'en_US'
101+
itemMetadataProcessed.append(provNoteElement)
102+
recordsEdited = recordsEdited + 1
103+
else:
104+
if metadata[l] not in itemMetadataProcessed:
105+
itemMetadataProcessed.append(metadata[l])
106+
itemMetadataProcessed = json.dumps(itemMetadataProcessed)
107+
print 'updated', itemLink, recordsEdited
108+
delete = requests.delete(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify)
109+
print delete
110+
post = requests.put(baseURL+itemLink+'/metadata', headers=header, cookies=cookies, verify=verify, data=itemMetadataProcessed)
111+
print post
112+
f.writerow([itemLink]+[replacedValue]+[replacementValue]+[delete]+[post])
113+
offset = offset + 200
114+
print offset
115+
116+
logout = requests.post(baseURL+'/rest/logout', headers=header, cookies=cookies, verify=verify)
117+
118+
elapsedTime = time.time() - startTime
119+
m, s = divmod(elapsedTime, 60)
120+
h, m = divmod(m, 60)
121+
print 'Total script run time: ', '%d:%02d:%02d' % (h, m, s)

0 commit comments

Comments
 (0)