Metadata-Version: 2.4
Name: vwmrc
Version: 1.0.1
Summary: MARC21-Datensätze aus MongoDB-Collections anzeigen
Project-URL: Homepage, https://github.com/thomsbe/vwmrc
Project-URL: Repository, https://github.com/thomsbe/vwmrc
Project-URL: Issues, https://github.com/thomsbe/vwmrc/issues
Author-email: Thomas Baer <thomas.baer@slub-dresden.de>
License: MIT
Keywords: bibliographic-data,cli,library,marc,marc21,mongodb,pymarc
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: German
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Information Analysis
Classifier: Topic :: Utilities
Requires-Python: >=3.10
Requires-Dist: click>=8.0
Requires-Dist: pymarc>=5.0
Requires-Dist: pymongo>=4.0
Description-Content-Type: text/markdown

# vwmrc – MARC21-Datensätze aus MongoDB anzeigen

`vwmrc` ist ein Kommandozeilenwerkzeug, das einen MARC21-Datensatz per PPN
aus einer MongoDB-Collection lädt und als lesbaren MARC-Text ausgibt.
Es erkennt automatisch, ob die Daten als binäres MARC, MARC-XML oder
Base64-kodiertes Binär-MARC vorliegen. Der Export als `.mrc` oder `.xml`
wird ebenfalls unterstützt.

Entwickelt an der [Sächsischen Landesbibliothek – Staats- und
Universitätsbibliothek Dresden (SLUB)](https://www.slub-dresden.de/).

> **Transparenzhinweis:** Dieses Tool wurde co-authored mit einem Large
> Language Model (LLM). Sämtlicher Code ist von einem menschlichen
> Entwickler geprüft, getestet und freigegeben.

## Voraussetzungen

- Python ≥ 3.10
- MongoDB-Instanz, erreichbar unter der in `MONGODB_URL` angegebenen Adresse
- Collections, deren Dokumente eine `_id` (die PPN) und ein Feld
  `full_record` oder `fullrecord` mit den MARC-Daten enthalten

## Installation

```bash
# Empfohlen: via uv
uv tool install vwmrc

# Alternativ: via pipx
pipx install vwmrc

# Oder klassisch via pip
pip install vwmrc
```

Nach der Installation steht der Befehl `vwmrc` global zur Verfügung.

## Verwendung

### Grundaufruf

```bash
vwmrc DATENBANK.COLLECTION:PPN
```

Das Ziel wird in drei Teile zerlegt:
- **DATENBANK** – alles vor dem **ersten** Punkt
- **COLLECTION** – alles zwischen dem ersten Punkt und dem **letzten** Doppelpunkt
- **PPN** – alles nach dem letzten Doppelpunkt

Diese Logik erlaubt PPNs, die selbst Doppelpunkte enthalten (z. B.
`1787:123456`).

### Beispiele

```bash
# MongoDB-Verbindung setzen
export MONGODB_URL="mongodb://benutzer:passwort@example.com:27017"

# Datensatz anzeigen
vwmrc ahn.kxpzentral_marc:010000313

# Datensatz als binäres MARC speichern (z. B. für MarcEdit & Co.)
vwmrc ahn.kxpzentral_marc:010000313 --ofile record.mrc

# Datensatz als MARC-XML speichern
vwmrc ahn.kxpzentral_marc:010000313 --ofile record.xml

# Auch ohne gesetzte Umgebungsvariable (Default: localhost:27017)
vwmrc ahn.kxpzentral_marc:010000313
```

### Ausgabe

Der Datensatz wird im klassischen MARC-Textformat ausgegeben – mit Tag,
Indikatoren (Leerzeichen als `#`), Unterfeldcodes und Inhalt:

```
LDR  03383cam a2200781 c 4500
001   010000313
003   DE-627
005   20251030061346.0
...
245 00 $aJoseph Beuys in Wien und am Friedrichshof ...
700 1# $aBeuys, Joseph $d1921-1986 $4oth
```

### Optionen

| Option | Beschreibung |
|---|---|
| `--ofile DATEI` | Speichert den Datensatz in eine Datei. Endung `.xml` → MARC-XML; alles andere → binäres MARC (ISO 2709). |

## Funktionsweise

1. **Verbinden** – Aufbau einer MongoDB-Verbindung über `MONGODB_URL`
2. **Suchen** – `find_one({"_id": ppn})`
3. **Extrahieren** – Sucht nach den Feldern `full_record` oder `fullrecord`
   (in dieser Reihenfolge). Ist der Wert eine Liste, wird das erste Element
   verwendet.
4. **Erkennen** – Das Datenformat wird automatisch bestimmt:
   - `bytes` → binäres MARC
   - String, der mit `<?xml` oder `<` beginnt → MARC-XML
   - String, der mit 5 Ziffern beginnt → binäres MARC (Latin-1 → Bytes)
   - Base64-ähnlicher String → dekodieren, dann binäres MARC
5. **Ausgeben** – Formatierung als lesbarer MARC-Text, oder Schreiben in
   eine Datei.

## Fehlercodes

| Code | Bedeutung |
|---|---|
| 1 | Ungültiges Zielformat (muss `db.coll:ppn` sein) |
| 2 | MongoDB-Abfrage fehlgeschlagen |
| 3 | Kein Datensatz mit dieser `_id` gefunden |
| 4 | Kein `full_record`- oder `fullrecord`-Feld im Dokument |
| 5 | MARC-Daten konnten nicht geparst werden |

## Abhängigkeiten

- [pymarc](https://pypi.org/project/pymarc/) ≥ 5.0 – MARC21-Parsing (Library of Congress)
- [pymongo](https://pypi.org/project/pymongo/) ≥ 4.0 – MongoDB-Client
- [click](https://pypi.org/project/click/) ≥ 8.0 – CLI-Framework

## Lizenz

MIT – siehe `pyproject.toml`.

---

## English Summary

`vwmrc` is a command-line tool that fetches a MARC21 record from a MongoDB
collection and displays it as human-readable MARC text. It auto-detects
the data format (binary MARC, MARC-XML, or Base64-encoded binary) and can
export records as `.mrc` or `.xml` files.

**Usage:** `vwmrc DATABASE.COLLECTION:PPN`

Authentication is handled entirely via the `MONGODB_URL` environment
variable. The tool looks for a document whose `_id` matches the given PPN
and extracts the MARC data from either `full_record` or `fullrecord`.

Developed at [Saxon State and University Library Dresden (SLUB)](https://www.slub-dresden.de/).

> **Transparency note:** This tool was co-authored with a Large Language
> Model. All code has been reviewed, tested, and approved by a human
> developer.
