From 1270274dc03b02fe0b69fcffec839c6b55f19cbe Mon Sep 17 00:00:00 2001 From: supersonicwisd1 <supersonicwisd1> Date: Tue, 5 Nov 2024 06:46:18 +0100 Subject: [PATCH] added utils dir Signed-off-by: supersonicwisd1 <supersonicwisd1> --- src/pyfed/utils/exceptions.py | 42 +++++++++++++++++++++++++++++++++++ src/pyfed/utils/logging.py | 36 ++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 src/pyfed/utils/exceptions.py create mode 100644 src/pyfed/utils/logging.py diff --git a/src/pyfed/utils/exceptions.py b/src/pyfed/utils/exceptions.py new file mode 100644 index 0000000..f9cbc9c --- /dev/null +++ b/src/pyfed/utils/exceptions.py @@ -0,0 +1,42 @@ +class ActivityPubException(Exception): + """Base exception for ActivityPub-related errors.""" + +class ValidationError(ActivityPubException): + """Raised when validation fails.""" + +class DeserializationError(ActivityPubException): + """Raised when deserialization fails.""" + +class RemoteObjectFetchError(ActivityPubException): + """Raised when fetching a remote object fails.""" + +class InvalidURLError(ValidationError): + """Raised when an invalid URL is provided.""" + +class InvalidDateTimeError(ValidationError): + """Raised when an invalid date/time is provided.""" + +class SignatureVerificationError(ActivityPubException): + """Raised when signature verification fails.""" + pass + +class SignatureError(ActivityPubException): + """Raised when signature verification fails.""" + pass + +class AuthenticationError(ActivityPubException): + """Raised when signature verification fails.""" + pass + +class RateLimitExceeded(ActivityPubException): + """Raised when signature verification fails.""" + pass + +class WebFingerError(ActivityPubException): + """Raised when signature verification fails.""" + pass + +class SecurityError(ActivityPubException): + """Raised when signature verification fails.""" + pass + diff --git a/src/pyfed/utils/logging.py b/src/pyfed/utils/logging.py new file mode 100644 index 0000000..31e4021 --- /dev/null +++ b/src/pyfed/utils/logging.py @@ -0,0 +1,36 @@ +import logging +import sys +from typing import Optional + +def configure_logging(level: Optional[str] = None): + """ + Configure the logging system for the ActivityPub library. + + Args: + level (Optional[str]): The logging level. If None, defaults to INFO. + """ + if level is None: + level = logging.INFO + else: + level = getattr(logging, level.upper()) + + logging.basicConfig( + level=level, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', + handlers=[ + logging.StreamHandler(sys.stdout), + logging.FileHandler('activitypub_library.log') + ] + ) + +def get_logger(name: str) -> logging.Logger: + """ + Get a logger with the specified name. + + Args: + name (str): The name of the logger, typically __name__ of the module. + + Returns: + logging.Logger: A configured logger instance. + """ + return logging.getLogger(name) -- GitLab