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

1import logging 

2from typing import Callable, Any 

3 

4from bs4 import Tag 

5 

6from amazonorders.exception import AmazonOrdersError 

7 

8__author__ = "Alex Laird" 

9__copyright__ = "Copyright 2024, Alex Laird" 

10__version__ = "0.0.7" 

11 

12logger = logging.getLogger(__name__) 

13 

14 

15class Parsable: 

16 def __init__(self, 

17 parsed: Tag) -> None: 

18 self.parsed: Tag = parsed 

19 

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_`") 

24 

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)