diff --git a/dev/powinterrupttest.py b/dev/powinterrupttest.py index bfb55d786..fb7b1c05f 100644 --- a/dev/powinterrupttest.py +++ b/dev/powinterrupttest.py @@ -1,3 +1,6 @@ +""" +Code for discovering how C PoW can be interrupted +""" import ctypes import hashlib from multiprocessing import current_process @@ -9,9 +12,12 @@ shutdown = 0 -def signal_handler(signal, frame): - global shutdown - print("Got signal %i in %s/%s" % (signal, current_process().name, current_thread().name)) +# pylint: disable=unused-argument +def signal_handler(signum, frame): + """Signal handler""" + global shutdown # pylint: disable=global-statement + print("Got signal %i in %s/%s" % (signum, current_process().name, + current_thread().name)) if current_process().name != "MainProcess": raise StopIteration("Interrupted") if current_thread().name != "PyBitmessage": @@ -31,7 +37,12 @@ def _doCPoW(target, initialHash): nonce = bmpow(out_h, out_m) if shutdown: break - trialValue, = unpack('>Q', hashlib.sha512(hashlib.sha512(pack('>Q', nonce) + initialHash).digest()).digest()[0:8]) + trialValue, = unpack('>Q', + hashlib.sha512( + hashlib.sha512( + pack('>Q', nonce) + initialHash). + digest()). + digest()[0:8]) if shutdown != 0: raise StopIteration("Interrupted") print("C PoW done") diff --git a/dev/ssltest.py b/dev/ssltest.py index 7268b65fc..b485aa079 100644 --- a/dev/ssltest.py +++ b/dev/ssltest.py @@ -1,3 +1,6 @@ +""" +Development code for SSL compatibility investigations +""" import os import select import socket @@ -9,8 +12,12 @@ PORT = 8912 +# pylint: disable=no-member def sslProtocolVersion(): - # sslProtocolVersion + """ + Find a protocol version value with compatibility across + different python versions + """ if sys.version_info >= (2, 7, 13): # this means TLSv1 or higher # in the future change to @@ -26,18 +33,30 @@ def sslProtocolVersion(): def sslProtocolCiphers(): + """ + Find protocol cipher that is compatible for PyBitmessage across + different python and OpenSSL versions + """ if ssl.OPENSSL_VERSION_NUMBER >= 0x10100000: return "AECDH-AES256-SHA@SECLEVEL=0" else: return "AECDH-AES256-SHA" +# pylint: disable=redefined-outer-name def connect(): + """ + Connect a socket + """ sock = socket.create_connection((HOST, PORT)) return sock +# pylint: disable=redefined-outer-name def listen(): + """ + Listen on a socket + """ sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) sock.bind((HOST, PORT)) @@ -45,7 +64,11 @@ def listen(): return sock +# pylint: disable=redefined-outer-name def sslHandshake(sock, server=False): + """ + Perform SSL handshake + """ if sys.version_info >= (2, 7, 9): context = ssl.SSLContext(sslProtocolVersion()) context.set_ciphers(sslProtocolCiphers()) @@ -54,12 +77,19 @@ def sslHandshake(sock, server=False): context.verify_mode = ssl.CERT_NONE context.options = ssl.OP_ALL | ssl.OP_NO_SSLv2 | ssl.OP_NO_SSLv3\ | ssl.OP_SINGLE_ECDH_USE | ssl.OP_CIPHER_SERVER_PREFERENCE - sslSock = context.wrap_socket(sock, server_side=server, do_handshake_on_connect=False) + sslSock = context.wrap_socket(sock, server_side=server, + do_handshake_on_connect=False) else: - sslSock = ssl.wrap_socket(sock, keyfile=os.path.join('src', 'sslkeys', 'key.pem'), - certfile=os.path.join('src', 'sslkeys', 'cert.pem'), - server_side=server, ssl_version=sslProtocolVersion(), - do_handshake_on_connect=False, ciphers='AECDH-AES256-SHA') + sslSock = ssl.wrap_socket(sock, keyfile=os.path.join('src', + 'sslkeys', + 'key.pem'), + certfile=os.path.join('src', + 'sslkeys', + 'cert.pem'), + server_side=server, + ssl_version=sslProtocolVersion(), + do_handshake_on_connect=False, + ciphers='AECDH-AES256-SHA') while True: try: diff --git a/docs/conf.py b/docs/conf.py index 84e51deab..eeff353b9 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,9 +13,9 @@ sys.path.insert(0, os.path.abspath('../src')) -from importlib import import_module +from importlib import import_module # pylint: disable=wrong-import-position -import version # noqa:E402 +import version # noqa:E402 pylint: disable=wrong-import-position # -- Project information ----------------------------------------------------- diff --git a/packages/collectd/pybitmessagestatus.py b/packages/collectd/pybitmessagestatus.py index 1007b017b..0edb9d093 100644 --- a/packages/collectd/pybitmessagestatus.py +++ b/packages/collectd/pybitmessagestatus.py @@ -1,22 +1,33 @@ #!/usr/bin/env python2.7 +""" +PyBitmessage status module for collectd +Provides values for active connections and processed objects +""" import json -import collectd +import collectd # pylint: disable=import-error from six.moves import xmlrpc_client as xmlrpclib pybmurl = "" -api = "" +api = None def init_callback(): - global api + """ + Initialise callback + Creates an API object + """ + global api # pylint: disable=global-statement api = xmlrpclib.ServerProxy(pybmurl) collectd.info('pybitmessagestatus.py init done') def config_callback(ObjConfiguration): - global pybmurl + """ + Load module config + """ + global pybmurl # pylint: disable=global-statement apiUsername = "" apiPassword = "" apiInterface = "127.0.0.1" @@ -31,11 +42,17 @@ def config_callback(ObjConfiguration): apiInterface = node.values[0] elif key.lower() == "apiport" and node.values: apiPort = node.values[0] - pybmurl = "http://{}:{}@{}:{}/".format(apiUsername, apiPassword, apiInterface, str(int(apiPort))) + pybmurl = "http://{}:{}@{}:{}/".format(apiUsername, + apiPassword, + apiInterface, + str(int(apiPort))) collectd.info('pybitmessagestatus.py config done') def read_callback(): + """ + Read data from API + """ try: clientStatus = json.loads(api.clientStatus()) except (ValueError, TypeError): diff --git a/packages/pyinstaller/hooks/pyinstaller_rthook_plugins.py b/packages/pyinstaller/hooks/pyinstaller_rthook_plugins.py index e796c1f54..470998b4c 100644 --- a/packages/pyinstaller/hooks/pyinstaller_rthook_plugins.py +++ b/packages/pyinstaller/hooks/pyinstaller_rthook_plugins.py @@ -1,5 +1,6 @@ """Runtime PyInstaller hook to load plugins""" +# pylint: disable=unused-import import os import sys diff --git a/setup.cfg b/setup.cfg index 83d40e9f6..ad78a432e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -26,3 +26,4 @@ max-attributes = 8 [MASTER] init-hook = import sys;sys.path.append('src') +ignore = bitmessagekivy diff --git a/src/bitmessagecurses/__init__.py b/src/bitmessagecurses/__init__.py index d9a75a97d..edaf6b905 100644 --- a/src/bitmessagecurses/__init__.py +++ b/src/bitmessagecurses/__init__.py @@ -10,6 +10,7 @@ # * python2-pythondialog # * dialog +# pylint: disable=global-statement,too-many-lines,no-member import ConfigParser import curses import os @@ -18,7 +19,7 @@ from textwrap import fill from threading import Timer -from dialog import Dialog +from dialog import Dialog # pylint: disable=import-error import helper_sent import l10n import network.stats @@ -31,8 +32,6 @@ from bmconfigparser import config from helper_sql import sqlExecute, sqlQuery -# pylint: disable=global-statement - quit_ = False menutab = 1 @@ -259,7 +258,7 @@ def drawtab(stdscr): stdscr.addstr(6, 18, "Connections", curses.A_BOLD) stdscr.hline(7, 6, '-', 23) streamcount = [] - for host, stream in connected_hosts: + for _, stream in connected_hosts: if stream >= len(streamcount): streamcount.append(1) else: @@ -984,7 +983,7 @@ def loadInbox(): """Load the list of messages""" sys.stdout = sys.__stdout__ print("Loading inbox messages...") - sys.stdout = printlog + sys.stdout = printlog # pylint: disable=redefined-variable-type where = "toaddress || fromaddress || subject || message" what = "%%" @@ -1037,7 +1036,7 @@ def loadSent(): """Load the messages that sent""" sys.stdout = sys.__stdout__ print("Loading sent messages...") - sys.stdout = printlog + sys.stdout = printlog # pylint: disable=redefined-variable-type where = "toaddress || fromaddress || subject || message" what = "%%" @@ -1123,7 +1122,7 @@ def loadAddrBook(): """Load address book""" sys.stdout = sys.__stdout__ print("Loading address book...") - sys.stdout = printlog + sys.stdout = printlog # pylint: disable=redefined-variable-type ret = sqlQuery("SELECT label, address FROM addressbook") for row in ret: @@ -1230,7 +1229,7 @@ def doShutdown(): """Shutting the app down""" sys.stdout = sys.__stdout__ print("Shutting down...") - sys.stdout = printlog + sys.stdout = printlog # pylint: disable=redefined-variable-type shutdown.doCleanShutdown() sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__ diff --git a/src/bitmessagekivy/base_navigation.py b/src/bitmessagekivy/base_navigation.py index 5f6b1aa52..25ec3d13d 100644 --- a/src/bitmessagekivy/base_navigation.py +++ b/src/bitmessagekivy/base_navigation.py @@ -1,4 +1,5 @@ -# pylint: disable=unused-argument, no-name-in-module, too-few-public-methods +# pylint: disable=unused-argument,no-name-in-module,too-few-public-methods +# pylint: disable=import-error """ Base class for Navigation Drawer """ diff --git a/src/bitmessagekivy/baseclass/addressbook.py b/src/bitmessagekivy/baseclass/addressbook.py index b25f06136..d4267e3b3 100644 --- a/src/bitmessagekivy/baseclass/addressbook.py +++ b/src/bitmessagekivy/baseclass/addressbook.py @@ -83,6 +83,7 @@ def set_mdList(self, start_index, end_index): listItem.secondary_text = item[1] listItem.theme_text_color = "Custom" listItem.text_color = ThemeClsColor + # pylint: disable=syntax-error image = os.path.join( self.kivy_state.image_dir, "text_images", f"{avatar_image_first_letter(item[0].strip())}.png" # noqa: E999 diff --git a/src/bitmessagekivy/baseclass/addressbook_widgets.py b/src/bitmessagekivy/baseclass/addressbook_widgets.py index 7c2872ffa..0a6b10de6 100644 --- a/src/bitmessagekivy/baseclass/addressbook_widgets.py +++ b/src/bitmessagekivy/baseclass/addressbook_widgets.py @@ -1,4 +1,5 @@ -# pylint: disable=no-member, too-many-arguments, too-few-public-methods, no-init +# pylint: disable=no-member,too-many-arguments,too-few-public-methods +# pylint: disable=no-init,import-error """Addressbook widgets are here.""" diff --git a/src/bitmessagekivy/baseclass/common.py b/src/bitmessagekivy/baseclass/common.py index cd0d2d7a9..8dd722ff1 100644 --- a/src/bitmessagekivy/baseclass/common.py +++ b/src/bitmessagekivy/baseclass/common.py @@ -1,5 +1,6 @@ -# pylint: disable=no-name-in-module, attribute-defined-outside-init, import-error, unused-argument -# pylint: disable=no-init, too-few-public-methods, useless-object-inheritance +# pylint: disable=no-name-in-module,attribute-defined-outside-init +# pylint: disable=import-error,unused-argument +# pylint: disable=no-init,too-few-public-methods,useless-object-inheritance """ All Common widgets of kivy are managed here. diff --git a/tox.ini b/tox.ini index 2df0a9d5c..2a2593c3c 100644 --- a/tox.ini +++ b/tox.ini @@ -100,7 +100,7 @@ basepython = python2.7 deps = -rrequirements.txt pylint<2.0.0 -commands = pylint --rcfile=tox.ini --exit-zero pybitmessage +commands = pylint --rcfile=tox.ini --exit-zero --ignore=bitmessagekivy pybitmessage [testenv:py27] sitepackages = true