You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PDBParser(PDBcode=...) legacy parameter silently swallowed by **kwargs; restored via explicit mapping to source_id/source_db='rcsb'
Eight bare except: clauses narrowed to specific exception types throughout
Bitwise &= used as logical AND in BaseRecord.empty() replaced with all()
str2int_sig raised IndexError on empty-string input; added guard before index access
!= None / == None comparisons replaced with is not None / is None throughout
type(x) == T identity comparisons replaced with isinstance(x, T) throughout
elif type(p) == list: in parse_tokens() was unreachable; corrected to isinstance(p, PDBRecordList)
Mutable default arguments hold={} and hold=[] in gather_token and header_check replaced with None
Changed
Global hex-tripped flag in hex.py replaced with AtomSerialParser callable class; each PDBParser instance owns its own state, eliminating thread-safety hazard and cross-parse contamination
mappers default argument changed from a mutable dict literal to None; default built inside __init__
Resource YAML files now loaded via importlib.resources.files() instead of os.path.dirname(resources.__file__), ensuring correct behavior inside wheels and zip archives
resources/__init__.py removed; resources/ is now a plain data directory, not a sub-package
MANIFEST.in removed; hatchling auto-discovers package data from git-tracked files
PEP 8 spacing applied throughout all source files
parse_embedded() refactored: triggered/capturing boolean pair replaced with explicit _EmbedState enum (SEARCHING, PRE_CAPTURE, CAPTURING); setup phase extracted into _setup_embed_context()
Added
CHANGELOG.md with full release history
scripts/release.sh for automated version rotation, tagging, and push
[test] optional dependency group in pyproject.toml