SearchResponseParser.parse()   A
last analyzed

Complexity

Conditions 4

Size

Total Lines 31
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 13.2581

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 31
ccs 2
cts 12
cp 0.1666
rs 9.328
c 0
b 0
f 0
cc 4
nop 1
crap 13.2581
1
#!/usr/bin/python
2
# -*- coding: utf-8 -*-
3 1
import json
4
5 1
from kuon.api_response import APIResponse
6 1
from kuon.watcher.adapters.models.item import Item
7 1
from kuon.watcher.adapters.models.search_response import SearchResponse
8 1
from kuon.watcher.adapters.models.sticker import Sticker
9
10
11 1
class SearchResponseParser(object):
12
    """Parser class to parse the response of the search to the unified format"""
13
14 1
    @staticmethod
15 1
    def parse(results: dict) -> APIResponse:
16
        """Parse the item model
17
18
        :type results: dict
19
        :return:
20
        """
21
        success = results['status'] == 'success' and 'items' in results['data']
22
        response = SearchResponse(success=success)
23
24
        if success:
25
            for item in results['data']['items']:
26
                wear = item['float_value']
27
                if wear is None:
28
                    wear = -1.0
29
30
                item_model = Item(
31
                    market_name=item['market_hash_name'],
32
                    item_id=item['item_id'],
33
                    app_id=int(item['app_id']),
34
                    class_id=int(item['class_id']),
35
                    context_id=int(item['context_id']),
36
                    instance_id=int(item['instance_id']),
37
                    price=int(float(item['price']) * 100),
38
                    wear_value=float(wear),
39
                    image=item['image'],
40
                    inspect_link=item['inspect_link'],
41
                    stickers=SearchResponseParser.get_stickers(item['stickers'])
42
                )
43
                response.add_item(item_model)
44
        return APIResponse(json.dumps(response.__dict__))
45
46 1
    @staticmethod
47 1
    def get_stickers(stickers: list) -> list:
48
        """Parse the sticker value
49
50
        :type stickers: list
51
        :return:
52
        """
53
        if not stickers:
54
            return []
55
56
        sticker_results = []
57
        for sticker in stickers:
58
            wear = sticker['wear_value']
59
            if wear is None:
60
                wear = -1.0
61
62
            sticker_results.append(Sticker(
63
                name=sticker['name'],
64
                image=sticker['url'],
65
                wear_value=float(wear)
66
            ))
67
68
        return sticker_results
69