This repository has been archived by the owner on Nov 11, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
responses.py
131 lines (97 loc) · 3.18 KB
/
responses.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
class Response(object):
""" Base Response Object
Attributes:
self.json (dict): JSON representation of response
self._request (str): URL of
self._response (`requests.models.Response` object): Response object from requests module
"""
def __init__(self, response):
response.raise_for_status()
self._response = response
self._request = response.url
self.json = response.json()
def __repr__(self):
return '<Response>'
class PageSpeedResponse(Response):
""" PageSpeed Response Object
Attributes:
self.url (str):
self.title (str):
self.locale (str):
self.version (str):
self.speed (int):
self.statistics (`Statistics` object):
"""
@property
def caphchaResult(self):
return self.json.get('captchaResult')
@property
def kind(self):
return self.json.get('kind')
@property
def id(self):
return self.json.get('id')
@property
def analysisUTCTimestamp(self):
return self.json.get('analysisUTCTimestamp')
@property
def speed(self):
return self.json.get('ruleGroups').get('SPEED').get('score')
@property
def statistics(self):
page_stats = self.json.get('pageStats')
return Statistics(page_stats)
def to_csv(self, path):
pass
def pretty_print(self):
pass
def __repr__(self):
return '<Response(url={0})>'.format(self.url)
class DesktopPageSpeed(PageSpeedResponse):
def __repr__(self):
return '<DesktopPageSpeed(url={0})>'.format(self.url)
class MobilePageSpeed(PageSpeedResponse):
@property
def usability(self):
return self.json.get('ruleGroups').get('USABILITY').get('score')
def __repr__(self):
return '<MobilePageSpeed(url={0})>'.format(self.url)
class Statistics(object):
def __init__(self, page_stats):
self.page_stats = page_stats
@property
def css_response_bytes(self):
return self.page_stats.get('cssResponseBytes')
@property
def html_response_bytes(self):
return self.page_stats.get('htmlResponseBytes')
@property
def image_response_bytes(self):
return self.page_stats.get('imageResponseBytes')
@property
def javascript_response_bytes(self):
return self.page_stats.get('javascriptResponseBytes')
@property
def number_css_resources(self):
return self.page_stats.get('numberCssResources')
@property
def number_hosts(self):
return self.page_stats.get('numberHosts')
@property
def number_js_resources(self):
return self.page_stats.get('numberJsResources')
@property
def number_resources(self):
return self.page_stats.get('numberResources')
@property
def number_static_resources(self):
return self.page_stats.get('numberStaticResources')
@property
def other_response_bytes(self):
return self.page_stats.get('otherResponseBytes')
@property
def text_response_bytes(self):
return self.page_stats.get('textResponseBytes')
@property
def total_request_bytes(self):
return self.page_stats.get('totalRequestBytes')