diff options
author | Donald Stufft <donald@stufft.io> | 2014-12-05 20:54:56 -0500 |
---|---|---|
committer | Donald Stufft <donald@stufft.io> | 2014-12-05 20:54:56 -0500 |
commit | 7532ee4eb379078f204460324d7257c1db84c389 (patch) | |
tree | fd67b4c9edcb6f49a47b62524504c6796cbc6c4d | |
parent | 4c173b52ac277ca7c65f54433b773108c59aab4c (diff) | |
download | py-bcrypt-git-7532ee4eb379078f204460324d7257c1db84c389.tar.gz |
Enable flake8 style checks
-rw-r--r-- | .travis.yml | 2 | ||||
-rw-r--r-- | bcrypt/__init__.py | 41 | ||||
-rw-r--r-- | setup.py | 8 | ||||
-rw-r--r-- | tests/test_bcrypt.py | 232 | ||||
-rw-r--r-- | tox.ini | 24 |
5 files changed, 245 insertions, 62 deletions
diff --git a/.travis.yml b/.travis.yml index 70ec890..81f1a0e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,8 @@ env: - TOXENV=py33 CC=clang - TOXENV=py34 CC=clang - TOXENV=pypy CC=clang + - TOXENV=pep8 + - TOXENV=py3pep8 install: pip install tox diff --git a/bcrypt/__init__.py b/bcrypt/__init__.py index 4c4ee0f..0cf2430 100644 --- a/bcrypt/__init__.py +++ b/bcrypt/__init__.py @@ -24,11 +24,17 @@ from cffi import FFI import six -from . import __about__ -from .__about__ import * +from .__about__ import ( + __author__, __copyright__, __email__, __license__, __summary__, __title__, + __uri__, __version__, +) -__all__ = ["gensalt", "hashpw"] + __about__.__all__ +__all__ = [ + "__title__", "__summary__", "__uri__", "__version__", "__author__", + "__email__", "__license__", "__copyright__", + "gensalt", "hashpw", +] _crypt_blowfish_dir = "crypt_blowfish-1.2" @@ -42,26 +48,30 @@ _ffi.cdef(""" char *crypt_rn(const char *key, const char *setting, void *data, int size); """) -_bcrypt_lib = _ffi.verify('#include "ow-crypt.h"', +_bcrypt_lib = _ffi.verify( + '#include "ow-crypt.h"', sources=[ str(os.path.join(_bundled_dir, "crypt_blowfish.c")), str(os.path.join(_bundled_dir, "crypt_gensalt.c")), str(os.path.join(_bundled_dir, "wrapper.c")), # How can we get distutils to work with a .S file? - # Set https://github.com/dstufft/bcrypt/blob/4c939e895bd9607301cda6d6f05ef3c1146eb658/bcrypt/crypt_blowfish-1.2/crypt_blowfish.c#L57 + # Set https://github.com/dstufft/bcrypt/blob/4c939e895bd9607301cda6d + # 6f05ef3c1146eb658/bcrypt/crypt_blowfish-1.2/crypt_blowfish.c#L57 # back to 1 if we get ASM loaded. # str(os.path.join(_bundled_dir, "x86.S")), ], include_dirs=[str(_bundled_dir)], - modulename=str("_".join([ - "_cffi", - hashlib.sha1( - "".join(_ffi._cdefsources).encode("utf-8") - ).hexdigest()[:6], - hashlib.sha1( - _crypt_blowfish_dir.encode("utf-8") - ).hexdigest()[:6], - ])), + modulename=str( + "_".join([ + "_cffi", + hashlib.sha1( + "".join(_ffi._cdefsources).encode("utf-8") + ).hexdigest()[:6], + hashlib.sha1( + _crypt_blowfish_dir.encode("utf-8") + ).hexdigest()[:6], + ]), + ), ) @@ -70,7 +80,8 @@ def gensalt(rounds=12): output = _ffi.new("unsigned char[]", 30) retval = _bcrypt_lib.crypt_gensalt_rn( - b"$2a$", rounds, salt, len(salt), output, len(output)) + b"$2a$", rounds, salt, len(salt), output, len(output), + ) if not retval: raise ValueError("Invalid rounds") @@ -1,9 +1,9 @@ #!/usr/bin/env python -import sys import os +import sys from setuptools import setup -from setuptools.command.test import test as TestCommand +from setuptools.command.test import test SIX_DEPENDENCY = "six>=1.4.1" @@ -42,9 +42,9 @@ else: ext_modules = [_ffi.verifier.get_extension()] -class PyTest(TestCommand): +class PyTest(test): def finalize_options(self): - TestCommand.finalize_options(self) + test.finalize_options(self) self.test_args = [] self.test_suite = True diff --git a/tests/test_bcrypt.py b/tests/test_bcrypt.py index 7f589fb..8e6ff19 100644 --- a/tests/test_bcrypt.py +++ b/tests/test_bcrypt.py @@ -1,7 +1,9 @@ import os import mock + import pytest + import six import bcrypt @@ -52,52 +54,192 @@ def test_gensalt_rounds_invalid(rounds, monkeypatch): @pytest.mark.parametrize(("password", "salt", "expected"), [ - (b"Kk4DQuMMfZL9o", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm"), - (b"9IeRXmnGxMYbs", b"$2a$04$pQ7gRO7e6wx/936oXhNjrO", b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy"), - (b"xVQVbwa1S0M8r", b"$2a$04$SQe9knOzepOVKoYXo9xTte", b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW"), - (b"Zfgr26LWd22Za", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQO", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne"), - (b"Tg4daC27epFBE", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2"), - (b"xhQPMmwh5ALzW", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy"), - (b"59je8h5Gj71tg", b"$2a$04$cvXudZ5ugTg95W.rOjMITu", b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG"), - (b"wT4fHJa2N9WSW", b"$2a$04$YYjtiq4Uh88yUsExO0RNTu", b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO"), - (b"uSgFRnQdOgm4S", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu"), - (b"tEPtJZXur16Vg", b"$2a$04$2moPs/x/wnCfeQ5pCheMcu", b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG"), - (b"vvho8C6nlVf9K", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2"), - (b"5auCCY9by0Ruf", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG"), - (b"GtTkR6qn2QOZW", b"$2a$04$JfoNrR8.doieoI8..F.C1O", b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m"), - (b"zKo8vdFSnjX0f", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy"), - (b"I9VfYlacJiwiK", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMe", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6"), - (b"VFPO7YXnHQbQO", b"$2a$04$WQp9.igoLqVr6Qk70mz6xu", b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6"), - (b"VDx5BdxfxstYk", b"$2a$04$xgZtlonpAHSU/njOCdKztO", b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS"), - (b"dEe6XfVGrrfSH", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe"), - (b"cTT0EAFdwJiLn", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m"), - (b"J8eHUDuxBB520", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoe", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk."), + ( + b"Kk4DQuMMfZL9o", + b"$2a$04$cVWp4XaNU8a4v1uMRum2SO", + b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm", + ), + ( + b"9IeRXmnGxMYbs", + b"$2a$04$pQ7gRO7e6wx/936oXhNjrO", + b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy", + ), + ( + b"xVQVbwa1S0M8r", + b"$2a$04$SQe9knOzepOVKoYXo9xTte", + b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW", + ), + ( + b"Zfgr26LWd22Za", + b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQO", + b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne", + ), + ( + b"Tg4daC27epFBE", + b"$2a$04$ahiTdwRXpUG2JLRcIznxc.", + b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2", + ), + ( + b"xhQPMmwh5ALzW", + b"$2a$04$nQn78dV0hGHf5wUBe0zOFu", + b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy", + ), + ( + b"59je8h5Gj71tg", + b"$2a$04$cvXudZ5ugTg95W.rOjMITu", + b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG", + ), + ( + b"wT4fHJa2N9WSW", + b"$2a$04$YYjtiq4Uh88yUsExO0RNTu", + b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO", + ), + ( + b"uSgFRnQdOgm4S", + b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.", + b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu", + ), + ( + b"tEPtJZXur16Vg", + b"$2a$04$2moPs/x/wnCfeQ5pCheMcu", + b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG", + ), + ( + b"vvho8C6nlVf9K", + b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.", + b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2", + ), + ( + b"5auCCY9by0Ruf", + b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.", + b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG", + ), + ( + b"GtTkR6qn2QOZW", + b"$2a$04$JfoNrR8.doieoI8..F.C1O", + b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m", + ), + ( + b"zKo8vdFSnjX0f", + b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O", + b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy", + ), + ( + b"I9VfYlacJiwiK", + b"$2a$04$xnFVhJsTzsFBTeP3PpgbMe", + b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6", + ), + ( + b"VFPO7YXnHQbQO", + b"$2a$04$WQp9.igoLqVr6Qk70mz6xu", + b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6", + ), + ( + b"VDx5BdxfxstYk", + b"$2a$04$xgZtlonpAHSU/njOCdKztO", + b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS", + ), + ( + b"dEe6XfVGrrfSH", + b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.", + b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe", + ), + ( + b"cTT0EAFdwJiLn", + b"$2a$04$7/Qj7Kd8BcSahPO4khB8me", + b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m", + ), + ( + b"J8eHUDuxBB520", + b"$2a$04$VvlCUKbTMjaxaYJ.k5juoe", + b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.", + ), ]) def test_hashpw_new(password, salt, expected): assert bcrypt.hashpw(password, salt) == expected @pytest.mark.parametrize(("password", "hashed"), [ - (b"Kk4DQuMMfZL9o", b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm"), - (b"9IeRXmnGxMYbs", b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy"), - (b"xVQVbwa1S0M8r", b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW"), - (b"Zfgr26LWd22Za", b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne"), - (b"Tg4daC27epFBE", b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2"), - (b"xhQPMmwh5ALzW", b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy"), - (b"59je8h5Gj71tg", b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG"), - (b"wT4fHJa2N9WSW", b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO"), - (b"uSgFRnQdOgm4S", b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu"), - (b"tEPtJZXur16Vg", b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG"), - (b"vvho8C6nlVf9K", b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2"), - (b"5auCCY9by0Ruf", b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG"), - (b"GtTkR6qn2QOZW", b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m"), - (b"zKo8vdFSnjX0f", b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy"), - (b"I9VfYlacJiwiK", b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6"), - (b"VFPO7YXnHQbQO", b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6"), - (b"VDx5BdxfxstYk", b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS"), - (b"dEe6XfVGrrfSH", b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe"), - (b"cTT0EAFdwJiLn", b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m"), - (b"J8eHUDuxBB520", b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk."), + ( + b"Kk4DQuMMfZL9o", + b"$2a$04$cVWp4XaNU8a4v1uMRum2SO026BWLIoQMD/TXg5uZV.0P.uO8m3YEm", + ), + ( + b"9IeRXmnGxMYbs", + b"$2a$04$pQ7gRO7e6wx/936oXhNjrOUNOHL1D0h1N2IDbJZYs.1ppzSof6SPy", + ), + ( + b"xVQVbwa1S0M8r", + b"$2a$04$SQe9knOzepOVKoYXo9xTteNYr6MBwVz4tpriJVe3PNgYufGIsgKcW", + ), + ( + b"Zfgr26LWd22Za", + b"$2a$04$eH8zX.q5Q.j2hO1NkVYJQOM6KxntS/ow3.YzVmFrE4t//CoF4fvne", + ), + ( + b"Tg4daC27epFBE", + b"$2a$04$ahiTdwRXpUG2JLRcIznxc.s1.ydaPGD372bsGs8NqyYjLY1inG5n2", + ), + ( + b"xhQPMmwh5ALzW", + b"$2a$04$nQn78dV0hGHf5wUBe0zOFu8n07ZbWWOKoGasZKRspZxtt.vBRNMIy", + ), + ( + b"59je8h5Gj71tg", + b"$2a$04$cvXudZ5ugTg95W.rOjMITuM1jC0piCl3zF5cmGhzCibHZrNHkmckG", + ), + ( + b"wT4fHJa2N9WSW", + b"$2a$04$YYjtiq4Uh88yUsExO0RNTuEJ.tZlsONac16A8OcLHleWFjVawfGvO", + ), + ( + b"uSgFRnQdOgm4S", + b"$2a$04$WLTjgY/pZSyqX/fbMbJzf.qxCeTMQOzgL.CimRjMHtMxd/VGKojMu", + ), + ( + b"tEPtJZXur16Vg", + b"$2a$04$2moPs/x/wnCfeQ5pCheMcuSJQ/KYjOZG780UjA/SiR.KsYWNrC7SG", + ), + ( + b"vvho8C6nlVf9K", + b"$2a$04$HrEYC/AQ2HS77G78cQDZQ.r44WGcruKw03KHlnp71yVQEwpsi3xl2", + ), + ( + b"5auCCY9by0Ruf", + b"$2a$04$vVYgSTfB8KVbmhbZE/k3R.ux9A0lJUM4CZwCkHI9fifke2.rTF7MG", + ), + ( + b"GtTkR6qn2QOZW", + b"$2a$04$JfoNrR8.doieoI8..F.C1OQgwE3uTeuardy6lw0AjALUzOARoyf2m", + ), + ( + b"zKo8vdFSnjX0f", + b"$2a$04$HP3I0PUs7KBEzMBNFw7o3O7f/uxaZU7aaDot1quHMgB2yrwBXsgyy", + ), + ( + b"I9VfYlacJiwiK", + b"$2a$04$xnFVhJsTzsFBTeP3PpgbMeMREb6rdKV9faW54Sx.yg9plf4jY8qT6", + ), + ( + b"VFPO7YXnHQbQO", + b"$2a$04$WQp9.igoLqVr6Qk70mz6xuRxE0RttVXXdukpR9N54x17ecad34ZF6", + ), + ( + b"VDx5BdxfxstYk", + b"$2a$04$xgZtlonpAHSU/njOCdKztOPuPFzCNVpB4LGicO4/OGgHv.uKHkwsS", + ), + ( + b"dEe6XfVGrrfSH", + b"$2a$04$2Siw3Nv3Q/gTOIPetAyPr.GNj3aO0lb1E5E9UumYGKjP9BYqlNWJe", + ), + ( + b"cTT0EAFdwJiLn", + b"$2a$04$7/Qj7Kd8BcSahPO4khB8me4ssDJCW3r4OGYqPF87jxtrSyPj5cS5m", + ), + ( + b"J8eHUDuxBB520", + b"$2a$04$VvlCUKbTMjaxaYJ.k5juoecpG/7IzcH1AkmqKi.lIZMVIOLClWAk.", + ), ]) def test_hashpw_existing(password, hashed): assert bcrypt.hashpw(password, hashed) == hashed @@ -110,9 +252,15 @@ def test_hashpw_invalid(): def test_hashpw_str_password(): with pytest.raises(TypeError): - bcrypt.hashpw(six.text_type("password"), b"$2a$04$cVWp4XaNU8a4v1uMRum2SO") + bcrypt.hashpw( + six.text_type("password"), + b"$2a$04$cVWp4XaNU8a4v1uMRum2SO", + ) def test_hashpw_str_salt(): with pytest.raises(TypeError): - bcrypt.hashpw(b"password", six.text_type("$2a$04$cVWp4XaNU8a4v1uMRum2SO")) + bcrypt.hashpw( + b"password", + six.text_type("$2a$04$cVWp4XaNU8a4v1uMRum2SO"), + ) @@ -1,5 +1,5 @@ [tox] -envlist = py26,py27,pypy,py32,py33,py34 +envlist = py26,py27,pypy,py32,py33,py34,pep8,py3pep8 [testenv] # If you add a new dep here you probably need to add it in setup.py as well @@ -8,3 +8,25 @@ deps = pytest commands = py.test --strict {posargs} + +[testenv:pep8] +deps = + flake8 + flake8-import-order + pep8-naming +commands = + flake8 . + +[testenv:py3pep8] +basepython = python3.3 +deps = + flake8 + flake8-import-order + pep8-naming +commands = + flake8 . + +[flake8] +exclude = .tox,*.egg +select = E,W,F,N,I +application-import-names = bcrypt,tests |