for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
from __future__ import annotations
from abc import ABC, abstractmethod
from typing import Any, Optional
class Handler(ABC):
"""
The Handler interface declares a method for building the chain of handlers.
It also declares a method for executing a request.
@abstractmethod
def set_next(self, handler: Handler) -> Handler:
pass
def handle(self, request) -> Optional[str]:
class AbstractHandler(Handler):
The default chaining behavior can be implemented inside a base handler
class.
_next_handler: Optional[Handler] = None
self._next_handler = handler
# Returning a handler from here will let us link handlers in a
# convenient way like this:
# monkey.set_next(squirrel).set_next(dog)
return handler
def handle(self, request: Any) -> Optional[str]:
if self._next_handler:
return self._next_handler.handle(request)
return None