Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fehler beim Harvesten der OAI Schnittstelle der BSB (MARC) #2

Open
tschleier opened this issue Feb 23, 2024 · 7 comments
Open

Fehler beim Harvesten der OAI Schnittstelle der BSB (MARC) #2

tschleier opened this issue Feb 23, 2024 · 7 comments
Assignees

Comments

@tschleier
Copy link

Das Harvesten der OAI-Schnittstelle der Bayerische Staatsbibliothek (BSB) für MARC-Daten scheitert mit neueren Versionen von Ometha. Mit anderen OAI-Schnittstellen treten die u. g. Fehler nicht auf.
Mit z. B. Ometha 1.8.2 (Windows, exe) funktoniert das Harvesten der BSB-OAI-Schnittstelle.

Alle Beispielaufrufe verwenden die folgende Konfiguration:

BSB_m21.yaml

name: BSB_m21
baseurl: http://bdr.oai.bsb-muenchen.de/OAIHandler
metadataPrefix: MarcXchange
datengeber: BSB
set:
   - all
fromdate: null
untildate: null
timeout: 4
outputfolder: BSB_m21
debug: false
lazy: false
numberofprocesses: 2

Der Aufruf ist jeweils
ometha conf -c BSB_m21.yaml

Ubuntu über SSH (Ometha 1.9.5) schläg fehl:

connectionpool.py 836 urlopen
retries = retries.increment(method, url, response=response, _pool=self)

retry.py 574 increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))

urllib3.exceptions.MaxRetryError:
HTTPConnectionPool(host='bdr.oai.bsb-muenchen.de', port=80): Max retries exceeded with url: /OAIHandler (Caused by ResponseError('too many 500 error responses'))

--------------------------------------------------------------------------------------------------------------------------
ometha 8 <module>
sys.exit(main())

__init__.py 252 main
session.get(baseurl, verify=False, timeout=(20, 80))

sessions.py 542 get
return self.request('GET', url, **kwargs)

sessions.py 529 request
resp = self.send(prep, **send_kwargs)

sessions.py 645 send
r = adapter.send(request, **kwargs)

adapters.py 510 send
raise RetryError(e, request=request)

requests.exceptions.RetryError:
HTTPConnectionPool(host='bdr.oai.bsb-muenchen.de', port=80): Max retries exceeded with url: /OAIHandler (Caused by ResponseError('too many 500 error responses'))

Ein entsprechender Aufruf mit Curl funktioniert und liefert die ersten Identifier:

curl -G -d "verb=ListIdentifiers" -d "metadataPrefix=MarcXchange" -d "set=all" http://bdr.oai.bsb-muenchen.de/OAIHandler

Der Aufruf mit Ometha 1.9.6 (exe) unter Windows schlägt ebenfalls fehl:

Traceback (most recent call last):
  File "requests\adapters.py", line 489, in send
  File "urllib3\connectionpool.py", line 878, in urlopen
  File "urllib3\connectionpool.py", line 878, in urlopen
  File "urllib3\connectionpool.py", line 878, in urlopen
  [Previous line repeated 1 more time]
  File "urllib3\connectionpool.py", line 868, in urlopen
  File "urllib3\util\retry.py", line 592, in increment
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='bdr.oai.bsb-muenchen.de', port=80): Max retries exceeded with url: /OAIHandler (Caused by ResponseError('too many 500 error responses'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "run.py", line 3, in <module>
  File "ometha\__init__.py", line 252, in main
  File "requests\sessions.py", line 600, in get
  File "requests\sessions.py", line 587, in request
  File "requests\sessions.py", line 701, in send
  File "requests\adapters.py", line 556, in send
requests.exceptions.RetryError: HTTPConnectionPool(host='bdr.oai.bsb-muenchen.de', port=80): Max retries exceeded with url: /OAIHandler (Caused by ResponseError('too many 500 error responses'))
[8092] Failed to execute script 'run' due to unhandled exception!
@karkraeg karkraeg self-assigned this Feb 23, 2024
@karkraeg
Copy link
Member

In der ursprünglichen Implementierung testet Ometha nur ob die URL erreichbar ist:

# baseurl Parameter löschen, falls fälschlicherweise übergeben
baseurl = re.sub(r"(\?.+)", "", re.sub(r"\/$", "", baseurl))
# baseurl überprüfen
try:
session.get(baseurl, verify=False, timeout=(20, 80))

http://bdr.oai.bsb-muenchen.de/OAIHandler ohne Verb gibt allerdings einen 500er zurück. In einer neuen Version wird zunächst die Baseurl überprüft und wenn das nicht geht wird mit verb=Identify gecheckt. Erst wenn beide URLs nicht erreichbar sind bricht Ometha ab: https://github.com/Deutsche-Digitale-Bibliothek/ddblabs-ometha/blob/develop/ometha/main.py#L155-L181

@karkraeg
Copy link
Member

@tschleier könntest du einmal den aktuellen Stand der develop branch testen? Wenn das klappt kann ich dann ein Windows release erstellen.

@karkraeg
Copy link
Member

Noch eine Kleinigkeit:

Das YAML muss als Key sets statt set haben:

name: BSB_m21
baseurl: http://bdr.oai.bsb-muenchen.de/OAIHandler
metadataPrefix: MarcXchange
datengeber: BSB
sets:
   - all
fromdate: null
untildate: null
timeout: 4
outputfolder: BSB_m21
debug: false
lazy: false
numberofprocesses: 2

@tschleier
Copy link
Author

Ich habe versucht, die neue Version unter Windows zu testen, dabei rennt Ometha aber in einen Fehler beim Erstellen des Outputverzeichnisses:

Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "C:\Users\schleier\AppData\Local\Programs\Python\Python312\Scripts\ometha.exe\__main__.py", line 7, in <module>
  File "C:\Users\schleier\AppData\Local\Programs\Python\Python312\Lib\site-packages\ometha\main.py", line 122, in start_process
    os.makedirs(folder, exist_ok=True)
  File "<frozen os>", line 225, in makedirs
OSError: [WinError 123] Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch: 'BSB_m21\\BSB\\2024-02-29T08:15:18Z'

Das YAML muss als Key sets statt set haben:

Das hab ich aus der README.md übernommen. 😉

@karkraeg
Copy link
Member

Scheinbar kann man unter Windows keine : in Ordnernamen nutzen, ich habe den dafür genutzten Timestring angepasst: 2b2258d

@tschleier
Copy link
Author

Jetzt funktioniert es.
Vor dem Harvesten der Identifier kommt noch ein Hinweis auf die (verb-lose) Nichterreichbarkeit der Schnittstelle:

Fehler:
http://bdr.oai.bsb-muenchen.de/OAIHandler is not accessible. Trying with verb=Identify.

@karkraeg
Copy link
Member

karkraeg commented Mar 1, 2024

Wenn es so durchläuft kann ich dann die Tage noch ein Windows Release machen denke ich. Hab aktuell nur keine Windows VM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants