Fixes url formatting in openlibrary connector
This commit is contained in:
parent
12feecb9ea
commit
c1e1bdac4b
|
@ -68,7 +68,7 @@ class Connector(AbstractConnector):
|
||||||
key = data['key']
|
key = data['key']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ConnectorException('Invalid book data')
|
raise ConnectorException('Invalid book data')
|
||||||
return '%s/%s' % (self.books_url, key)
|
return '%s%s' % (self.books_url, key)
|
||||||
|
|
||||||
|
|
||||||
def is_work_data(self, data):
|
def is_work_data(self, data):
|
||||||
|
@ -80,7 +80,7 @@ class Connector(AbstractConnector):
|
||||||
key = data['key']
|
key = data['key']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise ConnectorException('Invalid book data')
|
raise ConnectorException('Invalid book data')
|
||||||
url = '%s/%s/editions' % (self.books_url, key)
|
url = '%s%s/editions' % (self.books_url, key)
|
||||||
data = get_data(url)
|
data = get_data(url)
|
||||||
return pick_default_edition(data['entries'])
|
return pick_default_edition(data['entries'])
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ class Connector(AbstractConnector):
|
||||||
key = data['works'][0]['key']
|
key = data['works'][0]['key']
|
||||||
except (IndexError, KeyError):
|
except (IndexError, KeyError):
|
||||||
raise ConnectorException('No work found for edition')
|
raise ConnectorException('No work found for edition')
|
||||||
url = '%s/%s' % (self.books_url, key)
|
url = '%s%s' % (self.books_url, key)
|
||||||
return get_data(url)
|
return get_data(url)
|
||||||
|
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ class Connector(AbstractConnector):
|
||||||
author_blob = author_blob.get('author', author_blob)
|
author_blob = author_blob.get('author', author_blob)
|
||||||
# this id is "/authors/OL1234567A"
|
# this id is "/authors/OL1234567A"
|
||||||
author_id = author_blob['key']
|
author_id = author_blob['key']
|
||||||
url = '%s/%s.json' % (self.base_url, author_id)
|
url = '%s%s.json' % (self.base_url, author_id)
|
||||||
yield self.get_or_create_author(url)
|
yield self.get_or_create_author(url)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
''' testing book data connectors '''
|
''' testing book data connectors '''
|
||||||
import json
|
import json
|
||||||
import pathlib
|
import pathlib
|
||||||
from dateutil import parser
|
from unittest.mock import patch
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
import pytz
|
import responses
|
||||||
|
|
||||||
from bookwyrm import models
|
from bookwyrm import models
|
||||||
from bookwyrm.connectors.openlibrary import Connector
|
from bookwyrm.connectors.openlibrary import Connector
|
||||||
|
@ -11,10 +12,13 @@ from bookwyrm.connectors.openlibrary import get_languages, get_description
|
||||||
from bookwyrm.connectors.openlibrary import pick_default_edition, \
|
from bookwyrm.connectors.openlibrary import pick_default_edition, \
|
||||||
get_openlibrary_key
|
get_openlibrary_key
|
||||||
from bookwyrm.connectors.abstract_connector import SearchResult
|
from bookwyrm.connectors.abstract_connector import SearchResult
|
||||||
|
from bookwyrm.connectors.abstract_connector import ConnectorException
|
||||||
|
|
||||||
|
|
||||||
class Openlibrary(TestCase):
|
class Openlibrary(TestCase):
|
||||||
|
''' test loading data from openlibrary.org '''
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
''' creates the connector we'll use '''
|
||||||
models.Connector.objects.create(
|
models.Connector.objects.create(
|
||||||
identifier='openlibrary.org',
|
identifier='openlibrary.org',
|
||||||
name='OpenLibrary',
|
name='OpenLibrary',
|
||||||
|
@ -37,19 +41,61 @@ class Openlibrary(TestCase):
|
||||||
self.edition_list_data = json.loads(edition_list_file.read_bytes())
|
self.edition_list_data = json.loads(edition_list_file.read_bytes())
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_remote_id_from_data(self):
|
||||||
|
''' format the remote id from the data '''
|
||||||
|
data = {'key': '/work/OL1234W'}
|
||||||
|
result = self.connector.get_remote_id_from_data(data)
|
||||||
|
self.assertEqual(result, 'https://openlibrary.org/work/OL1234W')
|
||||||
|
# error handlding
|
||||||
|
with self.assertRaises(ConnectorException):
|
||||||
|
self.connector.get_remote_id_from_data({})
|
||||||
|
|
||||||
|
|
||||||
def test_is_work_data(self):
|
def test_is_work_data(self):
|
||||||
|
''' detect if the loaded json is a work '''
|
||||||
self.assertEqual(self.connector.is_work_data(self.work_data), True)
|
self.assertEqual(self.connector.is_work_data(self.work_data), True)
|
||||||
self.assertEqual(self.connector.is_work_data(self.edition_data), False)
|
self.assertEqual(self.connector.is_work_data(self.edition_data), False)
|
||||||
|
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_get_edition_from_work_data(self):
|
||||||
|
''' loads a list of editions '''
|
||||||
|
data = {'key': '/work/OL1234W'}
|
||||||
|
responses.add(
|
||||||
|
responses.GET,
|
||||||
|
'https://openlibrary.org/work/OL1234W/editions',
|
||||||
|
json={'entries': []},
|
||||||
|
status=200)
|
||||||
|
with patch('bookwyrm.connectors.openlibrary.pick_default_edition') \
|
||||||
|
as pick_edition:
|
||||||
|
pick_edition.return_value = 'hi'
|
||||||
|
result = self.connector.get_edition_from_work_data(data)
|
||||||
|
self.assertEqual(result, 'hi')
|
||||||
|
|
||||||
|
|
||||||
|
@responses.activate
|
||||||
|
def test_get_work_from_edition_data(self):
|
||||||
|
''' loads a list of editions '''
|
||||||
|
data = {'works': [{'key': '/work/OL1234W'}]}
|
||||||
|
responses.add(
|
||||||
|
responses.GET,
|
||||||
|
'https://openlibrary.org/work/OL1234W',
|
||||||
|
json={'hi': 'there'},
|
||||||
|
status=200)
|
||||||
|
result = self.connector.get_work_from_edition_data(data)
|
||||||
|
self.assertEqual(result, {'hi': 'there'})
|
||||||
|
|
||||||
|
|
||||||
def test_pick_default_edition(self):
|
def test_pick_default_edition(self):
|
||||||
|
''' detect if the loaded json is an edition '''
|
||||||
edition = pick_default_edition(self.edition_list_data['entries'])
|
edition = pick_default_edition(self.edition_list_data['entries'])
|
||||||
self.assertEqual(edition['key'], '/books/OL9788823M')
|
self.assertEqual(edition['key'], '/books/OL9788823M')
|
||||||
|
|
||||||
|
|
||||||
def test_format_search_result(self):
|
def test_format_search_result(self):
|
||||||
''' translate json from openlibrary into SearchResult '''
|
''' translate json from openlibrary into SearchResult '''
|
||||||
datafile = pathlib.Path(__file__).parent.joinpath('../data/ol_search.json')
|
datafile = pathlib.Path(__file__).parent.joinpath(
|
||||||
|
'../data/ol_search.json')
|
||||||
search_data = json.loads(datafile.read_bytes())
|
search_data = json.loads(datafile.read_bytes())
|
||||||
results = self.connector.parse_search_data(search_data)
|
results = self.connector.parse_search_data(search_data)
|
||||||
self.assertIsInstance(results, list)
|
self.assertIsInstance(results, list)
|
||||||
|
@ -57,22 +103,27 @@ class Openlibrary(TestCase):
|
||||||
result = self.connector.format_search_result(results[0])
|
result = self.connector.format_search_result(results[0])
|
||||||
self.assertIsInstance(result, SearchResult)
|
self.assertIsInstance(result, SearchResult)
|
||||||
self.assertEqual(result.title, 'This Is How You Lose the Time War')
|
self.assertEqual(result.title, 'This Is How You Lose the Time War')
|
||||||
self.assertEqual(result.key, 'https://openlibrary.org/works/OL20639540W')
|
self.assertEqual(
|
||||||
|
result.key, 'https://openlibrary.org/works/OL20639540W')
|
||||||
self.assertEqual(result.author, 'Amal El-Mohtar, Max Gladstone')
|
self.assertEqual(result.author, 'Amal El-Mohtar, Max Gladstone')
|
||||||
self.assertEqual(result.year, 2019)
|
self.assertEqual(result.year, 2019)
|
||||||
|
self.assertEqual(result.connector, self.connector)
|
||||||
|
|
||||||
|
|
||||||
def test_get_description(self):
|
def test_get_description(self):
|
||||||
|
''' should do some cleanup on the description data '''
|
||||||
description = get_description(self.work_data['description'])
|
description = get_description(self.work_data['description'])
|
||||||
expected = 'First in the Old Kingdom/Abhorsen series.'
|
expected = 'First in the Old Kingdom/Abhorsen series.'
|
||||||
self.assertEqual(description, expected)
|
self.assertEqual(description, expected)
|
||||||
|
|
||||||
|
|
||||||
def test_get_languages(self):
|
def test_get_languages(self):
|
||||||
|
''' looks up languages from a list '''
|
||||||
languages = get_languages(self.edition_data['languages'])
|
languages = get_languages(self.edition_data['languages'])
|
||||||
self.assertEqual(languages, ['English'])
|
self.assertEqual(languages, ['English'])
|
||||||
|
|
||||||
|
|
||||||
def test_get_ol_key(self):
|
def test_get_ol_key(self):
|
||||||
|
''' extracts the uuid '''
|
||||||
key = get_openlibrary_key('/books/OL27320736M')
|
key = get_openlibrary_key('/books/OL27320736M')
|
||||||
self.assertEqual(key, 'OL27320736M')
|
self.assertEqual(key, 'OL27320736M')
|
||||||
|
|
Loading…
Reference in New Issue