Skip to content

Commit 690f4b9

Browse files
author
Karen Coombs
committed
Added function for bibMatch
1 parent 11eec34 commit 690f4b9

File tree

4 files changed

+170
-1
lines changed

4 files changed

+170
-1
lines changed

src/make_requests.py

+18-1
Original file line numberDiff line numberDiff line change
@@ -181,4 +181,21 @@ def addLHR(config, oclcnumber, oclcSymbol, branch, shelfLocation, classPart, ite
181181
print(err)
182182
except requests.exceptions.HTTPError as err:
183183
status = "failed"
184-
return pd.Series([oclcnumber, accessionNumber, status])
184+
return pd.Series([oclcnumber, accessionNumber, status])
185+
186+
def findBibMatch(config, record):
187+
oauth_session = config.get('oauth-session')
188+
try:
189+
r = oauth_session.post(config.get('metadata_service_url') + "/bibs/match", data=input, headers={"Accept":'application/xml"', "Content-Type": "application/xml"})
190+
r.raise_for_status
191+
try:
192+
result = r.json()
193+
oclcNumber = result['briefRecords'][0]['oclcNumber']
194+
status = "success"
195+
except xml.etree.ElementTree.ParseError as err:
196+
oclcNumber = ""
197+
status = "failed XML parsing issue"
198+
print(err)
199+
except requests.exceptions.HTTPError as err:
200+
status = "failed"
201+
return pd.Series([oclcNumber, status])

tests/mocks/bib_match_response.json

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
{
2+
"numberOfRecords": 3,
3+
"briefRecords": [
4+
{
5+
"oclcNumber": "311684437",
6+
"title": "Pride and prejudice and zombies : the classic regency romance--now with ultraviolent zombie mayhem",
7+
"creator": "Seth Grahame-Smith",
8+
"date": "2009",
9+
"machineReadableDate": "2009",
10+
"language": "eng",
11+
"generalFormat": "Book",
12+
"specificFormat": "PrintBook",
13+
"edition": "",
14+
"publisher": "Quirk Books",
15+
"publicationPlace": "Philadelphia",
16+
"isbns": [
17+
"9781594743344",
18+
"1594743347",
19+
"9781594743351",
20+
"1594743355",
21+
"9781594744518",
22+
"1594744513"
23+
],
24+
"issns": [],
25+
"mergedOclcNumbers": [
26+
"261176486",
27+
"330361568",
28+
"377707240",
29+
"426228842",
30+
"701739996",
31+
"716923895",
32+
"731216527",
33+
"887752101",
34+
"945738851",
35+
"1045429884",
36+
"1201885873",
37+
"1202008371"
38+
],
39+
"catalogingInfo": {
40+
"catalogingAgency": "DLC",
41+
"catalogingLanguage": "eng",
42+
"levelOfCataloging": " ",
43+
"transcribingAgency": "DLC"
44+
}
45+
}
46+
]
47+
}

tests/mocks/bib_to_match.xml

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<record xmlns="http://www.loc.gov/MARC21/slim">
3+
<leader>00000cam a2200000 a 4500</leader>
4+
<controlfield tag="005">20200327224019.6</controlfield>
5+
<controlfield tag="008">080916s2009 paua 000 1 eng </controlfield>
6+
<datafield tag="010" ind1=" " ind2=" ">
7+
<subfield code="a"> 2008937609</subfield>
8+
</datafield>
9+
<datafield tag="020" ind1=" " ind2=" ">
10+
<subfield code="a">9781594743344</subfield>
11+
<subfield code="q">(pbk. ;</subfield>
12+
<subfield code="q">alk. paper)</subfield>
13+
</datafield>
14+
<datafield tag="020" ind1=" " ind2=" ">
15+
<subfield code="a">1594743347</subfield>
16+
<subfield code="q">(pbk. ;</subfield>
17+
<subfield code="q">alk. paper)</subfield>
18+
</datafield>
19+
<datafield tag="020" ind1=" " ind2=" ">
20+
<subfield code="a">9781594743351</subfield>
21+
<subfield code="q">(pbk. ;</subfield>
22+
<subfield code="q">alk. paper)</subfield>
23+
</datafield>
24+
<datafield tag="020" ind1=" " ind2=" ">
25+
<subfield code="a">1594743355</subfield>
26+
<subfield code="q">(pbk. ;</subfield>
27+
<subfield code="q">alk. paper)</subfield>
28+
</datafield>
29+
<datafield tag="020" ind1=" " ind2=" ">
30+
<subfield code="a">9781594744518</subfield>
31+
<subfield code="q">(hbk.)</subfield>
32+
</datafield>
33+
<datafield tag="020" ind1=" " ind2=" ">
34+
<subfield code="a">1594744513</subfield>
35+
<subfield code="q">(hbk.)</subfield>
36+
</datafield>
37+
<datafield tag="082" ind1="0" ind2="0">
38+
<subfield code="a">813/.6</subfield>
39+
<subfield code="2">22</subfield>
40+
</datafield>
41+
<datafield tag="100" ind1="1" ind2=" ">
42+
<subfield code="a">Grahame-Smith, Seth,</subfield>
43+
<subfield code="e">author.</subfield>
44+
</datafield>
45+
<datafield tag="245" ind1="1" ind2="0">
46+
<subfield code="a">Pride and prejudice and zombies :</subfield>
47+
<subfield code="b">the classic regency romance--now with ultraviolent zombie mayhem /</subfield>
48+
<subfield code="c">by Jane Austen and Seth Grahame-Smith.</subfield>
49+
</datafield>
50+
<datafield tag="260" ind1=" " ind2=" ">
51+
<subfield code="a">Philadelphia :</subfield>
52+
<subfield code="b">Quirk Books ;</subfield>
53+
<subfield code="a">San Francisco :</subfield>
54+
<subfield code="b">Distributed in North America by Chronicle Books,</subfield>
55+
<subfield code="c">©2009.</subfield>
56+
</datafield>
57+
<datafield tag="600" ind1="1" ind2="7">
58+
<subfield code="a">Austen, Jane,</subfield>
59+
<subfield code="d">1775-1817</subfield>
60+
<subfield code="v">Parodies, imitations, etc.</subfield>
61+
<subfield code="2">sears</subfield>
62+
</datafield>
63+
<datafield tag="650" ind1=" " ind2="7">
64+
<subfield code="a">Darcy, Fitzwilliam (Fictional character)</subfield>
65+
<subfield code="v">Fiction.</subfield>
66+
<subfield code="2">sears</subfield>
67+
</datafield>
68+
<datafield tag="650" ind1=" " ind2="7">
69+
<subfield code="a">Bennet, Elizabeth (Fictional character)</subfield>
70+
<subfield code="v">Fiction.</subfield>
71+
<subfield code="2">sears</subfield>
72+
</datafield>
73+
<datafield tag="650" ind1=" " ind2="7">
74+
<subfield code="a">Zombies</subfield>
75+
<subfield code="v">Fiction.</subfield>
76+
<subfield code="2">sears</subfield>
77+
</datafield>
78+
<datafield tag="655" ind1=" " ind2="7">
79+
<subfield code="a">Regency novels.</subfield>
80+
<subfield code="2">sears</subfield>
81+
</datafield>
82+
</record>

tests/test_findBibdMatch.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import pytest
2+
import json
3+
import requests_mock
4+
import pandas
5+
from src import make_requests
6+
7+
with open('tests/mocks/bib_match_response.json', 'r') as myfile:
8+
data=myfile.read()
9+
# parse file
10+
matchResults = json.loads(data)
11+
12+
def test_findBibMatch(requests_mock, mockOAuthSession, getTestConfig):
13+
getTestConfig.update({'oauth-session': mockOAuthSession})
14+
with open('tests/mocks/bib_to_match.xml', 'r') as recordFile:
15+
data=recordFile.read()
16+
record = data
17+
requests_mock.register_uri('POST', 'https://metadata.api.oclc.org/worldcat/manage/bibs/match', status_code=200, json=matchResults)
18+
bib = make_requests.findBibMatch(getTestConfig, record);
19+
assert type(bib) is pandas.core.series.Series
20+
assert bib[0] == '311684437'
21+
assert bib[1] == 'success'
22+
23+

0 commit comments

Comments
 (0)