Skip to content

Commit 7246f8c

Browse files
committed
creating python3 branch
1 parent ff5a48a commit 7246f8c

28 files changed

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

0 commit comments

Comments
 (0)