ragnard opened a new pull request, #2866:
URL: https://github.com/apache/iceberg-python/pull/2866

   Previously the pydantic @model_validator would fail because it assumed 
statistics was a model instance. In a "before"" validator that is not the case.
   
   Use an "after" validator instead, where we can use instantiated and 
validated fields.
   
   ### Before
   
   ```
   >>> import pyiceberg.table.update
   >>> pyiceberg.table.update.SetStatisticsUpdate.model_validate({'statistics': 
{'snapshot-id': 1234, 'file-size-in-bytes': 0, 'statistics-path': '', 
'file-footer-size-in-bytes': 0, 'blob-metadata': []}})
   Traceback (most recent call last):
     File "<python-input-1>", line 1, in <module>
       pyiceberg.table.update.SetStatisticsUpdate.model_validate({'statistics': 
{'snapshot-id': 1234, 'file-size-in-bytes': 0, 'statistics-path': '', 
'file-footer-size-in-bytes': 0, 'blob-metadata': []}})
       
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     File 
"/home/ragge/projects/github.com/ragnard/iceberg-python/.venv/lib/python3.14/site-packages/pydantic/main.py",
 line 716, in model_validate
       return cls.__pydantic_validator__.validate_python(
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
           obj,
           ^^^^
       ...<5 lines>...
           by_name=by_name,
           ^^^^^^^^^^^^^^^^
       )
       ^
     File 
"/home/ragge/projects/github.com/ragnard/iceberg-python/pyiceberg/table/update/__init__.py",
 line 191, in validate_snapshot_id
       data["snapshot_id"] = stats.snapshot_id
                             ^^^^^^^^^^^^^^^^^
   AttributeError: 'dict' object has no attribute 'snapshot_id'
    ```
   
   ### After
   
   ```
   >>> import pyiceberg.table.update
   >>> pyiceberg.table.update.SetStatisticsUpdate.model_validate({'statistics': 
{'snapshot-id': 1234, 'file-size-in-bytes': 0, 'statistics-path': '', 
'file-footer-size-in-bytes': 0, 'blob-metadata': []}})
   SetStatisticsUpdate(action='set-statistics', 
statistics=StatisticsFile(snapshot_id=1234, statistics_path='', 
file_size_in_bytes=0, file_footer_size_in_bytes=0, key_metadata=None, 
blob_metadata=[]), snapshot_id=1234)
   ``` 
   
   
   # Rationale for this change
   
   ## Are these changes tested?
   
   Yes, but only using the two-liners above.
   
   ## Are there any user-facing changes?
   
   No.
   
   <!-- In the case of user-facing changes, please add the changelog label. -->
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to