biotite-dev / biotite

A comprehensive library for computational molecular biology
https://www.biotite-python.org
BSD 3-Clause "New" or "Revised" License
685 stars 102 forks source link

Avoid deserialization of PDBx data in `__contains__()` #679

Closed padix-key closed 1 month ago

padix-key commented 1 month ago

Currently the CIF and BinaryCIF container classes use the default mixin implementation of __contains__(). However, this default implementation uses

try:
    self[key]:
except KeyError:
    return False
return True

Hence, calling __contains__() actually gets the value, e.g. checking if a category name is in a CIF/BCIF block would automatically deserialize the category data. This counteracts the lazy deserialization behavior.

This PR explicitly implements __contains__() for all the mentioned container classes, checking only if a key is present and thus avoid the automatic deserialization.