-
Notifications
You must be signed in to change notification settings - Fork 52
New module, speccy.py #208
base: gonzobot
Are you sure you want to change the base?
Changes from 40 commits
7f19215
e4adf75
ef2487f
3ed293c
f46eabb
cec4812
31aae3d
f2d3c28
4245df6
07e8a30
efceb1d
42e876d
dc2480a
48d1711
bafcc32
ee495da
fb17d50
c977e3c
d49eb27
601e599
9d2d695
cadcfa4
efa4758
bf3cb84
1ca2b0b
dc5a781
60cefc9
55bcc6c
1a2d613
ec039fc
a0baf00
6ee430c
c211e9a
4725b3f
288f03d
b10c6b0
9487894
196a1b5
1b73957
241abb2
77123d9
2dcd32a
a739caa
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
from cloudbot import hook | ||
|
||
import re | ||
import requests | ||
|
||
from bs4 import BeautifulSoup as BS | ||
from contextlib import closing | ||
|
||
url_re = \ | ||
re.compile( | ||
'https?:\/\/speccy\.piriform\.com\/results\/[a-zA-Z0-9]+', re.I) | ||
GPU_RE = \ | ||
re.compile( | ||
'.*(amd|radeon|intel|integrated|nvidia|geforce|gtx).*\n.*', re.I) | ||
PICO_RE = \ | ||
re.compile( | ||
'.*pico', re.I) | ||
KMS_RE = \ | ||
re.compile( | ||
'.*kms', re.I) | ||
BOOSTER_RE = \ | ||
re.compile( | ||
'.*booster', re.I) | ||
REVIVER_RE = \ | ||
re.compile( | ||
'.*reviver', re.I) | ||
KILLER_RE = \ | ||
re.compile( | ||
'.*killer.+service', re.I) | ||
|
||
|
||
@hook.regex(url_re) | ||
def get_speccy_url(match): | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Extraneous whitespace There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Can't pinpoint what you see, as again, it's since been the same many revisions ago. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I mean the extra line after the |
||
with closing(requests.get(match.group(), )) as response: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Extraneous comma and whitespace There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure what you're referring to, these 4 lines have been the same since many reviewed (by you) revisions ago. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Here I'm referring to the comma and space after |
||
soup = BS(response.content, "lxml", from_encoding=response.encoding) | ||
|
||
body = soup.body | ||
|
||
data = [] | ||
|
||
os_spec = body.find("div", text='Operating System') | ||
if os_spec is not None: | ||
data.append( | ||
"\x02OS:\x02" + " " + os_spec.next_sibling.next_sibling.text) | ||
|
||
ram_spec = body.find("div", text='RAM') | ||
if ram_spec is not None: | ||
data.append( | ||
"\x02RAM:\x02" + " " + ram_spec.next_sibling.next_sibling.text) | ||
|
||
cpu_spec = body.find("div", text='CPU') | ||
if cpu_spec is not None: | ||
data.append( | ||
"\x02CPU:\x02" + " " + cpu_spec.next_sibling.next_sibling.text) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. These three There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll compress that too. |
||
|
||
def gpuspec(): | ||
gpu_find = body.find("div", text='Graphics') | ||
if gpu_find is not None: | ||
gpu_find = gpu_find.next_sibling.next_sibling.text | ||
gpu_spec = "" | ||
for gpu_string in GPU_RE.finditer(gpu_find): | ||
gpu_spec += gpu_string.group() | ||
return gpu_spec | ||
|
||
gpu_spec = gpuspec() | ||
if gpu_spec is not None: | ||
data.append("\x02GPU:\x02" + " " + gpu_spec) | ||
|
||
def cspace(): | ||
c_space_spec = body.find("div", class_="datavalue", text='C:') | ||
if c_space_spec is not None: | ||
c_space_spec_found = c_space_spec.parent.parent | ||
c_space_data = c_space_spec_found.find( | ||
"div", text='Free Space:\xA0', class_="datakey").parent | ||
return c_space_data.find(class_="datavalue").text | ||
|
||
c_space_spec = cspace() | ||
if c_space_spec is not None: | ||
data.append("\x02Space Left (C:\):\x02" + " " + c_space_spec) | ||
|
||
def ramusg(): | ||
ram_usg_spec = body.find( | ||
"div", class_="blue clear", text='Physical Memory') | ||
if ram_usg_spec is not None: | ||
ram_usg_spec_found = ram_usg_spec.next_sibling.next_sibling | ||
ram_usg_data = ram_usg_spec_found.find( | ||
"div", text='Memory Usage:\xA0', class_="datakey").parent | ||
return ram_usg_data.find(class_="datavalue").text | ||
|
||
ram_usg_spec = ramusg() | ||
if ram_usg_spec is not None: | ||
data.append("\x02RAM USG:\x02" + " " + ram_usg_spec) | ||
|
||
badware_patterns = [KILLER_RE, REVIVER_RE, BOOSTER_RE, KMS_RE, PICO_RE] | ||
badware = body.find_all("div", text=badware_patterns) | ||
if badware: | ||
for tag in badware: | ||
data.append("\x02Badware:\x02" + " " + tag.text) | ||
else: | ||
data.append("\x02No Badware\x02") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Might be easier to just set a variable like |
||
|
||
drive_spec_bad = False | ||
for drive_spec_smart in body.find_all( | ||
"div", class_="blue clear", text="05"): | ||
drive_spec_smart_find = \ | ||
drive_spec_smart.next_sibling.next_sibling | ||
for drive_spec_smart_found in drive_spec_smart_find.find_all( | ||
"div", class_="datakey", text="Raw Value:\xA0"): | ||
drives = drive_spec_smart_found.next_sibling.next_sibling | ||
if "0000000000" in drives != 0: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not even sure what this is trying to accomplish. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Checks if There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why the comparison to |
||
str.strip('0') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This statement doesn't actually do anything. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hm, thought it did. One less piece of code needed once I test it. 👍 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
else: | ||
drive_spec_sn_find = drive_spec_smart.parent.parent \ | ||
.previous_sibling.previous_sibling.previous_sibling \ | ||
.previous_sibling.previous_element.previous_element \ | ||
.previous_sibling.previous_sibling | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Surely you can use a different criteria to find this element. Like matching an specific attribute or something. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'll see how I can compress that where it's less obviously ridiculous. |
||
for drive_spec_sn_check in drive_spec_sn_find.find_all( | ||
"div", class_="datakey", text="Serial Number:\xA0"): | ||
drive_spec_sn = \ | ||
drive_spec_sn_check.next_sibling.next_sibling.text | ||
drive_spec_bad = True | ||
if drive_spec_bad is True: | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why do you check if There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Didn't realize that, tested fine, but I'll remove that certainly. |
||
data.append( | ||
"\x02Bad Disk:\x02 S/N: {}".format(drive_spec_sn)) | ||
|
||
if drive_spec_bad is False: | ||
data.append("\x02Disks Healthy\x02") | ||
|
||
spec_out = re.sub(r"\s+", " ", ' ● '.join(data)) | ||
|
||
return spec_out |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this line continuation needed? It makes the code much more unreadable
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, thought it looked better, as I see now It's kind of crowded. I hate those line warnings but I want so much to keep it pep8 acceptable.