Add pymarc compat methods, fix __version__ and Record str/repr
- Add Record.get(tag, default) for pymarc-compatible dict-like access
- Add Field.is_control_field() and ControlField.is_control_field()
- Add Record.__str__ and __repr__ delegating to Rust inner
- Fix __version__: derive from Cargo.toml via env!("CARGO_PKG_VERSION")
instead of hardcoded "0.1.0"
- Update migration guide with new pymarc-compatible methods
Addresses: bd-264q, bd-r8xn, bd-3kee, bd-1uo8
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix serialization functions to accept both wrapped and unwrapped Records
record_to_json, record_to_xml, record_to_marcjson, record_to_mods,
record_to_dublin_core, and record_to_dublin_core_xml all accepted only
the raw PyRecord type, but Python wrapper functions like xml_to_record()
return wrapped Record objects. Extract a shared helper that tries both
the direct PyRecord and the _inner attribute fallback, matching the
pattern already used by record_to_csv.
Fixes: https://github.com/dchud/mrrc/issues/57
Bead: bd-b7mg
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix check.sh --quick to skip Python tests that need maturin build
--quick previously skipped the maturin build but still ran Python tests,
meaning tests ran against a stale extension after Rust changes. Now
--quick runs: rustfmt, clippy, ruff, Rust tests, and doc tests (~10s).
Full mode adds: doc check, audit, maturin build, Python tests (~16s).
Closes bd-3peu
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>