Total Complexity | 16 |
Total Lines | 66 |
Duplicated Lines | 0 % |
Coverage | 86.11% |
Changes | 1 | ||
Bugs | 0 | Features | 0 |
1 | 1 | from plugin.sync.core.playlist.mapper.handlers.base import PlaylistHandler |
|
9 | 1 | class TraktPlaylistHandler(PlaylistHandler): |
|
10 | 1 | def __init__(self, task): |
|
11 | 1 | super(TraktPlaylistHandler, self).__init__(task) |
|
12 | |||
13 | 1 | self.playlist = None |
|
14 | 1 | self.items = None |
|
15 | |||
16 | 1 | def load(self, playlist=None, items=None): |
|
17 | 1 | if items is None: |
|
18 | 1 | if playlist is None: |
|
19 | raise ValueError('Either the "playlist" or "items" parameter is required') |
||
20 | |||
21 | # Fetch playlist items |
||
22 | 1 | items = playlist.items() |
|
23 | |||
24 | 1 | self.playlist = playlist |
|
25 | |||
26 | 1 | self.items = {} |
|
27 | 1 | self.table = {} |
|
28 | |||
29 | # Parse items into the `items` and `table` attribute |
||
30 | 1 | self.parse(items) |
|
31 | |||
32 | 1 | def keys_ordered(self): |
|
33 | 1 | return [ |
|
34 | key for key, _ in sorted( |
||
35 | self.items.items(), |
||
36 | key=lambda (k, i): i.index |
||
37 | ) |
||
38 | ] |
||
39 | |||
40 | # |
||
41 | # Item parser |
||
42 | # |
||
43 | |||
44 | 1 | def build_key(self, item): |
|
45 | 1 | i_type = type(item) |
|
46 | |||
47 | 1 | if i_type is Movie: |
|
48 | 1 | return [item.pk] |
|
49 | |||
50 | 1 | if i_type is Show: |
|
51 | 1 | return [item.pk] |
|
52 | |||
53 | 1 | if i_type is Season: |
|
54 | 1 | return [item.show.pk, item.pk] |
|
55 | |||
56 | 1 | if i_type is Episode: |
|
57 | 1 | return [item.show.pk] + list(item.pk) |
|
58 | |||
59 | log.debug('Ignoring unsupported list item: %r', item) |
||
60 | return None |
||
61 | |||
62 | 1 | def parse(self, items): |
|
63 | 1 | for item in items: |
|
64 | 1 | keys = self.build_key(item) |
|
65 | |||
66 | 1 | if keys is None: |
|
67 | continue |
||
68 | |||
69 | # Update `items` |
||
70 | 1 | self.items[tuple(keys)] = item |
|
71 | |||
72 | # Update `table` |
||
73 | 1 | if not self.path_set(self.table, keys, item): |
|
74 | log.info('Unable to update table (keys: %r)', keys) |
||
75 |