Coverage for amazonorders/entity/parsable.py: 83.33%
18 statements
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 23:55 +0000
« prev ^ index » next coverage.py v7.4.0, created at 2024-01-16 23:55 +0000
1import logging
2from typing import Callable, Any
4from bs4 import Tag
6from amazonorders.exception import AmazonOrdersError
8__author__ = "Alex Laird"
9__copyright__ = "Copyright 2024, Alex Laird"
10__version__ = "0.0.7"
12logger = logging.getLogger(__name__)
15class Parsable:
16 def __init__(self,
17 parsed: Tag) -> None:
18 self.parsed: Tag = parsed
20 def safe_parse(self,
21 parse_function: Callable[[], Any]) -> Any:
22 if not parse_function.__name__.startswith("_parse_"):
23 raise AmazonOrdersError("This name of the `parse_function` passed to this method must start with `_parse_`")
25 try:
26 return parse_function()
27 except (AttributeError, IndexError, ValueError):
28 logger.warning("When building {}, `{}` could not be parsed.".format(self.__class__.__name__,
29 parse_function.__name__.split(
30 "_parse_")[1]),
31 exc_info=True)