1# Copyright 2024 Google LLC 
    2# 
    3# Licensed under the Apache License, Version 2.0 (the "License"); 
    4# you may not use this file except in compliance with the License. 
    5# You may obtain a copy of the License at 
    6# 
    7#     http://www.apache.org/licenses/LICENSE-2.0 
    8# 
    9# Unless required by applicable law or agreed to in writing, software 
    10# distributed under the License is distributed on an "AS IS" BASIS, 
    11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    12# See the License for the specific language governing permissions and 
    13# limitations under the License. 
    14 
    15"""Exceptions raised by the library.""" 
    16 
    17# These exceptions were originally part of the google-resumable-media library 
    18# but were integrated into python-storage in version 3.0. For backwards 
    19# compatibility with applications which use except blocks with 
    20# google-resumable-media exceptions, if the library google-resumable-media is 
    21# installed, make all exceptions subclasses of the exceptions from that library. 
    22# Note that either way, the classes will subclass Exception, either directly or 
    23# indirectly. 
    24# 
    25# This backwards compatibility feature may be removed in a future major version 
    26# update. Please update application code to use the new exception classes in 
    27# this module. 
    28try: 
    29    from google.resumable_media import InvalidResponse as InvalidResponseDynamicParent 
    30    from google.resumable_media import DataCorruption as DataCorruptionDynamicParent 
    31except ImportError: 
    32    InvalidResponseDynamicParent = Exception 
    33    DataCorruptionDynamicParent = Exception 
    34 
    35 
    36class InvalidResponse(InvalidResponseDynamicParent): 
    37    """Error class for responses which are not in the correct state. 
    38 
    39    Args: 
    40        response (object): The HTTP response which caused the failure. 
    41        args (tuple): The positional arguments typically passed to an 
    42            exception class. 
    43    """ 
    44 
    45    def __init__(self, response, *args): 
    46        if InvalidResponseDynamicParent is Exception: 
    47            super().__init__(*args) 
    48            self.response = response 
    49            """object: The HTTP response object that caused the failure.""" 
    50        else: 
    51            super().__init__(response, *args) 
    52 
    53 
    54class DataCorruption(DataCorruptionDynamicParent): 
    55    """Error class for corrupt media transfers. 
    56 
    57    Args: 
    58        response (object): The HTTP response which caused the failure. 
    59        args (tuple): The positional arguments typically passed to an 
    60            exception class. 
    61    """ 
    62 
    63    def __init__(self, response, *args): 
    64        if DataCorruptionDynamicParent is Exception: 
    65            super().__init__(*args) 
    66            self.response = response 
    67            """object: The HTTP response object that caused the failure.""" 
    68        else: 
    69            super().__init__(response, *args)