fix: address code review feedback for custom fields

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-10 15:02:05 +00:00
parent 327244c43a
commit 6aeb466491
3 changed files with 12 additions and 11 deletions
+1 -1
View File
@@ -31,7 +31,7 @@ class Settings(BaseSettings):
# Making Paperless optional # Making Paperless optional
paperless_ngx_api_token: Optional[str] = None paperless_ngx_api_token: Optional[str] = None
paperless_host: Optional[str] = None paperless_host: Optional[str] = None
paperless_custom_field_absender: Optional[str] = None # Name or ID of the "absender" custom field in Paperless paperless_custom_field_absender: Optional[str] = None # Name of the "absender" custom field in Paperless
# JSON mapping of metadata field names to Paperless custom field names # JSON mapping of metadata field names to Paperless custom field names
# Example: {"absender": "Sender", "empfaenger": "Recipient", "language": "Language", "correspondent": "Correspondent"} # Example: {"absender": "Sender", "empfaenger": "Recipient", "language": "Language", "correspondent": "Correspondent"}
paperless_custom_fields_mapping: Optional[str] = None paperless_custom_fields_mapping: Optional[str] = None
+10 -9
View File
@@ -127,11 +127,13 @@ def set_document_custom_fields(doc_id: int, custom_fields: dict, task_id: str) -
# Build custom_fields array for PATCH request # Build custom_fields array for PATCH request
custom_fields_array = [] custom_fields_array = []
for field_name, value in custom_fields.items(): for field_name, value in custom_fields.items():
if value and value != UNKNOWN_VALUE: # Only set non-empty, non-Unknown values # Ensure value is a string for consistent comparison
str_value = str(value) if value is not None else ""
if str_value and str_value != UNKNOWN_VALUE: # Only set non-empty, non-Unknown values
try: try:
field_id = get_custom_field_id(field_name) field_id = get_custom_field_id(field_name)
custom_fields_array.append({"field": field_id, "value": value}) custom_fields_array.append({"field": field_id, "value": str_value})
logger.info(f"[{task_id}] Mapped custom field '{field_name}' to ID {field_id} with value '{value}'") logger.info(f"[{task_id}] Mapped custom field '{field_name}' to ID {field_id} with value '{str_value}'")
except ValueError as e: except ValueError as e:
logger.warning(f"[{task_id}] {str(e)}, skipping this field") logger.warning(f"[{task_id}] {str(e)}, skipping this field")
continue continue
@@ -251,18 +253,17 @@ def upload_to_paperless(self, file_path: str, file_id: int = None):
if settings.paperless_custom_fields_mapping: if settings.paperless_custom_fields_mapping:
try: try:
# Parse JSON mapping: {"metadata_field": "PaperlessFieldName", ...} # Parse JSON mapping: {"metadata_field": "PaperlessFieldName", ...}
import json
field_mapping = json.loads(settings.paperless_custom_fields_mapping) field_mapping = json.loads(settings.paperless_custom_fields_mapping)
logger.info(f"[{task_id}] Using custom fields mapping: {field_mapping}") logger.info(f"[{task_id}] Using custom fields mapping: {field_mapping}")
# Map each metadata field to its corresponding Paperless custom field # Map each metadata field to its corresponding Paperless custom field
for metadata_field, paperless_field in field_mapping.items(): for metadata_field, paperless_field in field_mapping.items():
if metadata_field in metadata and metadata[metadata_field]: if metadata_field in metadata and metadata[metadata_field]:
custom_fields_to_set[paperless_field] = metadata[metadata_field] # Convert to string to ensure consistent comparison with UNKNOWN_VALUE
logger.debug( value = str(metadata[metadata_field]) if metadata[metadata_field] is not None else ""
f"[{task_id}] Mapping {metadata_field}='{metadata[metadata_field]}' to field '{paperless_field}'" if value and value != UNKNOWN_VALUE:
) custom_fields_to_set[paperless_field] = value
logger.debug(f"[{task_id}] Mapping {metadata_field}='{value}' to field '{paperless_field}'")
except json.JSONDecodeError as e: except json.JSONDecodeError as e:
logger.error(f"[{task_id}] Failed to parse PAPERLESS_CUSTOM_FIELDS_MAPPING: {e}") logger.error(f"[{task_id}] Failed to parse PAPERLESS_CUSTOM_FIELDS_MAPPING: {e}")
except Exception as e: except Exception as e:
+1 -1
View File
@@ -169,7 +169,7 @@ PAPERLESS_CUSTOM_FIELDS_MAPPING='{"absender": "Sender", "empfaenger": "Recipient
**Available Metadata Fields**: **Available Metadata Fields**:
- `absender` - Sender/author - `absender` - Sender/author
- `empfaenger` - Recipient - `empfaenger` - Recipient
- `correspondent` - Issuing company (short name) - `correspondent` - Issuing company (short name)
- `language` - Document language (e.g., "de", "en") - `language` - Document language (e.g., "de", "en")
- `document_type` - Classification (Invoice, Contract, etc.) - `document_type` - Classification (Invoice, Contract, etc.)