From 56a80f02dfa9f3673957ea4036b8cf55d1c9209b Mon Sep 17 00:00:00 2001 From: Andy Babic Date: Wed, 24 Apr 2024 21:57:13 +0100 Subject: [PATCH] Fix: TypeError when using new 'refresh' commands (#23) --- src/wagtail_bynder/models.py | 39 +++++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/wagtail_bynder/models.py b/src/wagtail_bynder/models.py index 3d36ed2..57db84b 100644 --- a/src/wagtail_bynder/models.py +++ b/src/wagtail_bynder/models.py @@ -95,10 +95,15 @@ def is_up_to_date(self, asset_data: dict[str, Any]) -> bool: def update_from_asset_data( self, asset_data: dict[str, Any], + **kwargs, ) -> None: """ Update this object (without saving) to reflect values in `asset_data`, which is a representation of the related asset from the Bynder API. + + NOTE: Although this base implementation does nothing with them currently, + for compatibility reasons, ``**kwargs`` should always be accepted by all + implementations of this method. """ self.title = asset_data.get("name", self.title) self.copyright = asset_data.get("copyright", self.copyright) @@ -126,9 +131,17 @@ class Meta: def extract_file_source(asset_data: dict[str, Any]) -> str: raise NotImplementedError - def update_from_asset_data(self, asset_data: dict[str, Any]) -> None: - super().update_from_asset_data(asset_data) - if not self.file or self.asset_file_has_changed(asset_data): + def update_from_asset_data( + self, asset_data: dict[str, Any], *, force_download: bool = False, **kwargs + ) -> None: + """ + Overrides ``BynderAssetMixin.update_from_asset_data()`` to explicitly + handle the ``force_download`` option that can be provided by management + commands, and to initiate downloading of the source file when it has + changed in some way. + """ + super().update_from_asset_data(asset_data, **kwargs) + if force_download or not self.file or self.asset_file_has_changed(asset_data): self.update_file(asset_data) def asset_file_has_changed(self, asset_data: dict[str, Any]) -> bool: @@ -177,11 +190,17 @@ def save(self, *args, **kwargs): super().save(*args, **kwargs) def update_from_asset_data( - self, - asset_data: dict[str, Any], + self, asset_data: dict[str, Any], *, force_download: bool = False, **kwargs ) -> None: + """ + Overrides ``BynderAssetWithFileMixin.update_from_asset_data()`` to + handle conversion of focal points to focal areas. + """ + # Update the file and other field values without saving the changes - super().update_from_asset_data(asset_data) + super().update_from_asset_data( + asset_data, force_download=force_download, **kwargs + ) # Update the focal area if a focus point is set focus_point = asset_data.get("activeOriginalFocusPoint") @@ -374,7 +393,13 @@ def fallback_source_mimetype(self) -> str: def update_from_asset_data( self, asset_data: dict[str, Any], + **kwargs, ) -> None: + """ + Overrides ``BynderAssetMixin.update_from_asset_data()`` to handle + setting of video-specific field values. + """ + primary_derivative_name = getattr( settings, "BYNDER_VIDEO_PRIMARY_DERIVATIVE_NAME", "WebPrimary" ) @@ -417,4 +442,4 @@ def update_from_asset_data( self.original_width = int(asset_data["width"]) self.original_height = int(asset_data["height"]) - super().update_from_asset_data(asset_data) + super().update_from_asset_data(asset_data, **kwargs)