Issues a warning for a deprecated asset if one hasn't already been issued. Args: asset: The asset.
(asset: DeprecatedAsset)
| 181 | |
| 182 | |
| 183 | def _IssueAssetDeprecationWarning(asset: DeprecatedAsset) -> None: |
| 184 | """Issues a warning for a deprecated asset if one hasn't already been issued. |
| 185 | |
| 186 | Args: |
| 187 | asset: The asset. |
| 188 | """ |
| 189 | if asset.has_warning_been_issued: |
| 190 | return |
| 191 | asset.has_warning_been_issued = True |
| 192 | |
| 193 | warning = ( |
| 194 | f'\n\nAttention required for {asset.id}! You are using a deprecated' |
| 195 | ' asset.\nTo make sure your code keeps working, please update it' |
| 196 | ) |
| 197 | removal_date = asset.removal_date |
| 198 | today = datetime.datetime.now() |
| 199 | if removal_date: |
| 200 | # If today is the removal date or prior, show the removal date, ignoring |
| 201 | # time zones. |
| 202 | if today.date() <= removal_date.date(): |
| 203 | # %d gives a zero-padded day. Remove the leading zero. %-d is incompatible |
| 204 | # with Windows. |
| 205 | formatted_date = removal_date.strftime('%B %d, %Y').replace(' 0', ' ') |
| 206 | warning += f' by {formatted_date}' |
| 207 | warning += '.' |
| 208 | if asset.replacement_id: |
| 209 | warning = ( |
| 210 | warning |
| 211 | + f'\nThis dataset has been superseded by {asset.replacement_id}\n' |
| 212 | ) |
| 213 | if asset.learn_more_url: |
| 214 | warning = warning + f'\nLearn more: {asset.learn_more_url}\n' |
| 215 | warnings.warn(warning, category=DeprecationWarning) |