paginationController.py (2650B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\ships\skins\live_data\paginationController.py 2 import math 3 from signals import Signal 4 5 class BasePaginationController(object): 6 num_per_page = None 7 _page_num = 0 8 9 def __init__(self): 10 self.on_page_num_changed = Signal('on_page_num_changed') 11 12 @property 13 def page_num(self): 14 return self._page_num 15 16 @page_num.setter 17 def page_num(self, value): 18 self._page_num = value 19 self.on_page_num_changed(value) 20 21 @property 22 def initialized(self): 23 raise NotImplementedError 24 25 def get_page(self, page_num): 26 raise NotImplementedError 27 28 def has_next_page(self): 29 raise NotImplementedError 30 31 def has_prev_page(self): 32 raise NotImplementedError 33 34 def is_num_pages_known(self): 35 raise NotImplementedError 36 37 def has_more_than_one_page(self): 38 raise NotImplementedError 39 40 def reset(self, *args, **kwargs): 41 raise NotImplementedError 42 43 def clear(self, *args, **kwargs): 44 raise NotImplementedError 45 46 47 class PaginationController(BasePaginationController): 48 num_pages = 0 49 50 def clear(self, entries, num_per_page = None): 51 self.reset(entries, num_per_page) 52 self.page_num = 0 53 54 def reset(self, entries, num_per_page = None): 55 self.entries = entries 56 self.num_per_page = num_per_page 57 if num_per_page is None: 58 self.num_pages = 1 59 self.num_per_page = len(self.entries) 60 else: 61 self.num_pages = int(math.ceil(len(entries) / float(num_per_page))) 62 63 def get_page(self, page_num): 64 if not self.entries: 65 return [] 66 self._validate_page_exists(page_num) 67 self.page_num = page_num 68 return self._get_page_entries(page_num) 69 70 def _get_page_entries(self, page_num): 71 idx_first = page_num * self.num_per_page 72 idx_last = (page_num + 1) * self.num_per_page 73 return self.entries[idx_first:idx_last] 74 75 def _validate_page_exists(self, page_num): 76 max_page_num = max(0, self.num_pages - 1) 77 if page_num > max_page_num: 78 raise ValueError('Trying to get page number {} when there are only {}'.format(page_num, max_page_num)) 79 80 def is_num_pages_known(self): 81 return True 82 83 def has_more_than_one_page(self): 84 return self.num_pages > 1 85 86 def has_next_page(self): 87 return self.page_num < self.num_pages - 1 88 89 def has_prev_page(self): 90 return self.page_num > 0 91 92 @property 93 def initialized(self): 94 return self.page_num is not None