Source code for osbng.errors

"""Custom exceptions for the ``osbng`` package.

These exceptions are intended to provide clear and specific error handling for
scenarios where invalid inputs or operations are encountered.

Custom exceptions:

- **BNGExtentError**: Raised when easting and northing coordinates fall outside of the
  BNG index system extent.
- **BNGHierarchyError**: Raised when an invalid parent or child derivation is attempted.
- **BNGNeighbourError**: Raised when an invalid neighbour relationship is encountered.
- **BNGReferenceError**: Raised when an invalid BNG reference string is provided.
- **BNGResolutionError**: Raised when an invalid BNG resolution is provided.
"""

from osbng.resolution import BNG_RESOLUTIONS


[docs] class BNGReferenceError(Exception): """Raised for invalid BNG reference strings.""" pass
[docs] class BNGResolutionError(Exception): """Raised for unsupported BNG resolutions.""" def __init__(self): """Initialise exception with a message listing supported resolutions.""" # Extract the numeric and string resolutions from BNG_RESOLUTIONS # Create message listing supported resolutions message = ( "Invalid BNG resolution provided. Supported resolutions are: \n" + f"Metres: {', '.join(map(str, BNG_RESOLUTIONS.keys()))}\n" + "Labels: " + f"{', '.join(value['label'] for value in BNG_RESOLUTIONS.values())}" ) # Pass message to base class super().__init__(message)
[docs] class BNGHierarchyError(Exception): """Raised for invalid parent/child derivation.""" pass
[docs] class BNGNeighbourError(Exception): """Raised for invalid neighbour relationships.""" pass
[docs] class BNGExtentError(Exception): """Raised for coordinates outside the BNG index system extent. BNG extent defined as 0 <= easting < 700000 and 0 <= northing < 1300000 """ def __init__(self): """Initialise exception with a message listing the valid coordinate ranges.""" # Create message listing the easting and northing coordinate ranges message = ( "Coordinates outside of the BNG extent. " "Easting and northing values must be within: \n" "0 <= easting < 700000\n" "0 <= northing < 1300000" ) # Pass message to base class super().__init__(message)
# Map exception strings to exception classes _EXCEPTION_MAP = { "BNGReferenceError": BNGReferenceError, "BNGResolutionError": BNGResolutionError, "BNGHierarchyError": BNGHierarchyError, "BNGNeighbourError": BNGNeighbourError, "BNGExtentError": BNGExtentError, }