from typing import Any, Optional from urllib.parse import urljoin import respx from owslib import services from owslib.enums import Environment class OwsClientMock: def __init__( self, environment: Environment = Environment.TEST, assert_all_called: bool = True, assert_all_mocked: bool = True, ) -> None: self.environment = environment self.mock = respx.MockRouter( assert_all_mocked=assert_all_called, assert_all_called=assert_all_mocked, ) def request( self, service_name: str, method: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: environment, service_url = services.discover_service_url( environment=self.environment, service_name=service_name, ) return self.mock.request( method=method, url=urljoin(service_url, path), name=name, **lookups ) def head( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request( service_name, method="HEAD", path=path, name=name, **lookups ) def get( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request(service_name, method="GET", path=path, name=name, **lookups) def post( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request( service_name, method="POST", path=path, name=name, **lookups ) def put( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request(service_name, method="PUT", path=path, name=name, **lookups) def patch( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request( service_name, method="PATCH", path=path, name=name, **lookups ) def delete( self, service_name: str, path: str, *, name: Optional[str] = None, **lookups: Any, ) -> respx.Route: return self.request( service_name, method="DELETE", path=path, name=name, **lookups )