Source code for pspman.errors

#!/usr/bin/env python3
# -*- coding:utf-8; mode:python -*-
#
# Copyright 2020 Pradyumna Paranjape
# This file is part of pspman.
#
# pspman is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# pspman is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with pspman.  If not, see <https://www.gnu.org/licenses/>.
#
'''
Exceptions, Warnings, Errors
'''


import os
import typing


[docs]class PSPManError(Exception): ''' base error for papman '''
[docs]class ClosedQueueError(PSPManError): ''' Operation can't be performed, since the queue has been closed Args: queue: PSPQueue: the queue that threw the error ''' def __init__(self, queue): super().__init__(self, f'{type(queue)} Queue is closed')
[docs]class PathNameError(PSPManError): ''' Path/URL (and hence or otherwise, name) can't be determined ''' def __init__(self, *args): super().__init__(self, 'Path and/name not found/inferred', *args)
[docs]class GitURLError(PathNameError): ''' Git URL (and hence or otherwise, name) can't be determined ''' def __init__(self): super().__init__(self, 'GIT URL and/name not found/inferred')
[docs]class CommandError(PSPManError): ''' Base class for subprocess failure Args: cmd: command passed to shell for execution err: stderr received from shell after failure ''' def __init__(self, cmd: list, err: str = None) -> None: super().__init__(self, f''' Command Passed for execution: {cmd} STDERR from command: {err} ''')
[docs]class InstructError(PSPManError): ''' Base class for instruction files error '''
[docs]class InstructFmtError(InstructError): ''' Error parsing installation instructions file Args: instruct_file: name of file with fault ''' def __init__(self, instruct_file: typing.Union[str, os.PathLike]) -> None: super().__init__(self, f'{instruct_file} is incorrectly formatted')
[docs]class MissingInstructError(InstructError): ''' Error in installation instructions file: necessary instruction missing Args: missing: name of argument missing ''' def __init__(self, missing: str) -> None: super().__init__(self, f'missing instruction: {missing}')
[docs]class InstructTypeError(TypeError, InstructError): ''' Wrong type of instruction Args: key: variable with bad type found_type: type of supplied variable want_type: type expected ''' def __init__(self, key: str, found_type: type, want_type: str): super().__init__( self, f'{key}: is of type: {found_type}; expected: {want_type}' )