Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- client method to write search results to an XML file, with validation against expected number of records to be written
- client method to return an iterator of XML records from a search, to support streaming results for large result sets
- xml fixture files for testing
- tests for the new client methods, including edge cases for validation

### Changed
- README examples

### Deprecated
- N/A

### Removed
- N/A

### Fixed
- N/A

### Security
- N/A


## [0.1.1]

### Added
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,12 @@ ids = client.fetch_ids_search("collection:'Disabled Students Program Photos'")
records = client.fetch_search_metadata("collection:'Disabled Students Program Photos'")

# return raw XML or PyMARC records from a paginated search
# NOTE: for large result sets, use the write_search_results_to_file() method and then parse that file
xml_results = client.search("collection:'Disabled Students Program Photos'", result_format="xml")
pymarc_results = client.search("collection:'Disabled Students Program Photos'", result_format="pymarc")

# search Tind with a query and write results to an XML file in the default storage directory
records_written = client.write_search_results_to_file("Old Emperor Norton", "full_norton_results.xml")
```

## Running tests
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,5 @@ allow-init-docstring = true
skip-checking-raises = true
style = "sphinx"

[tool.pylint.format]
max-line-length = 100
174 changes: 174 additions & 0 deletions tests/fixtures/1st-batch-tind-response.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
<response>
<total>3</total>
<search_id>FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFm04dVFEUk1JUjVpaHgzV2VIdTBOclEAAAAAAbR0aRZZQVkyRloyLVJtRzVJT1ZZTmdmMFpn</search_id>
<collection xmlns="http://www.loc.gov/MARC21/slim">
<record>
<controlfield tag="001">27320</controlfield>
<controlfield tag="005">20250429135007.0</controlfield>
<datafield tag="024" ind1="8" ind2="0">
<subfield code="a">BANC PIC 1996.003:Volume 24:42a--fALB</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">calher_cubanc_25_132_00180699</subfield>
</datafield>
<datafield tag="245" ind1=" " ind2=" ">
<subfield code="a">Old Emperor Norton in 1876</subfield>
</datafield>
<datafield tag="336" ind1=" " ind2=" ">
<subfield code="a">Image</subfield>
</datafield>
<datafield tag="540" ind1=" " ind2=" ">
<subfield code="a">Researchers may make free and open use of the UC Berkeley Library’s digitized public domain materials. However, some materials in our online collections may be protected by U.S. copyright law (Title 17, U.S.C.). Use or reproduction of materials protected by copyright beyond that allowed by fair use (Title 17, U.S.C. § 107) requires permission from the copyright owners. The use or reproduction of some materials may also be restricted by terms of University of California gift or purchase agreements, privacy and publicity rights, or trademark law. Responsibility for determining rights status and permissibility of any use or reproduction rests exclusively with the researcher. To learn more or make inquiries, please see our permissions policies (https://www.lib.berkeley.edu/about/permissions-policies).</subfield>
</datafield>
<datafield tag="852" ind1=" " ind2=" ">
<subfield code="c">The Bancroft Library</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2="1">
<subfield code="u">http://www.oac.cdlib.org/findaid/ark:/13030/tf129005j4</subfield>
<subfield code="y">View collection guide</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2=" ">
<subfield code="9">c6cf7b70-4acd-466f-ab1a-3ca53b4a2789</subfield>
<subfield code="s">196176</subfield>
<subfield code="u">https://digicoll.lib.berkeley.edu/record/27320/files/I0051200A.jpg</subfield>
</datafield>
<datafield tag="901" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/tf9m3nb8s8</subfield>
<subfield code="f">ark:/13030/tf129005j4</subfield>
<subfield code="g">25:132</subfield>
</datafield>
<datafield tag="902" ind1=" " ind2=" ">
<subfield code="f">cubanc_25_132_00180699.xml</subfield>
</datafield>
<datafield tag="909" ind1="C" ind2="O">
<subfield code="o">oai:digicoll.lib.berkeley.edu:27320</subfield>
<subfield code="p">sfg</subfield>
<subfield code="p">calher:cookscrapbook</subfield>
<subfield code="q">mcleanCalisphere_oai</subfield>
</datafield>
<datafield tag="951" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/m5s5429m</subfield>
<subfield code="b">Merritt</subfield>
</datafield>
<datafield tag="980" ind1=" " ind2=" ">
<subfield code="a">CalHer: Cook Scrapbook</subfield>
</datafield>
<datafield tag="982" ind1=" " ind2=" ">
<subfield code="a">Jesse Brown Cook Scrapbooks</subfield>
<subfield code="b">Jesse Brown Cook Scrapbooks Documenting San Francisco History and Law Enforcement</subfield>
</datafield>
</record>
<record>
<controlfield tag="001">28819</controlfield>
<controlfield tag="005">20250429135229.0</controlfield>
<datafield tag="024" ind1="8" ind2="0">
<subfield code="a">BANC PIC 1996.003:Volume 24:41b--fALB</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">calher_cubanc_25_132_00180698</subfield>
</datafield>
<datafield tag="245" ind1=" " ind2=" ">
<subfield code="a">Old Emperor Norton in 1876</subfield>
</datafield>
<datafield tag="336" ind1=" " ind2=" ">
<subfield code="a">Image</subfield>
</datafield>
<datafield tag="540" ind1=" " ind2=" ">
<subfield code="a">Researchers may make free and open use of the UC Berkeley Library’s digitized public domain materials. However, some materials in our online collections may be protected by U.S. copyright law (Title 17, U.S.C.). Use or reproduction of materials protected by copyright beyond that allowed by fair use (Title 17, U.S.C. § 107) requires permission from the copyright owners. The use or reproduction of some materials may also be restricted by terms of University of California gift or purchase agreements, privacy and publicity rights, or trademark law. Responsibility for determining rights status and permissibility of any use or reproduction rests exclusively with the researcher. To learn more or make inquiries, please see our permissions policies (https://www.lib.berkeley.edu/about/permissions-policies).</subfield>
</datafield>
<datafield tag="852" ind1=" " ind2=" ">
<subfield code="c">The Bancroft Library</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2="1">
<subfield code="u">http://www.oac.cdlib.org/findaid/ark:/13030/tf129005j4</subfield>
<subfield code="y">View collection guide</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2=" ">
<subfield code="9">5e1f7508-117f-4120-9acf-88f09c2c20d8</subfield>
<subfield code="s">170081</subfield>
<subfield code="u">https://digicoll.lib.berkeley.edu/record/28819/files/I0051199A.jpg</subfield>
</datafield>
<datafield tag="901" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/tf496nb4j6</subfield>
<subfield code="f">ark:/13030/tf129005j4</subfield>
<subfield code="g">25:132</subfield>
</datafield>
<datafield tag="902" ind1=" " ind2=" ">
<subfield code="f">cubanc_25_132_00180698.xml</subfield>
</datafield>
<datafield tag="909" ind1="C" ind2="O">
<subfield code="o">oai:digicoll.lib.berkeley.edu:28819</subfield>
<subfield code="p">sfg</subfield>
<subfield code="p">calher:cookscrapbook</subfield>
<subfield code="q">mcleanCalisphere_oai</subfield>
</datafield>
<datafield tag="951" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/m57159jp</subfield>
<subfield code="b">Merritt</subfield>
</datafield>
<datafield tag="980" ind1=" " ind2=" ">
<subfield code="a">CalHer: Cook Scrapbook</subfield>
</datafield>
<datafield tag="982" ind1=" " ind2=" ">
<subfield code="a">Jesse Brown Cook Scrapbooks</subfield>
<subfield code="b">Jesse Brown Cook Scrapbooks Documenting San Francisco History and Law Enforcement</subfield>
</datafield>
</record>
<record>
<controlfield tag="001">29563</controlfield>
<controlfield tag="005">20250429135339.0</controlfield>
<datafield tag="024" ind1="8" ind2="0">
<subfield code="a">BANC PIC 1996.003:Volume 24:41a--fALB</subfield>
</datafield>
<datafield tag="035" ind1=" " ind2=" ">
<subfield code="a">calher_cubanc_25_132_00180697</subfield>
</datafield>
<datafield tag="245" ind1=" " ind2=" ">
<subfield code="a">Old Emperor Norton in 1876</subfield>
</datafield>
<datafield tag="336" ind1=" " ind2=" ">
<subfield code="a">Image</subfield>
</datafield>
<datafield tag="540" ind1=" " ind2=" ">
<subfield code="a">Researchers may make free and open use of the UC Berkeley Library’s digitized public domain materials. However, some materials in our online collections may be protected by U.S. copyright law (Title 17, U.S.C.). Use or reproduction of materials protected by copyright beyond that allowed by fair use (Title 17, U.S.C. § 107) requires permission from the copyright owners. The use or reproduction of some materials may also be restricted by terms of University of California gift or purchase agreements, privacy and publicity rights, or trademark law. Responsibility for determining rights status and permissibility of any use or reproduction rests exclusively with the researcher. To learn more or make inquiries, please see our permissions policies (https://www.lib.berkeley.edu/about/permissions-policies).</subfield>
</datafield>
<datafield tag="852" ind1=" " ind2=" ">
<subfield code="c">The Bancroft Library</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2="1">
<subfield code="u">http://www.oac.cdlib.org/findaid/ark:/13030/tf129005j4</subfield>
<subfield code="y">View collection guide</subfield>
</datafield>
<datafield tag="856" ind1="4" ind2=" ">
<subfield code="9">7f7df611-bbe6-4855-8725-2fbd8f9e3d90</subfield>
<subfield code="s">199139</subfield>
<subfield code="u">https://digicoll.lib.berkeley.edu/record/29563/files/I0051198A.jpg</subfield>
</datafield>
<datafield tag="901" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/tf7g5010k5</subfield>
<subfield code="f">ark:/13030/tf129005j4</subfield>
<subfield code="g">25:132</subfield>
</datafield>
<datafield tag="902" ind1=" " ind2=" ">
<subfield code="f">cubanc_25_132_00180697.xml</subfield>
</datafield>
<datafield tag="909" ind1="C" ind2="O">
<subfield code="o">oai:digicoll.lib.berkeley.edu:29563</subfield>
<subfield code="p">sfg</subfield>
<subfield code="p">calher:cookscrapbook</subfield>
<subfield code="q">mcleanCalisphere_oai</subfield>
</datafield>
<datafield tag="951" ind1=" " ind2=" ">
<subfield code="a">ark:/13030/m5bp7bwt</subfield>
<subfield code="b">Merritt</subfield>
</datafield>
<datafield tag="980" ind1=" " ind2=" ">
<subfield code="a">CalHer: Cook Scrapbook</subfield>
</datafield>
<datafield tag="982" ind1=" " ind2=" ">
<subfield code="a">Jesse Brown Cook Scrapbooks</subfield>
<subfield code="b">Jesse Brown Cook Scrapbooks Documenting San Francisco History and Law Enforcement</subfield>
</datafield>
</record>
</collection>
</response>
5 changes: 5 additions & 0 deletions tests/fixtures/end-of-batch-tind-response.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<response>
<total>3</total>
<search_id>FGluY2x1ZGVfY29udGV4dF91dWlkDXF1ZXJ5QW5kRmV0Y2gBFm04dVFEUk1JUjVpaHgzV2VIdTBOclEAAAAAAbR0aRZZQVkyRloyLVJtRzVJT1ZZTmdmMFpn</search_id>
<collection xmlns="http://www.loc.gov/MARC21/slim"/>
</response>
Loading