Skip to content

Commit 1681ee4

Browse files
committed
Add Python3.5 support
1 parent f0007b8 commit 1681ee4

File tree

7 files changed

+95
-63
lines changed

7 files changed

+95
-63
lines changed

.travis.yml

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ language: python
22

33
python:
44
- 2.7
5+
- 3.5
56
- 3.6
67

78
addons:
@@ -13,6 +14,7 @@ addons:
1314

1415
before_install:
1516
- sudo apt-get update && sudo apt-get --reinstall install -qq language-pack-en language-pack-pt
17+
- sudo apt-get python3-dev
1618
- sudo locale-gen --no-purge --lang pt_BR.UTF-8
1719
- wget -N https://chromedriver.storage.googleapis.com/2.32/chromedriver_linux64.zip
1820
- unzip chromedriver_linux64.zip -d /home/travis/build/rafpyprog/ImageSoup/tests/

Makefile

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ init:
22
pip3 install -r requirements.txt
33

44
test:
5-
py.test tests/test.py --verbose --cov-report term --cov-report xml --cov imagesoup
5+
#py.test tests/test.py --verbose --cov-report term --cov-report xml --cov imagesoup
6+
python3.5 -m pytest tests/test.py --verbose --cov-report term --cov-report xml --cov imagesoup
7+
python3.6 -m pytest tests/test.py --verbose --cov-report term --cov-report xml --cov imagesoup
8+
python2.7 -m pytest tests/test.py --verbose --cov-report term --cov-report xml --cov imagesoup
69

710
flake8:
811
flake8 --ignore=E501,F401,E128,E402,E731,F821 imagesoup

get_chromedriver.py renamed to chromintern.py

+49-15
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,48 @@
11
from distutils.version import StrictVersion
2+
import os
3+
import platform
4+
import re
25
import sys
36
import subprocess
7+
from subprocess import Popen, PIPE
48
import zipfile
59

10+
import fire
611
import requests
712
from bs4 import BeautifulSoup
813
import lxml
14+
from selenium.common.exceptions import WebDriverException
915

1016
GOOGLE_API = 'https://chromedriver.storage.googleapis.com/'
1117

12-
def get_local_release(chrome_path):
13-
from subprocess import check_output
14-
cmd = [chrome_path, '-v']
15-
release = check_output(cmd).decode()
16-
number = release.split(' ')[1]
17-
number = '.'.join(number.split('.')[:2])
18-
return number
18+
19+
def parse_chromedriver_version(cmd_stdout):
20+
'''
21+
cmd_stdout (string): Output from chromedriver -v
22+
'''
23+
CHROMEDRIVER_VERSION_PATTERN = '\d+\.\d+'
24+
version = re.search(CHROMEDRIVER_VERSION_PATTERN, cmd_stdout)
25+
if version:
26+
return version.group()
27+
else:
28+
raise Exception('Unable to parse Chromedriver version {}'
29+
.format(cmd_stdout))
30+
31+
32+
def get_local_release(executable_path='chromedriver'):
33+
cmd = [executable_path, '-v']
34+
try:
35+
process = Popen(cmd, env=os.environ,
36+
close_fds=platform.system() != 'Windows',
37+
stdout=PIPE, stderr=PIPE)
38+
except OSError:
39+
msg = '{} executable needs to be in PATH.'
40+
raise WebDriverException(
41+
msg.format(os.path.basename(executable_path)))
42+
else:
43+
stdout = process.communicate()[0]
44+
version = parse_chromedriver_version(stdout.decode())
45+
return version
1946

2047

2148
def get_latest_release():
@@ -63,7 +90,7 @@ def unzip(file, path=None):
6390
return os.path.join(path, z.filelist[0].filename)
6491

6592

66-
def download_chromedriver(version=None, path=None, clean_up=True, set_environ=False):
93+
def get_chrome(version=None, path=None, clean_up=True, set_environ=False):
6794
'''
6895
Download a Chromedriver release. If version is None, will download
6996
the lastest release.
@@ -79,6 +106,9 @@ def download_chromedriver(version=None, path=None, clean_up=True, set_environ=Fa
79106
chrome_zip = download(version, path=path)
80107
executable_path = unzip(chrome_zip, path=path)
81108

109+
if sys.platform == 'linux':
110+
os.system('chmod +x ' + executable_path)
111+
82112
if clean_up is True:
83113
os.remove(chrome_zip)
84114

@@ -91,15 +121,19 @@ def download_chromedriver(version=None, path=None, clean_up=True, set_environ=Fa
91121
return executable_path
92122

93123

94-
def is_updated(chrome_path):
95-
local = get_local_release(chrome_path)
124+
def is_updated(executable_path='chromedriver'):
125+
local = get_local_release(executable_path)
96126
latest = get_latest_release()
97-
print('Local: {} - Latest: {}'.format(local, latest))
98127
return StrictVersion(local) == StrictVersion(latest)
99128

100129

101-
download_chromedriver(path='D:\\', set_environ=True)
102-
130+
def update():
131+
if is_updated():
132+
installed_release = get_local_release()
133+
print('The installed release({}) is already up to date.'
134+
.format(installed_release))
135+
else:
136+
return None
103137

104-
get_local_release(os.environ['CHROME_DRIVER_PATH'])
105-
is_updated(os.environ['CHROME_DRIVER_PATH'])
138+
if __name__ == '__main__':
139+
fire.Fire({'update': update})

coverage.xml

+33-33
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<?xml version="1.0" ?>
2-
<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.839" lines-covered="245" lines-valid="292" timestamp="1505335133353" version="4.4.1">
2+
<coverage branch-rate="0" branches-covered="0" branches-valid="0" complexity="0" line-rate="0.9212" lines-covered="269" lines-valid="292" timestamp="1505414113421" version="4.4.1">
33
<!-- Generated by coverage.py: https://coverage.readthedocs.io -->
44
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
55
<sources>
6-
<source>D:\Projetos\#DEV Python\ImageSoup\imagesoup</source>
6+
<source>/home/rafael/Documentos/Projetos/imagesoup/imagesoup</source>
77
</sources>
88
<packages>
9-
<package branch-rate="0" complexity="0" line-rate="0.839" name=".">
9+
<package branch-rate="0" complexity="0" line-rate="0.9212" name=".">
1010
<classes>
1111
<class branch-rate="0" complexity="0" filename="__init__.py" line-rate="1" name="__init__.py">
1212
<methods/>
@@ -236,7 +236,7 @@
236236
<line hits="1" number="74"/>
237237
</lines>
238238
</class>
239-
<class branch-rate="0" complexity="0" filename="reverse_search.py" line-rate="0.54" name="reverse_search.py">
239+
<class branch-rate="0" complexity="0" filename="reverse_search.py" line-rate="0.98" name="reverse_search.py">
240240
<methods/>
241241
<lines>
242242
<line hits="1" number="1"/>
@@ -259,46 +259,46 @@
259259
<line hits="1" number="25"/>
260260
<line hits="1" number="26"/>
261261
<line hits="1" number="27"/>
262-
<line hits="0" number="28"/>
263-
<line hits="1" number="30"/>
262+
<line hits="1" number="29"/>
263+
<line hits="0" number="30"/>
264264
<line hits="1" number="32"/>
265-
<line hits="0" number="33"/>
266-
<line hits="0" number="34"/>
267-
<line hits="0" number="35"/>
265+
<line hits="1" number="34"/>
266+
<line hits="1" number="35"/>
267+
<line hits="1" number="36"/>
268268
<line hits="1" number="37"/>
269-
<line hits="0" number="38"/>
270-
<line hits="0" number="39"/>
271-
<line hits="0" number="40"/>
272-
<line hits="0" number="41"/>
273-
<line hits="0" number="42"/>
274-
<line hits="0" number="43"/>
275-
<line hits="0" number="44"/>
269+
<line hits="1" number="39"/>
270+
<line hits="1" number="40"/>
271+
<line hits="1" number="41"/>
272+
<line hits="1" number="42"/>
273+
<line hits="1" number="43"/>
274+
<line hits="1" number="44"/>
275+
<line hits="1" number="45"/>
276276
<line hits="1" number="46"/>
277-
<line hits="0" number="47"/>
278-
<line hits="0" number="48"/>
279-
<line hits="0" number="51"/>
280-
<line hits="0" number="55"/>
281-
<line hits="0" number="58"/>
282-
<line hits="0" number="59"/>
277+
<line hits="1" number="48"/>
278+
<line hits="1" number="49"/>
279+
<line hits="1" number="50"/>
280+
<line hits="1" number="53"/>
281+
<line hits="1" number="57"/>
282+
<line hits="1" number="60"/>
283283
<line hits="1" number="61"/>
284-
<line hits="1" number="62"/>
285-
<line hits="0" number="64"/>
286-
<line hits="0" number="65"/>
287-
<line hits="0" number="67"/>
288-
<line hits="0" number="68"/>
289-
<line hits="0" number="69"/>
290-
<line hits="0" number="70"/>
291-
<line hits="1" number="77"/>
284+
<line hits="1" number="63"/>
285+
<line hits="1" number="64"/>
286+
<line hits="1" number="66"/>
287+
<line hits="1" number="67"/>
288+
<line hits="1" number="69"/>
289+
<line hits="1" number="70"/>
290+
<line hits="1" number="71"/>
291+
<line hits="1" number="72"/>
292292
</lines>
293293
</class>
294-
<class branch-rate="0" complexity="0" filename="utils.py" line-rate="0.8974" name="utils.py">
294+
<class branch-rate="0" complexity="0" filename="utils.py" line-rate="0.9487" name="utils.py">
295295
<methods/>
296296
<lines>
297297
<line hits="1" number="1"/>
298298
<line hits="1" number="2"/>
299299
<line hits="1" number="3"/>
300-
<line hits="0" number="4"/>
301-
<line hits="0" number="5"/>
300+
<line hits="1" number="4"/>
301+
<line hits="1" number="5"/>
302302
<line hits="1" number="8"/>
303303
<line hits="1" number="9"/>
304304
<line hits="1" number="10"/>

imagesoup/reverse_search.py

+3-14
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ def __init__(self):
2323
def set_chrome(self):
2424
if not self.driver:
2525
chrome_options = Options()
26-
chrome_options.add_argument("--headless")
26+
chrome_options.add_argument('--headless')
27+
chrome_options.add_argument('--incognito')
28+
2729
if self.chromedriver_path:
2830
self.driver = Chrome(self.chromedriver_path, chrome_options=chrome_options)
2931
else:
@@ -68,16 +70,3 @@ def search(self, filepath, language='en'):
6870
self.guess = self.parse_guess()
6971
self.similar = self.parse_similar()
7072
return None
71-
72-
73-
74-
75-
76-
77-
'''
78-
soup_rev = ReverseSearch()
79-
filepath = 'D:\\Projetos\\#DEV Python\\ImageSoup\\imagesoup\\MG.png'
80-
soup_rev.search(filepath)
81-
soup_rev.guess
82-
83-
l = soup_rev.similar'''

setup.py

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ def read(fname):
3838
'Development Status :: 4 - Beta',
3939
'Intended Audience :: Developers',
4040
'Programming Language :: Python :: 2.7',
41+
'Programming Language :: Python :: 3.5',
4142
'Programming Language :: Python :: 3.6',
4243
'Topic :: Multimedia :: Graphics',
4344
'Topic :: Internet :: WWW/HTTP :: Indexing/Search',

tests/test.py

+3
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,13 @@ def test_blacklist_query_string():
161161
os.remove(bl.filename)
162162

163163

164+
@pytest.mark.reverse_search
164165
def test_reverse_search_init():
165166
revsoup = ReverseSearch()
166167
assert isinstance(revsoup, ReverseSearch)
167168

168169

170+
@pytest.mark.reverse_search
169171
def test_reverse_search_search(chrome_driver_path):
170172
here = os.path.abspath(os.path.dirname(__file__))
171173
filepath = os.path.join(here, 'test_image1.png')
@@ -174,6 +176,7 @@ def test_reverse_search_search(chrome_driver_path):
174176
assert revsoup.search(filepath) is None
175177

176178

179+
@pytest.mark.reverse_search
177180
def test_reverse_guess(chrome_driver_path):
178181
here = os.path.abspath(os.path.dirname(__file__))
179182
filepath = os.path.join(here, 'test_image1.png')

0 commit comments

Comments
 (0)