aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py')
-rw-r--r--.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py b/.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py
new file mode 100644
index 00000000..354f9ccd
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/unstructured_client/_hooks/custom/logger_hook.py
@@ -0,0 +1,83 @@
+import logging
+from typing import Optional, Tuple, Union, DefaultDict
+
+import requests
+
+from unstructured_client._hooks.custom.common import UNSTRUCTURED_CLIENT_LOGGER_NAME
+from unstructured_client._hooks.types import (
+ AfterSuccessContext,
+ AfterErrorContext,
+ AfterErrorHook,
+ SDKInitHook,
+ AfterSuccessHook,
+)
+from collections import defaultdict
+
+logger = logging.getLogger(UNSTRUCTURED_CLIENT_LOGGER_NAME)
+
+
+class LoggerHook(AfterErrorHook, AfterSuccessHook, SDKInitHook):
+ """Hook providing custom logging"""
+
+ def __init__(self) -> None:
+ self.retries_counter: DefaultDict[str, int] = defaultdict(int)
+
+ def log_retries(self, response: Optional[requests.Response], error: Optional[Exception], operation_id: str,):
+ """Log retries to give users visibility into requests."""
+
+ if response is not None and response.status_code // 100 == 5:
+ logger.info(
+ "Failed to process a request due to API server error with status code %d. "
+ "Attempting retry number %d after sleep.",
+ response.status_code,
+ self.retries_counter[operation_id],
+ )
+ if response.text:
+ logger.info("Server message - %s", response.text)
+
+ elif error is not None and isinstance(error, requests.exceptions.ConnectionError):
+ logger.info(
+ "Failed to process a request due to connection error - %s. "
+ "Attempting retry number %d after sleep.",
+ error,
+ self.retries_counter[operation_id],
+ )
+
+
+ def sdk_init(
+ self, base_url: str, client: requests.Session
+ ) -> Tuple[str, requests.Session]:
+ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
+ return base_url, client
+
+ def after_success(
+ self, hook_ctx: AfterSuccessContext, response: requests.Response
+ ) -> Union[requests.Response, Exception]:
+ self.retries_counter.pop(hook_ctx.operation_id, None)
+ # NOTE: In case of split page partition this means - at least one of the splits was partitioned successfully
+ logger.info("Successfully partitioned the document.")
+ return response
+
+ def after_error(
+ self,
+ hook_ctx: AfterErrorContext,
+ response: Optional[requests.Response],
+ error: Optional[Exception],
+ ) -> Union[Tuple[Optional[requests.Response], Optional[Exception]], Exception]:
+ """Concrete implementation for AfterErrorHook."""
+ self.retries_counter[hook_ctx.operation_id] += 1
+ self.log_retries(response, error, hook_ctx.operation_id)
+
+ if response and response.status_code == 200:
+ # NOTE: Even though this is an after_error method, due to split_pdf_hook logic we may get
+ # a success here when one of the split requests was partitioned successfully
+ logger.info("Successfully partitioned the document.")
+
+ else:
+ logger.error("Failed to partition the document.")
+ if response:
+ logger.error("Server responded with %d - %s", response.status_code, response.text)
+ if error is not None:
+ logger.error("Following error occurred - %s", error)
+
+ return response, error