Coverage for src/artemis_sg/item.py: 97%
48 statements
« prev ^ index » next coverage.py v7.3.1, created at 2024-03-06 08:01 -0800
« prev ^ index » next coverage.py v7.3.1, created at 2024-03-06 08:01 -0800
1import logging
2import re
4import isbnlib
6from artemis_sg.config import CFG
9class Item:
10 def __init__(self, keys, values, row_num, isbn_key):
11 clean_keys = []
12 for x in keys:
13 if x:
14 clean_keys.append(str(x).strip().upper())
15 self.data = dict(zip(clean_keys, values))
16 self.data_row_num = row_num
17 self.isbn_key = isbn_key
18 self.isbn = self.validate_isbn(self.data[isbn_key])
19 self.isbn10 = isbnlib.to_isbn10(self.isbn)
20 self.image_urls = []
21 if "DESCRIPTION" not in self.data:
22 self.data["DESCRIPTION"] = ""
23 if "DIMENSION" not in self.data:
24 self.data["DIMENSION"] = ""
25 self._sort_data()
27 def _sort_data(self):
28 namespace = f"{type(self).__name__}.{self._sort_data.__name__}"
30 def sort_order(e):
31 defined_order = CFG["asg"]["item"]["sort_order"]
32 if e in defined_order:
33 return defined_order.index(e)
34 return 99
36 sorted_keys = list(self.data.keys())
37 # sort by defined order
38 sorted_keys.sort(key=sort_order)
39 # move ISBN and DESCRIPTION to end of list
40 sorted_keys.sort(key=self.isbn_key.__eq__)
41 sorted_keys.sort(key="DESCRIPTION".__eq__)
42 logging.debug(f"{namespace}: Sorted keys: {sorted_keys}")
44 sorted_data = {key: self.data[key] for key in sorted_keys}
45 self.data = sorted_data
47 def validate_isbn(self, isbn):
48 namespace = f"{type(self).__name__}.{self.validate_isbn.__name__}"
49 valid_isbn = ""
50 if isinstance(isbn, str):
51 m = re.search('="(.*)"', isbn)
52 if m: 52 ↛ 53line 52 didn't jump to line 53, because the condition on line 52 was never true
53 isbn = m.group(1)
54 try:
55 valid_isbn = str(int(isbn)).strip()
56 except Exception as e:
57 logging.error(f"{namespace}: Err reading isbn '{isbn}', err: '{e}'")
58 valid_isbn = ""
59 return valid_isbn