Skip to content

Commit dbfb0e7

Browse files
authored
Merge pull request #1 from dheles/delete_bitstreams
Add script to delete an item's bitstreams
2 parents be9d513 + b87801e commit dbfb0e7

File tree

3 files changed

+85
-1
lines changed

3 files changed

+85
-1
lines changed

.gitignore

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,16 @@ data/*
5252
!data/.keep
5353
.profile
5454
*.csv
55-
*.json
55+
*.json
56+
57+
# Environments
58+
.env
59+
.venv
60+
env/
61+
venv/
62+
ENV/
63+
env.bak/
64+
venv.bak/
65+
66+
# Rope project settings
67+
.ropeproject

data/.keep

Whitespace-only changes.

deleteBitstreamsFromItem.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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+
itemHandle = raw_input('Enter item handle: ')
27+
28+
29+
startTime = time.time()
30+
data = json.dumps({'email':email,'password':password})
31+
header = {'content-type':'application/json','accept':'application/json'}
32+
session = requests.post(baseURL + '/rest/login', headers=header, verify=verify, data=data).content
33+
headerAuth = {'content-type':'application/json','accept':'application/json', 'rest-dspace-token':session}
34+
print 'authenticated'
35+
36+
bitstreamList = []
37+
endpoint = baseURL + '/rest/handle/' + itemHandle
38+
item = requests.get(endpoint, headers=headerAuth, verify=verify).json()
39+
itemID = item['id']
40+
print 'itemID = %s' % itemID
41+
bitstreams = ''
42+
url = baseURL + '/rest/items/' + str(itemID) + '/bitstreams?expand=bitstreams'
43+
bitstreams = requests.get(url, headers=headerAuth, verify=verify)
44+
while bitstreams.status_code != 200:
45+
time.sleep(5)
46+
bitstreams = requests.get(url, headers=headerAuth, verify=verify)
47+
bitstreams = bitstreams.json()
48+
print 'found %d bitstreams' % len(bitstreams)
49+
for k in range(0, len(bitstreams)):
50+
bitstreamID = bitstreams[k]['id']
51+
bitstreamList.append(bitstreamID)
52+
elapsedTime = time.time() - startTime
53+
m, s = divmod(elapsedTime, 60)
54+
h, m = divmod(m, 60)
55+
print 'Bitstreams list creation time: ', '%d:%02d:%02d' % (h, m, s)
56+
print(bitstreamList)
57+
58+
f=csv.writer(open(filePath + 'deletedBitstreams' + datetime.now().strftime('%Y-%m-%d %H.%M.%S') + '.csv', 'wb'))
59+
f.writerow(['bitstreamID'] + ['delete'])
60+
for number, bitstreamID in enumerate(bitstreamList):
61+
bitstreamsRemaining = len(bitstreamList) - number
62+
print 'Bitstreams remaining: ', bitstreamsRemaining, 'bitstreamID: ', bitstreamID
63+
delete = requests.delete(baseURL + '/rest/bitstreams/' + str(bitstreamID), headers=headerAuth, verify=verify)
64+
print delete
65+
f.writerow([bitstreamID] + [delete])
66+
67+
logout = requests.post(baseURL + '/rest/logout', headers=headerAuth, verify=verify)
68+
69+
elapsedTime = time.time() - startTime
70+
m, s = divmod(elapsedTime, 60)
71+
h, m = divmod(m, 60)
72+
print 'Total script run time: ', '%d:%02d:%02d' % (h, m, s)

0 commit comments

Comments
 (0)