diff --git a/CHANGELOG.md b/CHANGELOG.md
index 24ba4a0..b9a89dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
## [Unreleased]
+## [0.1.0] - 2020-10-04
+### Added
+- Add `record_schema` parameter
+- Add new dependencies to xmltodict and flatten-dict
+
+### Changed
+- recordData is now returned as flattened dict (if possible)
+
+### Fixed
+- Fix typo in `searchRetrieve` operation name
+
## [0.0.5] - 2020-06-10
### Changed
- Remove dependencies to convert md to rst
@@ -45,7 +56,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
- `Fixed` for any bug fixes.
- `Security` to invite users to upgrade in case of vulnerabilities.
-[Unreleased]: https://github.com/metaodi/sruthi/compare/v0.0.5...HEAD
+[Unreleased]: https://github.com/metaodi/sruthi/compare/v0.1.0...HEAD
+[0.1.0]: https://github.com/metaodi/sruthi/compare/v0.0.5...v0.1.0
[0.0.5]: https://github.com/metaodi/sruthi/compare/v0.0.4...v0.0.5
[0.0.4]: https://github.com/metaodi/sruthi/compare/v0.0.3...v0.0.4
[0.0.3]: https://github.com/metaodi/sruthi/compare/v0.0.2...v0.0.3
diff --git a/README.md b/README.md
index b044761..c532b38 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,10 @@ Currently only SRU 1.2 is supported.
* [Installation](#installation)
* [Usage](#usage)
+ * [`searchretrieve` operation](#searchretrieve-operation)
+ * [`explain` operation](#explain-operation)
* [Schemas](#schemas)
+* [Release](#release)
## Installation
@@ -43,7 +46,6 @@ import sruthi
# note: records is an iterator
records = sruthi.searchretrieve('https://suche.staatsarchiv.djiktzh.ch/SRU/', query='Human')
-print(records.cql)
print(records.sru_version)
print(records.count)
@@ -54,7 +56,7 @@ for record in records:
The return value of `searchretrieve` is iterable, so you can easily loop over it. Or you can use indices to access elements, e.g. `records[1]` to get the second elemenet, or `records[-1]` to get the last one.
-Even [slicing](https://python-reference.readthedocs.io/en/latest/docs/brackets/slicing.html) is supported, so can can do things like only iterate over the first 5 elements using
+Even [slicing](https://python-reference.readthedocs.io/en/latest/docs/brackets/slicing.html) is supported, so you can do things like only iterate over the first 5 elements using
```python
for records in records[:5]:
diff --git a/examples/isad.py b/examples/isad.py
new file mode 100644
index 0000000..729805a
--- /dev/null
+++ b/examples/isad.py
@@ -0,0 +1,20 @@
+import sruthi
+from pprint import pprint
+
+# check supported schemas of server
+server_url = 'https://suche.staatsarchiv.djiktzh.ch/SRU/'
+schema = 'isad'
+server = sruthi.explain(server_url)
+
+
+print(20 * '=')
+print('=')
+print(f"= Record with schema: {schema}")
+print('=')
+print(20 * '=')
+records = sruthi.searchretrieve(
+ server_url,
+ query='Zurich',
+ record_schema=schema
+)
+pprint(records[0])
diff --git a/examples/schemas.py b/examples/schemas.py
new file mode 100644
index 0000000..80a02fe
--- /dev/null
+++ b/examples/schemas.py
@@ -0,0 +1,23 @@
+import sruthi
+from pprint import pprint
+
+# check supported schemas of server
+server = sruthi.explain('http://lx2.loc.gov:210/LCDB?')
+
+print(f"Supported schemas: {', '.join(server.schema.keys())}")
+
+
+for schema in server.schema.keys():
+ print(20 * '=')
+ print('=')
+ print(f"= Record with schema: {schema}")
+ print('=')
+ print(20 * '=')
+ records = sruthi.searchretrieve(
+ 'http://lx2.loc.gov:210/LCDB?',
+ query="human",
+ record_schema=schema
+ )
+ pprint(records[0])
+ print('')
+ print('')
diff --git a/examples/searchretrieve.py b/examples/searchretrieve.py
new file mode 100644
index 0000000..6d316a7
--- /dev/null
+++ b/examples/searchretrieve.py
@@ -0,0 +1,14 @@
+import sruthi
+
+records = sruthi.searchretrieve('https://suche.staatsarchiv.djiktzh.ch/SRU/', query='Zurich')
+print("SRU version:", records.sru_version)
+print("Count:", records.count)
+print('')
+
+for record in records:
+ # print fields from schema
+ print(record['reference'])
+ print(record['title'])
+ print(record['date'])
+ print(record['extra']['link']) # extra record data is available at the 'extra' key
+ print('')
diff --git a/requirements.txt b/requirements.txt
index df7eaf0..d5b78bc 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,4 @@
requests
defusedxml
+xmltodict
+flatten-dict
diff --git a/sruthi/__init__.py b/sruthi/__init__.py
index 126a60e..db700b5 100644
--- a/sruthi/__init__.py
+++ b/sruthi/__init__.py
@@ -1,4 +1,4 @@
-__version__ = '0.0.5'
+__version__ = '0.1.0'
__all__ = ['client', 'errors', 'response', 'sru', 'xmlparse']
from .errors import SruthiError, ServerIncompatibleError, SruError, NoMoreRecordsError # noqa
diff --git a/sruthi/client.py b/sruthi/client.py
index 745182a..11e8078 100644
--- a/sruthi/client.py
+++ b/sruthi/client.py
@@ -7,38 +7,44 @@
class Client(object):
- def __init__(self, url=None, maximum_records=10):
+ def __init__(self, url=None, maximum_records=10, record_schema=None):
self.url = url
self.maximum_records = maximum_records
self.sru_version = '1.2'
+ self.record_schema = record_schema
- def searchretrieve(self, query, start_record=1):
+ def searchretrieve(self, query, start_record=1, requests_kwargs=None):
params = {
- 'operation': 'searchretrieve',
+ 'operation': 'searchRetrieve',
'version': self.sru_version,
'query': query,
'startRecord': start_record,
'maximumRecords': self.maximum_records,
}
- data_loader = DataLoader(self.url, params)
+
+ if self.record_schema:
+ params['recordSchema'] = self.record_schema
+
+ data_loader = DataLoader(self.url, params, requests_kwargs)
return response.SearchRetrieveResponse(data_loader)
- def explain(self):
+ def explain(self, requests_kwargs=None):
params = {
'operation': 'explain',
'version': self.sru_version,
}
- data_loader = DataLoader(self.url, params)
+ data_loader = DataLoader(self.url, params, requests_kwargs)
return response.ExplainResponse(data_loader)
class DataLoader(object):
- def __init__(self, url, params):
+ def __init__(self, url, params, requests_kwargs=None):
self.session = requests.Session()
self.url = url
self.params = params
self.response = None
self.xmlparser = xmlparse.XMLParser()
+ self.requests_kwargs = requests_kwargs or {}
def load(self, **kwargs):
self.params.update(kwargs)
@@ -50,7 +56,8 @@ def _get_content(self, url, params):
try:
res = self.session.get(
url,
- params=params
+ params=params,
+ **self.requests_kwargs
)
res.raise_for_status()
except requests.exceptions.HTTPError as e:
@@ -62,10 +69,11 @@ def _get_content(self, url, params):
def _check_errors(self, xml):
sru = '{http://www.loc.gov/zing/srw/}'
+ diag = '{http://www.loc.gov/zing/srw/diagnostic/}'
diagnostics = self.xmlparser.find(
xml,
- f'{sru}diagnostics/{sru}diagnostic'
+ f'{sru}diagnostics/{diag}diagnostic'
)
if diagnostics:
- error_msg = " ".join([d.find('detail').text for d in diagnostics])
+ error_msg = ", ".join([d.text for d in diagnostics])
raise errors.SruError(error_msg)
diff --git a/sruthi/response.py b/sruthi/response.py
index 17c9db9..a5b119c 100644
--- a/sruthi/response.py
+++ b/sruthi/response.py
@@ -3,6 +3,7 @@
from collections import defaultdict
import re
import warnings
+from flatten_dict import flatten
from . import xmlparse
from . import errors
@@ -127,29 +128,46 @@ def _extract_records(self, xml):
record_data = self.xmlparser.find(xml_rec, './sru:recordData')
extra_data = self.xmlparser.find(xml_rec, './sru:extraRecordData')
- for elem in record_data.iter():
- record = self._tag_data(record, elem)
-
- extra = defaultdict()
- for elem in extra_data.iter():
- extra = self._tag_data(extra, elem)
- record['extra'] = dict(extra)
-
- record.pop('recordData', None)
- record.pop('extraRecordData', None)
+ record.update(self._tag_data(record_data, 'sru:recordData') or {})
+ record['extra'] = self._tag_data(extra_data, 'sru:extraRecordData')
record = dict(record)
new_records.append(record)
self.records.extend(new_records)
- def _tag_data(self, record, elem):
+ def _tag_data(self, elem, parent):
+ if not elem:
+ return None
+
+ record_data = self.xmlparser.todict(elem, xml_attribs=True).get(parent)
+ if not record_data:
+ return None
+
+ # check if there is only one element on the top level
+ keys = list(record_data.keys())
+ if len(record_data) == 1 and len(keys) > 0 and len(record_data[keys[0]]) > 0:
+ record_data = record_data[keys[0]]
+
+ record_data.pop('schemaLocation', None)
+ record_data.pop('xmlns', None)
+
+ def leaf_reducer(k1, k2):
+ # only use key of leaf element
+ return k2
+
+ try:
+ record_data = flatten(record_data, reducer=leaf_reducer)
+ except ValueError:
+ # if the keys of the leaf elements are not unique
+ # the dict will not be flattened
+ pass
+
+ return record_data
+
+ def _remove_namespace(self, elem):
ns_pattern = re.compile('{.+}')
tag_name = ns_pattern.sub('', elem.tag)
- if elem.text and elem.text.strip():
- record[tag_name] = elem.text.strip()
- elif len(list(elem)) == 0: # leaf element
- record[tag_name] = None
- return record
+ return tag_name
class ExplainResponse(Response):
diff --git a/sruthi/sru.py b/sruthi/sru.py
index 9210a02..583b482 100644
--- a/sruthi/sru.py
+++ b/sruthi/sru.py
@@ -3,9 +3,17 @@
from . import client
-def searchretrieve(url, query):
- c = client.Client(url)
- return c.searchretrieve(query)
+def searchretrieve(url, query, **kwargs):
+ search_params = ['query', 'start_record', 'requests_kwargs']
+ search_kwargs = {k: v for k, v in kwargs.items() if k in search_params}
+ search_kwargs['query'] = query
+
+ # assume all others kwargs are for the client
+ client_kwargs = {k: v for k, v in kwargs.items() if k not in search_params}
+ client_kwargs['url'] = url
+
+ c = client.Client(**client_kwargs)
+ return c.searchretrieve(**search_kwargs)
def explain(url):
diff --git a/sruthi/xmlparse.py b/sruthi/xmlparse.py
index b5819dd..988ceef 100644
--- a/sruthi/xmlparse.py
+++ b/sruthi/xmlparse.py
@@ -1,5 +1,7 @@
import re
+from xml.etree.ElementTree import Element
import defusedxml.ElementTree as etree
+import xmltodict
from . import errors
@@ -25,6 +27,20 @@ def __init__(self):
'ap': 'http://www.archivportal.ch/srw/extension/',
'zr': 'http://explain.z3950.org/dtd/2.1/',
}
+ self.dict_namespaces = {
+ 'http://www.loc.gov/zing/srw/': 'sru',
+ 'http://explain.z3950.org/dtd/2.1/': 'zr',
+ 'info:srw/extension/2/relevancy-1.0': None,
+ 'http://www.archivportal.ch/srw/extension/': None,
+ 'http://www.loc.gov/MARC21/slim': None,
+ 'http://www.loc.gov/mods/v3': None,
+ 'http://www.loc.gov/standards/mods/v3/mods-3-6.xsd': None,
+ 'http://www.loc.gov/standards/mods/v3/mods-3-6.xsd': None,
+ 'http://purl.org/dc/elements/1.1/': None,
+ 'http://www.expertisecentrumdavid.be/xmlschemas/isad.xsd': None,
+ 'http://www.w3.org/2001/XMLSchema-instance': None,
+ 'http://www.w3.org/XML/1998/namespace': None,
+ }
def parse(self, content):
try:
@@ -50,6 +66,22 @@ def findall(self, xml, path):
def tostring(self, xml):
return etree.tostring(xml)
+ def todict(self, xml, **kwargs):
+ if isinstance(xml, XMLNone):
+ return None
+ if isinstance(xml, Element):
+ xml = self.tostring(xml)
+
+ dict_args = {
+ 'dict_constructor': dict,
+ 'process_namespaces': True,
+ 'namespaces': self.dict_namespaces,
+ 'attr_prefix': '',
+ 'cdata_key': 'text',
+ }
+ dict_args.update(kwargs)
+ return dict(xmltodict.parse(xml, **dict_args))
+
def namespace(self, element):
m = re.match(r'\{(.*)\}', element.tag)
return m.group(1) if m else ''
diff --git a/tests/client_test.py b/tests/client_test.py
index 6aa05ff..18b5d07 100644
--- a/tests/client_test.py
+++ b/tests/client_test.py
@@ -110,7 +110,20 @@ def test_explain(self):
self.assertEqual(config['my-test-config'], 'test123')
self.assertEqual(config['defaults']['numberOfRecords'], 99)
- def test_passing_params(self):
+ def test_explain_with_requests_kwargs(self):
+ client = Client('https://test.com/sru')
+ client.explain(requests_kwargs={'verify': False})
+
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'https://test.com/sru',
+ params={
+ 'operation': 'explain',
+ 'version': '1.2',
+ },
+ verify=False
+ )
+
+ def test_passing_maximum_records(self):
client = Client('http://my-param.com/sru', maximum_records=111)
self.assertEqual(client.maximum_records, 111)
@@ -118,10 +131,60 @@ def test_passing_params(self):
self.session_mock.return_value.get.assert_called_once_with(
'http://my-param.com/sru',
params={
- 'operation': 'searchretrieve',
+ 'operation': 'searchRetrieve',
'version': '1.2',
'query': 'test-query',
'startRecord': 1,
'maximumRecords': 111,
}
)
+
+ def test_passing_record_schema(self):
+ client = Client('http://my-param.com/sru', record_schema='dc')
+ self.assertEqual(client.record_schema, 'dc')
+
+ client.searchretrieve('test-query')
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://my-param.com/sru',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'test-query',
+ 'startRecord': 1,
+ 'recordSchema': 'dc',
+ 'maximumRecords': 10,
+ }
+ )
+
+ def test_passing_requests_kwargs(self):
+ client = Client('https://my-param.com/sru', record_schema='dc')
+ self.assertEqual(client.record_schema, 'dc')
+
+ client.searchretrieve('test-query', requests_kwargs={'verify': False})
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'https://my-param.com/sru',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'test-query',
+ 'startRecord': 1,
+ 'recordSchema': 'dc',
+ 'maximumRecords': 10,
+ },
+ verify=False
+ )
+
+ def test_passing_start_record(self):
+ client = Client('http://my-param.com/sru')
+
+ client.searchretrieve('test-query', start_record=10)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://my-param.com/sru',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'test-query',
+ 'startRecord': 10,
+ 'maximumRecords': 10,
+ }
+ )
diff --git a/tests/fixtures/test_explain_with_requests_kwargs.xml b/tests/fixtures/test_explain_with_requests_kwargs.xml
new file mode 100644
index 0000000..ab7ceb9
--- /dev/null
+++ b/tests/fixtures/test_explain_with_requests_kwargs.xml
@@ -0,0 +1,61 @@
+
+
+ 1.2
+
+ XML
+ http://explain.z3950.org/dtd/2.1/
+
+
+
+
+ https://test.com/sru
+ 80
+ sru
+
+
+ Testarchiv Online Search
+ Durchsuchen der Bestände des Testarchivs.
+ test@test.com
+
+
+
+
+ Title
+
+ title
+
+
+
+ Reference Code
+
+ reference
+
+
+
+ Date
+
+ date
+
+
+
+ Level
+
+ descriptionlevel
+
+
+
+
+
+ ISAD(G)
+
+
+
+ 99
+ 99
+ test123
+
+
+
+
+
+
diff --git a/tests/fixtures/test_passing_params.xml b/tests/fixtures/test_passing_maximum_records.xml
similarity index 100%
rename from tests/fixtures/test_passing_params.xml
rename to tests/fixtures/test_passing_maximum_records.xml
diff --git a/tests/fixtures/test_passing_record_schema.xml b/tests/fixtures/test_passing_record_schema.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_passing_record_schema.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_passing_requests_kwargs.xml b/tests/fixtures/test_passing_requests_kwargs.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_passing_requests_kwargs.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_passing_start_record.xml b/tests/fixtures/test_passing_start_record.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_passing_start_record.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_searchretrieve_with_maximum_records.xml b/tests/fixtures/test_searchretrieve_with_maximum_records.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_searchretrieve_with_maximum_records.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_searchretrieve_with_record_schema.xml b/tests/fixtures/test_searchretrieve_with_record_schema.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_searchretrieve_with_record_schema.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_searchretrieve_with_requests_kwargs.xml b/tests/fixtures/test_searchretrieve_with_requests_kwargs.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_searchretrieve_with_requests_kwargs.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/fixtures/test_searchretrieve_with_start_record.xml b/tests/fixtures/test_searchretrieve_with_start_record.xml
new file mode 100644
index 0000000..e7c2509
--- /dev/null
+++ b/tests/fixtures/test_searchretrieve_with_start_record.xml
@@ -0,0 +1,343 @@
+
+
+ 1.2
+ 12
+
+
+ isad
+ xml
+
+
+
+ VII.335.:2.34.8.
+ Podium "Frauen und Politik" beim Jubiläumsanlass "Frauenrechte-Menschenrechte" des Bundes Schweizerischer Frauenorganisationen BSF zu 150 Jahre Bundesstaat, 50 Jahre UNO-Menschenrechtserklärung und 27 Jahre politische Gleichberechtigung im Nationalratssaal in Bern vom 4. April 1998
+ 1998
+ Dossier
+
+
+
+
+
+
+
+ 1
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=410130
+ 1998-01-01
+ 0
+ 1998-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.:3.2.4.8.
+ Menschenrechte, Matinee der Schauspielunion, 18.04. (vor) 1964
+ s. d. (sine dato)
+ Dossier
+
+
+
+
+
+
+
+ 2
+
+ 0.38
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=495785
+ 0001-01-01
+ 0
+ 9999-12-31
+ 0
+ 0
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.63.
+ Stadtpolizei, Kriminalkommissariat KK III. Staatsschutzakten Registratur 1 und 2
+ 1920 - 1990
+ Bestand
+
+
+
+
+
+
+
+ 3
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=9514
+ 1920-01-01
+ 0
+ 1990-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.E.c.73.
+ Stadtpolizei, Bewilligungen. Akten
+ 1906 - 2014
+ Bestand
+
+
+
+
+
+
+
+ 4
+
+ 0.26
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=207460
+ 1906-01-01
+ 0
+ 2014-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.64.
+ Präsidialabteilung. Akten
+ 1955 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 5
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8336
+ 1955-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.B.c.900.:3.2.
+ Stadthaus. Drucksachen
+ 1951 - 2019
+ Bestand
+
+
+
+
+
+
+
+ 6
+
+ 0.17
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=8362
+ 1951-01-01
+ 0
+ 2019-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.12.
+ Aktientheater, Stadttheater, Opernhaus Zürich AG. Theaterarchiv
+ 1830 - 1995
+ Bestand
+
+
+
+
+
+
+
+ 7
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11494
+ 1830-01-01
+ 0
+ 1995-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.335.
+ Emilie Lieberherr (1924-2011), Stadträtin. Nachlass
+ approx. 1900 - 2004
+ Bestand
+
+
+
+
+
+
+
+ 8
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11736
+ 1900-01-01
+ 1
+ 2004-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.424.
+ Dr. Peter Löffler (1926-2015), Dramaturg, Regisseur, künstlerischer Direktor am Schauspielhaus Zürich (1969/70). Nachlass
+ 1867 - 2012
+ Bestand
+
+
+
+
+
+
+
+ 9
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11835
+ 1867-01-01
+ 0
+ 2012-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.42.
+ Ausstellungen. Dokumentation
+ from 1846
+ Bestand
+
+
+
+
+
+
+
+ 10
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11389
+ 1846-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ V.L.105.
+ Kongresse und Tagungen. Dokumentation
+ from 1899
+ Bestand
+
+
+
+
+
+
+
+ 11
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11243
+ 1899-01-01
+ 0
+ 9999-12-31
+ 0
+ 1
+
+
+
+ isad
+ xml
+
+
+
+ VII.103.
+ Alexander M. Kaiser (1887-1971) alias A. M. Cay, Karikaturist. Nachlass
+ 1945 - 1967
+ Bestand
+
+
+
+
+
+
+
+ 12
+
+ 0.09
+ https://amsquery.stadt-zuerich.ch/detail.aspx?Id=11476
+ 1945-01-01
+ 0
+ 1967-12-31
+ 0
+ 1
+
+
+
+
diff --git a/tests/sru_test.py b/tests/sru_test.py
index fe20e01..44e9ca1 100644
--- a/tests/sru_test.py
+++ b/tests/sru_test.py
@@ -6,10 +6,89 @@ class TestSru(SruthiTestCase):
def test_searchretrieve(self):
r = sruthi.searchretrieve('http://test.com/sru/', 'Test-Query')
self.assertIsInstance(r, sruthi.response.SearchRetrieveResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'Test-Query',
+ 'startRecord': 1,
+ 'maximumRecords': 10,
+ }
+ )
+
+ def test_searchretrieve_with_maximum_records(self):
+ r = sruthi.searchretrieve('http://test.com/sru/', 'Test-Query', maximum_records=100)
+ self.assertIsInstance(r, sruthi.response.SearchRetrieveResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'Test-Query',
+ 'startRecord': 1,
+ 'maximumRecords': 100,
+ }
+ )
+
+ def test_searchretrieve_with_record_schema(self):
+ r = sruthi.searchretrieve('http://test.com/sru/', 'Test-Query', record_schema='isad')
+ self.assertIsInstance(r, sruthi.response.SearchRetrieveResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'Test-Query',
+ 'startRecord': 1,
+ 'maximumRecords': 10,
+ 'recordSchema': 'isad',
+ }
+ )
+
+ def test_searchretrieve_with_start_record(self):
+ r = sruthi.searchretrieve('http://test.com/sru/', 'Test-Query', start_record=10)
+ self.assertIsInstance(r, sruthi.response.SearchRetrieveResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'Test-Query',
+ 'startRecord': 10,
+ 'maximumRecords': 10,
+ }
+ )
+
+ def test_searchretrieve_with_requests_kwargs(self):
+ r = sruthi.searchretrieve(
+ 'http://test.com/sru/',
+ 'Test-Query',
+ requests_kwargs={'verify': False}
+ )
+ self.assertIsInstance(r, sruthi.response.SearchRetrieveResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'searchRetrieve',
+ 'version': '1.2',
+ 'query': 'Test-Query',
+ 'startRecord': 1,
+ 'maximumRecords': 10,
+ },
+ verify=False
+ )
def test_explain(self):
info = sruthi.explain('http://test.com/sru/')
self.assertIsInstance(info, sruthi.response.ExplainResponse)
+ self.session_mock.return_value.get.assert_called_once_with(
+ 'http://test.com/sru/',
+ params={
+ 'operation': 'explain',
+ 'version': '1.2',
+ }
+ )
def test_client(self):
client = sruthi.Client('http://test.com/sru')