mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-05 18:23:03 +01:00
Merge #12987: tests/tools: Enable additional Python flake8 rules for automatic linting via Travis
643aad17faEnable additional flake8 rules (practicalswift)f020aca297Minor Python cleanups to make flake8 pass with the new rules enabled (practicalswift) Pull request description: Enabled rules: ``` * E242: tab after ',' * E266: too many leading '#' for block comment * E401: multiple imports on one line * E402: module level import not at top of file * E701: multiple statements on one line (colon) * E901: SyntaxError: invalid syntax * E902: TokenError: EOF in multi-line string * F821: undefined name 'Foo' * W293: blank line contains whitespace * W606: 'async' and 'await' are reserved keywords starting with Python 3.7 ``` Note to reviewers: * In general we don't allow whitespace cleanups to existing code, but in order to allow for enabling Travis checking for these rules a few smaller whitespace cleanups had to made as part of this PR. * Use [this `?w=1` link](https://github.com/bitcoin/bitcoin/pull/12987/files?w=1) to show a diff without whitespace changes. Before this commit: ``` $ flake8 -qq --statistics --ignore=B,C,E,F,I,N,W --select=E112,E113,E115,E116,E125,E131,E133,E223,E224,E242,E266,E271,E272,E273,E274,E275,E304,E306,E401,E402,E502,E701,E702,E703,E714,E721,E741,E742,E743,F401,E901,E902,F402,F404,F406,F407,F601,F602,F621,F622,F631,F701,F702,F703,F704,F705,F706,F707,F811,F812,F821,F822,F823,F831,F841,W292,W293,W504,W601,W602,W603,W604,W605,W606 . 5 E266 too many leading '#' for block comment 4 E401 multiple imports on one line 6 E402 module level import not at top of file 5 E701 multiple statements on one line (colon) 1 F812 list comprehension redefines 'n' from line 159 4 F821 undefined name 'ConnectionRefusedError' 28 W293 blank line contains whitespace ``` After this commit: ``` $ flake8 -qq --statistics --ignore=B,C,E,F,I,N,W --select=E112,E113,E115,E116,E125,E131,E133,E223,E224,E242,E266,E271,E272,E273,E274,E275,E304,E306,E401,E402,E502,E701,E702,E703,E714,E721,E741,E742,E743,F401,E901,E902,F402,F404,F406,F407,F601,F602,F621,F622,F631,F701,F702,F703,F704,F705,F706,F707,F811,F812,F821,F822,F823,F831,F841,W292,W293,W504,W601,W602,W603,W604,W605,W606 . $ ``` Tree-SHA512: fc7d5e752298a50d4248afc620ee2c173135b4ca008e48e02913ac968e5a24a5fd5396926047ec62f1d580d537434ccae01f249bb2f3338fa59dc630bf97ca7a
This commit is contained in:
@@ -21,7 +21,8 @@ import argparse
|
|||||||
import hashlib
|
import hashlib
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import json,codecs
|
import json
|
||||||
|
import codecs
|
||||||
try:
|
try:
|
||||||
from urllib.request import Request,urlopen
|
from urllib.request import Request,urlopen
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -15,6 +15,8 @@
|
|||||||
# E133 closing bracket is missing indentation
|
# E133 closing bracket is missing indentation
|
||||||
# E223 tab before operator
|
# E223 tab before operator
|
||||||
# E224 tab after operator
|
# E224 tab after operator
|
||||||
|
# E242 tab after ','
|
||||||
|
# E266 too many leading '#' for block comment
|
||||||
# E271 multiple spaces after keyword
|
# E271 multiple spaces after keyword
|
||||||
# E272 multiple spaces before keyword
|
# E272 multiple spaces before keyword
|
||||||
# E273 tab after keyword
|
# E273 tab after keyword
|
||||||
@@ -22,7 +24,10 @@
|
|||||||
# E275 missing whitespace after keyword
|
# E275 missing whitespace after keyword
|
||||||
# E304 blank lines found after function decorator
|
# E304 blank lines found after function decorator
|
||||||
# E306 expected 1 blank line before a nested definition
|
# E306 expected 1 blank line before a nested definition
|
||||||
|
# E401 multiple imports on one line
|
||||||
|
# E402 module level import not at top of file
|
||||||
# E502 the backslash is redundant between brackets
|
# E502 the backslash is redundant between brackets
|
||||||
|
# E701 multiple statements on one line (colon)
|
||||||
# E702 multiple statements on one line (semicolon)
|
# E702 multiple statements on one line (semicolon)
|
||||||
# E703 statement ends with a semicolon
|
# E703 statement ends with a semicolon
|
||||||
# E714 test for object identity should be "is not"
|
# E714 test for object identity should be "is not"
|
||||||
@@ -30,6 +35,8 @@
|
|||||||
# E741 do not use variables named "l", "O", or "I"
|
# E741 do not use variables named "l", "O", or "I"
|
||||||
# E742 do not define classes named "l", "O", or "I"
|
# E742 do not define classes named "l", "O", or "I"
|
||||||
# E743 do not define functions named "l", "O", or "I"
|
# E743 do not define functions named "l", "O", or "I"
|
||||||
|
# E901 SyntaxError: invalid syntax
|
||||||
|
# E902 TokenError: EOF in multi-line string
|
||||||
# F401 module imported but unused
|
# F401 module imported but unused
|
||||||
# F402 import module from line N shadowed by loop variable
|
# F402 import module from line N shadowed by loop variable
|
||||||
# F404 future import(s) name after other statements
|
# F404 future import(s) name after other statements
|
||||||
@@ -49,16 +56,19 @@
|
|||||||
# F707 an except: block as not the last exception handler
|
# F707 an except: block as not the last exception handler
|
||||||
# F811 redefinition of unused name from line N
|
# F811 redefinition of unused name from line N
|
||||||
# F812 list comprehension redefines 'foo' from line N
|
# F812 list comprehension redefines 'foo' from line N
|
||||||
|
# F821 undefined name 'Foo'
|
||||||
# F822 undefined name name in __all__
|
# F822 undefined name name in __all__
|
||||||
# F823 local variable name … referenced before assignment
|
# F823 local variable name … referenced before assignment
|
||||||
# F831 duplicate argument name in function definition
|
# F831 duplicate argument name in function definition
|
||||||
# F841 local variable 'foo' is assigned to but never used
|
# F841 local variable 'foo' is assigned to but never used
|
||||||
# W292 no newline at end of file
|
# W292 no newline at end of file
|
||||||
|
# W293 blank line contains whitespace
|
||||||
# W504 line break after binary operator
|
# W504 line break after binary operator
|
||||||
# W601 .has_key() is deprecated, use "in"
|
# W601 .has_key() is deprecated, use "in"
|
||||||
# W602 deprecated form of raising exception
|
# W602 deprecated form of raising exception
|
||||||
# W603 "<>" is deprecated, use "!="
|
# W603 "<>" is deprecated, use "!="
|
||||||
# W604 backticks are deprecated, use "repr()"
|
# W604 backticks are deprecated, use "repr()"
|
||||||
# W605 invalid escape sequence "x"
|
# W605 invalid escape sequence "x"
|
||||||
|
# W606 'async' and 'await' are reserved keywords starting with Python 3.7
|
||||||
|
|
||||||
flake8 --ignore=B,C,E,F,I,N,W --select=E112,E113,E115,E116,E125,E131,E133,E223,E224,E271,E272,E273,E274,E275,E304,E306,E502,E702,E703,E714,E721,E741,E742,E743,F401,F402,F404,F406,F407,F601,F602,F621,F622,F631,F701,F702,F703,F704,F705,F706,F707,F811,F812,F822,F823,F831,F841,W292,W504,W601,W602,W603,W604,W605 .
|
flake8 --ignore=B,C,E,F,I,N,W --select=E112,E113,E115,E116,E125,E131,E133,E223,E224,E242,E266,E271,E272,E273,E274,E275,E304,E306,E401,E402,E502,E701,E702,E703,E714,E721,E741,E742,E743,F401,E901,E902,F402,F404,F406,F407,F601,F602,F621,F622,F631,F701,F702,F703,F704,F705,F706,F707,F811,F812,F821,F822,F823,F831,F841,W292,W293,W504,W601,W602,W603,W604,W605,W606 .
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ from binascii import hexlify, unhexlify
|
|||||||
|
|
||||||
settings = {}
|
settings = {}
|
||||||
|
|
||||||
##### Switch endian-ness #####
|
|
||||||
def hex_switchEndian(s):
|
def hex_switchEndian(s):
|
||||||
""" Switches the endianness of a hex string (in pairs of hex chars) """
|
""" Switches the endianness of a hex string (in pairs of hex chars) """
|
||||||
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]
|
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ import os.path
|
|||||||
|
|
||||||
settings = {}
|
settings = {}
|
||||||
|
|
||||||
##### Switch endian-ness #####
|
|
||||||
def hex_switchEndian(s):
|
def hex_switchEndian(s):
|
||||||
""" Switches the endianness of a hex string (in pairs of hex chars) """
|
""" Switches the endianness of a hex string (in pairs of hex chars) """
|
||||||
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]
|
pairList = [s[i:i+2].encode() for i in range(0, len(s), 2)]
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ These should be pasted into `src/chainparamsseeds.h`.
|
|||||||
|
|
||||||
from base64 import b32decode
|
from base64 import b32decode
|
||||||
from binascii import a2b_hex
|
from binascii import a2b_hex
|
||||||
import sys, os
|
import sys
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
# ipv4 in ipv6 prefix
|
# ipv4 in ipv6 prefix
|
||||||
@@ -46,7 +47,7 @@ def name_to_ipv6(addr):
|
|||||||
if len(addr)>6 and addr.endswith('.onion'):
|
if len(addr)>6 and addr.endswith('.onion'):
|
||||||
vchAddr = b32decode(addr[0:-6], True)
|
vchAddr = b32decode(addr[0:-6], True)
|
||||||
if len(vchAddr) != 16-len(pchOnionCat):
|
if len(vchAddr) != 16-len(pchOnionCat):
|
||||||
raise ValueError('Invalid onion %s' % s)
|
raise ValueError('Invalid onion %s' % vchAddr)
|
||||||
return pchOnionCat + vchAddr
|
return pchOnionCat + vchAddr
|
||||||
elif '.' in addr: # IPv4
|
elif '.' in addr: # IPv4
|
||||||
return pchIPv4 + bytearray((int(x) for x in addr.split('.')))
|
return pchIPv4 + bytearray((int(x) for x in addr.split('.')))
|
||||||
|
|||||||
@@ -6,6 +6,11 @@
|
|||||||
# Generate seeds.txt from Pieter's DNS seeder
|
# Generate seeds.txt from Pieter's DNS seeder
|
||||||
#
|
#
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import dns.resolver
|
||||||
|
import collections
|
||||||
|
|
||||||
NSEEDS=512
|
NSEEDS=512
|
||||||
|
|
||||||
MAX_SEEDS_PER_ASN=2
|
MAX_SEEDS_PER_ASN=2
|
||||||
@@ -22,11 +27,6 @@ SUSPICIOUS_HOSTS = {
|
|||||||
"54.94.195.96", "54.94.200.247"
|
"54.94.195.96", "54.94.200.247"
|
||||||
}
|
}
|
||||||
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import dns.resolver
|
|
||||||
import collections
|
|
||||||
|
|
||||||
PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$")
|
PATTERN_IPV4 = re.compile(r"^((\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})):(\d+)$")
|
||||||
PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$")
|
PATTERN_IPV6 = re.compile(r"^\[([0-9a-z:]+)\]:(\d+)$")
|
||||||
PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$")
|
PATTERN_ONION = re.compile(r"^([abcdefghijklmnopqrstuvwxyz234567]{16}\.onion):(\d+)$")
|
||||||
|
|||||||
@@ -43,8 +43,10 @@ def b58encode(v):
|
|||||||
# leading 0-bytes in the input become leading-1s
|
# leading 0-bytes in the input become leading-1s
|
||||||
nPad = 0
|
nPad = 0
|
||||||
for c in v:
|
for c in v:
|
||||||
if c == 0: nPad += 1
|
if c == 0:
|
||||||
else: break
|
nPad += 1
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
|
||||||
return (__b58chars[0]*nPad) + result
|
return (__b58chars[0]*nPad) + result
|
||||||
|
|
||||||
@@ -98,7 +100,8 @@ def b58decode_chk(v):
|
|||||||
def get_bcaddress_version(strAddress):
|
def get_bcaddress_version(strAddress):
|
||||||
""" Returns None if strAddress is invalid. Otherwise returns integer version of address. """
|
""" Returns None if strAddress is invalid. Otherwise returns integer version of address. """
|
||||||
addr = b58decode_chk(strAddress)
|
addr = b58decode_chk(strAddress)
|
||||||
if addr is None or len(addr)!=21: return None
|
if addr is None or len(addr)!=21:
|
||||||
|
return None
|
||||||
version = addr[0]
|
version = addr[0]
|
||||||
return ord(version)
|
return ord(version)
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ def gen_invalid_vectors():
|
|||||||
yield val,
|
yield val,
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import sys, json
|
import sys
|
||||||
|
import json
|
||||||
iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors}
|
iters = {'valid':gen_valid_vectors, 'invalid':gen_invalid_vectors}
|
||||||
try:
|
try:
|
||||||
uiter = iters[sys.argv[1]]
|
uiter = iters[sys.argv[1]]
|
||||||
|
|||||||
@@ -186,10 +186,10 @@ class RESTTest (BitcoinTestFramework):
|
|||||||
self.test_rest_request("/getutxos/checkmempool", http_method='POST', req_type=ReqType.JSON, status=400, ret_type=RetType.OBJ)
|
self.test_rest_request("/getutxos/checkmempool", http_method='POST', req_type=ReqType.JSON, status=400, ret_type=RetType.OBJ)
|
||||||
|
|
||||||
# Test limits
|
# Test limits
|
||||||
long_uri = '/'.join(["{}-{}".format(txid, n) for n in range(20)])
|
long_uri = '/'.join(["{}-{}".format(txid, n_) for n_ in range(20)])
|
||||||
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=400, ret_type=RetType.OBJ)
|
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=400, ret_type=RetType.OBJ)
|
||||||
|
|
||||||
long_uri = '/'.join(['{}-{}'.format(txid, n) for n in range(15)])
|
long_uri = '/'.join(['{}-{}'.format(txid, n_) for n_ in range(15)])
|
||||||
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=200)
|
self.test_rest_request("/getutxos/checkmempool/{}".format(long_uri), http_method='POST', status=200)
|
||||||
|
|
||||||
self.nodes[0].generate(1) # generate block to not affect upcoming tests
|
self.nodes[0].generate(1) # generate block to not affect upcoming tests
|
||||||
|
|||||||
@@ -4,12 +4,14 @@
|
|||||||
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
"""Dummy Socks5 server for testing."""
|
"""Dummy Socks5 server for testing."""
|
||||||
|
|
||||||
import socket, threading, queue
|
import socket
|
||||||
|
import threading
|
||||||
|
import queue
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger("TestFramework.socks5")
|
logger = logging.getLogger("TestFramework.socks5")
|
||||||
|
|
||||||
### Protocol constants
|
# Protocol constants
|
||||||
class Command:
|
class Command:
|
||||||
CONNECT = 0x01
|
CONNECT = 0x01
|
||||||
|
|
||||||
@@ -18,7 +20,7 @@ class AddressType:
|
|||||||
DOMAINNAME = 0x03
|
DOMAINNAME = 0x03
|
||||||
IPV6 = 0x04
|
IPV6 = 0x04
|
||||||
|
|
||||||
### Utility functions
|
# Utility functions
|
||||||
def recvall(s, n):
|
def recvall(s, n):
|
||||||
"""Receive n bytes from a socket, or fail."""
|
"""Receive n bytes from a socket, or fail."""
|
||||||
rv = bytearray()
|
rv = bytearray()
|
||||||
@@ -30,7 +32,7 @@ def recvall(s, n):
|
|||||||
n -= len(d)
|
n -= len(d)
|
||||||
return rv
|
return rv
|
||||||
|
|
||||||
### Implementation classes
|
# Implementation classes
|
||||||
class Socks5Configuration():
|
class Socks5Configuration():
|
||||||
"""Proxy configuration."""
|
"""Proxy configuration."""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|||||||
@@ -92,7 +92,8 @@ class TxnMallTest(BitcoinTestFramework):
|
|||||||
# Node0's balance should be starting balance, plus 50BTC for another
|
# Node0's balance should be starting balance, plus 50BTC for another
|
||||||
# matured block, minus tx1 and tx2 amounts, and minus transaction fees:
|
# matured block, minus tx1 and tx2 amounts, and minus transaction fees:
|
||||||
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
|
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
|
||||||
if self.options.mine_block: expected += 50
|
if self.options.mine_block:
|
||||||
|
expected += 50
|
||||||
expected += tx1["amount"] + tx1["fee"]
|
expected += tx1["amount"] + tx1["fee"]
|
||||||
expected += tx2["amount"] + tx2["fee"]
|
expected += tx2["amount"] + tx2["fee"]
|
||||||
assert_equal(self.nodes[0].getbalance(), expected)
|
assert_equal(self.nodes[0].getbalance(), expected)
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ class TxnMallTest(BitcoinTestFramework):
|
|||||||
# Node0's balance should be starting balance, plus 50BTC for another
|
# Node0's balance should be starting balance, plus 50BTC for another
|
||||||
# matured block, minus 40, minus 20, and minus transaction fees:
|
# matured block, minus 40, minus 20, and minus transaction fees:
|
||||||
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
|
expected = starting_balance + fund_foo_tx["fee"] + fund_bar_tx["fee"]
|
||||||
if self.options.mine_block: expected += 50
|
if self.options.mine_block:
|
||||||
|
expected += 50
|
||||||
expected += tx1["amount"] + tx1["fee"]
|
expected += tx1["amount"] + tx1["fee"]
|
||||||
expected += tx2["amount"] + tx2["fee"]
|
expected += tx2["amount"] + tx2["fee"]
|
||||||
assert_equal(self.nodes[0].getbalance(), expected)
|
assert_equal(self.nodes[0].getbalance(), expected)
|
||||||
|
|||||||
Reference in New Issue
Block a user