kuon.watcher.tracker.tracker   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Test Coverage

Coverage 50%

Importance

Changes 0
Metric Value
wmc 7
eloc 32
dl 0
loc 62
ccs 14
cts 28
cp 0.5
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A Tracker.__init__() 0 9 1
A Tracker.remove_item() 0 9 2
A Tracker.add_item() 0 14 3
A Tracker.tracked_items() 0 7 1
1
#!/usr/bin/python
2
# -*- coding: utf-8 -*-
3 1
import logging
4
5 1
from kuon.api_response import LockedDict, LockedList
6 1
from kuon.watcher.tracker.json_manager import JsonManager
7
8
9 1
class TrackConditions:
10 1
    BELOW_VALUE = 0
11 1
    BELOW_AVERAGE_LAST_SOLD = 1
12 1
    BELOW_CHEAPEST_LAST_SOLD = 2
13
14
15 1
class Tracker(object):
16
    """Class to track search terms with conditions"""
17
18 1
    ITEM_REQUIRED_KEYWORDS = ('search_item', 'conditions')
19
20 1
    def __init__(self, log_level: int = logging.ERROR) -> None:
21
        """Initializing function"""
22
        logging.basicConfig(level=log_level,
23
                            format='[%(asctime)s.%(msecs)03d %(levelname)s %(name)s] %(message)s',
24
                            datefmt="%H:%M:%S")
25
        self.logger = logging.getLogger("watcher_tracker")
26
27
        self._json_manager = JsonManager()
28
        self._tracked_items = self._json_manager.get_tracked_items(self.ITEM_REQUIRED_KEYWORDS)
29
30 1
    @property
31 1
    def tracked_items(self) -> LockedList:
32
        """Get the tracked items as LockedList
33
34
        :return:
35
        """
36
        return LockedList(self._tracked_items)
37
38 1
    def add_item(self, item: LockedDict) -> None:
39
        """Adds an item to the tracking list
40
41
        :type item: LockedDict
42
        :return:
43
        """
44
        if not all([key in item for key in Tracker.ITEM_REQUIRED_KEYWORDS]):
45
            self.logger.error('Not all required keywords ({keywords}) are in the added item'.format(
46
                keywords=",".join(Tracker.ITEM_REQUIRED_KEYWORDS)))
47
            return
48
49
        if item not in self._tracked_items:
50
            self._tracked_items.append(item)
51
            self._json_manager.save_tracked_items(self._tracked_items)
52
53 1
    def remove_item(self, item: LockedDict) -> None:
54
        """Removes an item from the tracking list
55
56
        :type item: LockedDict
57
        :return:
58
        """
59
        if item in self._tracked_items:
60
            self._tracked_items.remove(item)
61
            self._json_manager.save_tracked_items(self._tracked_items)
62