Skip to content

Commit

Permalink
fix: deduplication of uri
Browse files Browse the repository at this point in the history
* changed server to invenio version (invenio and celery run)

This closes rero#5

Signed-off-by: Peter Weber <[email protected]>
Co-authored-by: Gianni Pante <[email protected]>
  • Loading branch information
rerowep and reropag committed Aug 31, 2018
1 parent 2e2f177 commit b26cd3a
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 6 deletions.
8 changes: 7 additions & 1 deletion rero_ebooks/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ def create_or_update(
record = cls.get_record_by_pid(pid, with_deleted=False)
if record:
merged_data = cls._merge_uri(data, record)
# TODO: merge metadata
record.update(merged_data, dbcommit=dbcommit, reindex=reindex)
return record, 'updated'
else:
Expand Down Expand Up @@ -121,6 +120,13 @@ def _merge_uri(cls, new_record, old_record):
"""Merge new and old records."""
field = cls.uri_key
new_e_res = new_record.get(field)
# change all tuples to lists
# the dojson produces tuples and we have lists in the record
for e_res in new_e_res:
for key, value in e_res.items():
if type(value) is tuple:
e_res[key] = list(value)

old_e_res = old_record.get(field)
for e_res in old_e_res:
# check if already exists!
Expand Down
18 changes: 14 additions & 4 deletions scripts/server
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,19 @@
# RERO Ebooks is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.

set -e
sset -e

script_path=$(dirname "$0")
FLASK_ENV=development invenio run \
--cert "$script_path"/../docker/nginx/test.crt \
--key "$script_path"/../docker/nginx/test.key

FLASK_ENV=development

# Start Worker and Server
celery worker -A invenio_app.celery --beat -l INFO & pid_celery=$!

invenio run \
--cert "$script_path"/../docker/nginx/test.crt \
--key "$script_path"/../docker/nginx/test.key & pid_server=$!

trap 'kill $pid_celery $pid_server &>/dev/null' EXIT

wait $pid_celery $pid_server
36 changes: 36 additions & 0 deletions tests/api/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,42 @@ def cdf_record():
}


@pytest.yield_fixture()
def dojson_like_cdf_record():
"""La-chaux-de-fonds record."""
yield {
'__order__': (
'other_standard_identifier',
'electronic_location_and_access',
),
'other_standard_identifier': [
{
'__order__': (
'standard_number_or_code',
),
'standard_number_or_code':
'http://cantookstation.com/resources/'
'5788be89dde6b2d458f42b35'
}
],
'electronic_location_and_access': [
{
'__order__': (
'uniform_resource_identifier',
'access_method',
'relationship',
),
'relationship': 'Resource',
'access_method': 'HTTP',
'uniform_resource_identifier': (
'http://la-chaux-de-fonds.ebibliomedia.ch/resources/'
'5788be89dde6b2d458f42b35',
),
}
],
}


@pytest.yield_fixture()
def mv_record():
"""Mediatheque-valais record."""
Expand Down
17 changes: 16 additions & 1 deletion tests/api/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ def test_merge_records(db, cdf_record, mv_record):
'uniform_resource_identifier'
]
merged_record, merged_record_status = Ebook.create_or_update(
mv_record, vendor='cantook', dbcommit=True, reindex=True)
mv_record, vendor='cantook', dbcommit=True, reindex=True
)
assert merged_record_status == 'updated'
ela = merged_record['electronic_location_and_access']
assert len(ela) == 2
Expand All @@ -40,6 +41,20 @@ def test_merge_records(db, cdf_record, mv_record):
assert cdf == second_uri


def test_merge_records_same(db, cdf_record, dojson_like_cdf_record):
"""Test merge ebook records."""
cdf_record_pid = build_ebook_pid(cdf_record, 'cantook')
new_cdf_record, cdf_status = Ebook.create_or_update(
cdf_record, vendor='cantook', dbcommit=True, reindex=True
)
merged_record, merged_record_status = Ebook.create_or_update(
dojson_like_cdf_record, vendor='cantook', dbcommit=True, reindex=True
)
assert merged_record_status == 'updated'
ela = merged_record['electronic_location_and_access']
assert len(ela) == 1


def test_create_or_update_record(db, cdf_record):
"""Test create record."""
record = Ebook.get_record_by_pid('cantook-5788be89dde6b2d458f42b35')
Expand Down

0 comments on commit b26cd3a

Please sign in to comment.