Skip to content

Commit 3362540

Browse files
committed
PR updates
1 parent 62520ff commit 3362540

File tree

3 files changed

+63
-75
lines changed

3 files changed

+63
-75
lines changed

dsaps/cli.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ def main(ctx, url, email, password):
4747
ctx.obj['start_time'] = start_time
4848

4949

50+
@click.group()
51+
def aux():
52+
pass
53+
54+
5055
@main.command()
5156
@click.option('-f', '--field', prompt='Enter the field to be searched',
5257
help='The field to search.')
@@ -106,7 +111,7 @@ def newcoll(ctx, comm_handle, coll_name, metadata, file_path, file_type,
106111
models.elapsed_time(start_time, 'Total runtime:')
107112

108113

109-
@main.command()
114+
@aux.command()
110115
@click.option('-m', '--metadata_csv', prompt='Enter the metadata CSV file',
111116
help='The path of the CSV file of metadata.')
112117
@click.option('-f', '--file_path', prompt='Enter the path',
@@ -145,50 +150,47 @@ def reconcile(metadata_csv, file_path, file_type):
145150
models.create_csv_from_list(metadata_matches, 'metadata_matches.csv')
146151

147152

148-
@main.command()
153+
@aux.command()
149154
@click.option('-m', '--metadata_csv', prompt='Enter the metadata CSV file',
150155
help='The path of the CSV file of metadata.')
151156
def metadatajson(metadata_csv):
152157
with open(metadata_csv) as csvfile:
153158
reader = csv.DictReader(csvfile)
154159
metadata_group = []
160+
mapping_dict = {'fileIdentifier': ['file_identifier'],
161+
'dc.contributor.author': ['author name - direct'],
162+
'dc.contributor.advisor': ['supervisor(s)'],
163+
'dc.date.issued': ['pub date'],
164+
'dc.description.abstract': ['Abstract', 'en_US'],
165+
'dc.title': ['Title', 'en_US'],
166+
'dc.relation.ispartofseries': ['file_identifier']}
155167
for row in reader:
156168
metadata_rec = []
157-
models.metadata_csv(row, metadata_rec, 'fileIdentifier',
158-
'file_identifier', '', '')
159-
models.metadata_csv(row, metadata_rec, 'dc.contributor.author',
160-
'author name - direct', '', '')
161-
models.metadata_csv(row, metadata_rec, 'dc.contributor.advisor',
162-
'supervisor(s)', '', '')
163-
models.metadata_csv(row, metadata_rec, 'dc.date.issued',
164-
'pub date', '', '')
165-
models.metadata_csv(row, metadata_rec, 'dc.description.abstract',
166-
'Abstract', 'en_US', '')
167-
models.metadata_direct(metadata_rec, 'dc.format.mimetype',
168-
'application/pdf', 'en_US')
169-
models.metadata_direct(metadata_rec, 'dc.language.iso', 'en_US',
170-
'en_US')
171-
models.metadata_direct(metadata_rec, 'dc.publisher',
172-
'Massachusetts Institute of Technology. '
173-
'Laboratory for Computer Science', 'en_US')
174-
models.metadata_csv(row, metadata_rec,
175-
'dc.relation.ispartofseries',
176-
'file_identifier', 'en_US', '')
177-
models.metadata_direct(metadata_rec, 'dc.rights',
178-
'Educational use permitted', 'en_US')
179-
models.metadata_direct(metadata_rec, 'dc.rights.uri',
180-
'http://rightsstatements.org/vocab/'
181-
'InC-EDU/1.0/', 'en_US')
182-
models.metadata_csv(row, metadata_rec, 'dc.title', 'Title',
183-
'en_US', '')
184-
models.metadata_direct(metadata_rec, 'dc.type', 'Technical Report',
185-
'en_US')
169+
metadata_rec = models.create_metadata_rec(mapping_dict, row,
170+
metadata_rec)
171+
metadata_rec.append({'key': 'dc.format.mimetype', 'language':
172+
'en_US', 'value': 'application/pdf'})
173+
metadata_rec.append({'key': 'dc.language.iso', 'language':
174+
'en_US', 'value': 'en_US'})
175+
metadata_rec.append({'key': 'dc.publisher', 'language': 'en_US',
176+
'value': 'Massachusetts Institute of '
177+
'Technology. Laboratory for Computer'
178+
'Science'})
179+
metadata_rec.append({'key': 'dc.rights', 'language': 'en_US',
180+
'value': 'Educational use permitted'})
181+
metadata_rec.append({'key': 'dc.rights.uri', 'language': 'en_US',
182+
'value': 'http://rightsstatements.org/vocab/'
183+
'InC-EDU/1.0/'})
184+
metadata_rec.append({'key': 'dc.type', 'language': 'en_US',
185+
'value': 'Technical Report'})
186186
item = {'metadata': metadata_rec}
187187
metadata_group.append(item)
188188
file_name = os.path.splitext(os.path.basename(metadata_csv))[0]
189-
f = open(f'{file_name}.json', 'w')
190-
json.dump(metadata_group, f)
189+
with open(f'{file_name}.json', 'w') as f:
190+
json.dump(metadata_group, f)
191+
191192

193+
cli = click.CommandCollection(sources=[main, aux])
192194

193195
if __name__ == '__main__':
194-
main()
196+
cli()

dsaps/models.py

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -213,37 +213,24 @@ def elapsed_time(start_time, label):
213213
logger.info(f'{label} : {td}')
214214

215215

216-
def metadata_csv(row, metadata_rec, key, field, language, delimiter):
217-
"""Create metadata elements from CSV, including fields with delimiters."""
218-
if row[field] != '':
219-
if delimiter != '' and delimiter in row[field]:
220-
values = row[field].split(delimiter)
221-
for value in values:
222-
if language != '':
223-
metadata_elem = {'key': key, 'language': language, 'value':
224-
value}
225-
metadata_rec.append(metadata_elem)
226-
else:
227-
metadata_elem = {'key': key, 'value': value}
228-
metadata_rec.append(metadata_elem)
229-
else:
230-
value = row[field]
231-
if language != '':
232-
metadata_elem = {'key': key, 'language': language, 'value':
233-
value}
234-
metadata_rec.append(metadata_elem)
235-
else:
236-
metadata_elem = {'key': key, 'value': value}
237-
metadata_rec.append(metadata_elem)
216+
def metadata_csv(row, key, field, language=None):
217+
"""Create metadata element from CSV."""
218+
value = row[field]
219+
if language is not None:
220+
metadata_elem = {'key': key, 'language': language, 'value':
221+
value}
238222
else:
239-
pass
223+
metadata_elem = {'key': key, 'value': value}
224+
return metadata_elem
240225

241226

242-
def metadata_direct(metadata_rec, key, value, language):
243-
"""Create metadata element with specified value."""
244-
if language != '':
245-
metadata_elem = {'key': key, 'language': language, 'value': value}
246-
metadata_rec.append(metadata_elem)
247-
else:
248-
metadata_elem = {'key': key, 'value': value}
249-
metadata_rec.append(metadata_elem)
227+
def create_metadata_rec(mapping_dict, row, metadata_rec):
228+
"""Create metadata record from CSV."""
229+
for k, v in mapping_dict.items():
230+
if len(v) == 2:
231+
metadata_elem = metadata_csv(row, k, v[0], v[1])
232+
else:
233+
metadata_elem = metadata_csv(row, k, v[0])
234+
if metadata_elem['value'] != '':
235+
metadata_rec.append(metadata_elem)
236+
return metadata_rec

tests/test_models.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,17 +159,16 @@ def test_build_file_dict_remote():
159159

160160
def test_metadata_csv():
161161
"""Test metadata_csv function."""
162-
metadata_rec = []
163162
row = {'title': 'Test title'}
164-
models.metadata_csv(row, metadata_rec, 'dc.title', 'title', 'en_US', '')
165-
assert metadata_rec[0]['key'] == 'dc.title'
166-
assert metadata_rec[0]['value'] == 'Test title'
163+
metadata_elem = models.metadata_csv(row, 'dc.title', 'title', 'en_US')
164+
assert metadata_elem['key'] == 'dc.title'
165+
assert metadata_elem['value'] == 'Test title'
167166

168167

169-
def test_metadata_direct():
170-
"""Test metadata_direct function."""
168+
def test_create_metadata_rec():
171169
metadata_rec = []
172-
value = 'No one may ever view this content.'
173-
models.metadata_direct(metadata_rec, 'dc.rights', value, 'en_US')
174-
assert metadata_rec[0]['key'] == 'dc.rights'
175-
assert metadata_rec[0]['value'] == 'No one may ever view this content.'
170+
row = {'title': 'Test title'}
171+
mapping_dict = {'dc.title': ['title']}
172+
metadata_rec = models.create_metadata_rec(mapping_dict, row, metadata_rec)
173+
assert metadata_rec[0]['key'] == 'dc.title'
174+
assert metadata_rec[0]['value'] == 'Test title'

0 commit comments

Comments
 (0)