diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index 6f7d9426e..01ec98dfd 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -605,15 +605,13 @@ class Command(CryptMixin, BaseCommand): """Encrypt sensitive fields in a single record, if passphrase is set.""" if not self.passphrase: return - model = record.get("model", "") - for cfg in self.CRYPT_FIELDS: - if model == cfg["model_name"]: - for field in cfg["fields"]: - if record["fields"].get(field): - record["fields"][field] = self.encrypt_string( - value=record["fields"][field], - ) - break + fields = self.CRYPT_FIELDS_BY_MODEL.get(record.get("model", "")) + if fields: + for field in fields: + if record["fields"].get(field): + record["fields"][field] = self.encrypt_string( + value=record["fields"][field], + ) def _write_split_manifest( self, diff --git a/src/documents/management/commands/mixins.py b/src/documents/management/commands/mixins.py index 785dca82a..b03e05956 100644 --- a/src/documents/management/commands/mixins.py +++ b/src/documents/management/commands/mixins.py @@ -89,6 +89,10 @@ class CryptMixin: ], }, ] + # O(1) lookup for per-record encryption; derived from CRYPT_FIELDS at class definition time + CRYPT_FIELDS_BY_MODEL: dict[str, list[str]] = { + cfg["model_name"]: cfg["fields"] for cfg in CRYPT_FIELDS + } def get_crypt_params(self) -> dict[str, dict[str, str | int]]: return {