From afb368e7706f4af9394d1311da6dcd078ebb78b9 Mon Sep 17 00:00:00 2001 From: "jai.s" Date: Thu, 26 Sep 2019 19:38:19 +0530 Subject: [PATCH] initial commit for python forward porting --- src/addresses.py | 6 +-- src/bitmessagekivy/mpybit.py | 1 + src/bitmessagemain.py | 37 +++++++++---------- src/bitmessageqt/statusbar.py | 2 +- src/bmconfigparser.py | 59 +++++++++++++++++------------- src/class_objectProcessorQueue.py | 2 +- src/class_sqlThread.py | 12 +++--- src/debug.py | 7 ++-- src/depends.py | 10 ++--- src/helper_bitcoin.py | 6 ++- src/helper_sql.py | 2 +- src/helper_startup.py | 9 +++-- src/highlevelcrypto.py | 3 +- src/knownnodes.py | 7 ++-- src/l10n.py | 24 ++++++++---- src/messagetypes/__init__.py | 2 +- src/multiqueue.py | 2 +- src/network/addrthread.py | 2 +- src/network/advanceddispatcher.py | 5 ++- src/network/asyncore_pollchoose.py | 7 ++-- src/network/bmproto.py | 6 +-- src/network/connectionpool.py | 13 +++---- src/network/dandelion.py | 2 +- src/network/downloadthread.py | 4 +- src/network/http.py | 2 +- src/network/invthread.py | 2 +- src/network/objectracker.py | 2 +- src/network/proxy.py | 4 +- src/network/randomtrackingdict.py | 10 ++--- src/network/receivequeuethread.py | 2 +- src/network/socks4a.py | 4 +- src/network/socks5.py | 4 +- src/network/stats.py | 2 +- src/network/tcp.py | 4 +- src/network/tls.py | 7 +++- src/network/udp.py | 4 +- src/network/uploadthread.py | 2 +- src/openclpow.py | 5 ++- src/pyelliptic/arithmetic.py | 4 +- src/pyelliptic/cipher.py | 2 +- src/pyelliptic/ecc.py | 9 +++-- src/pyelliptic/hash.py | 2 +- src/pyelliptic/openssl.py | 5 ++- src/queues.py | 2 +- src/shared.py | 9 ++--- src/shutdown.py | 2 +- src/singleinstance.py | 6 +-- src/storage/filesystem.py | 4 +- src/storage/sqlite.py | 1 + src/suravata.py | 32 ---------------- src/tests/core.py | 2 +- src/tr.py | 6 +-- 52 files changed, 187 insertions(+), 183 deletions(-) delete mode 100644 src/suravata.py diff --git a/src/addresses.py b/src/addresses.py index 533ec169..4d200332 100644 --- a/src/addresses.py +++ b/src/addresses.py @@ -180,7 +180,6 @@ def decodeAddress(address): data (almost certainly a ripe hash)) """ # pylint: disable=too-many-return-statements,too-many-statements,too-many-return-statements,too-many-branches - address = str(address).strip() if address[:3] == 'BM-': @@ -192,7 +191,8 @@ def decodeAddress(address): return status, 0, 0, '' # after converting to hex, the string will be prepended # with a 0x and appended with a L - hexdata = hex(integer)[2:-1] + # import pdb;pdb.set_trace() + hexdata = hex(integer)[2:] if len(hexdata) % 2 != 0: hexdata = '0' + hexdata @@ -248,7 +248,7 @@ def decodeAddress(address): embeddedRipeData elif len(embeddedRipeData) == 18: return status, addressVersionNumber, streamNumber, \ - '\x00\x00' + embeddedRipeData + '\x00\x00'.encode('utf-8') + embeddedRipeData elif len(embeddedRipeData) < 18: return 'ripetooshort', 0, 0, '' elif len(embeddedRipeData) > 20: diff --git a/src/bitmessagekivy/mpybit.py b/src/bitmessagekivy/mpybit.py index 39005727..70f51b29 100644 --- a/src/bitmessagekivy/mpybit.py +++ b/src/bitmessagekivy/mpybit.py @@ -984,6 +984,7 @@ class NavigateApp(App): # pylint: disable=too-many-public-methods def build(self): """Method builds the widget.""" + import os main_widget = Builder.load_file( os.path.join(os.path.dirname(__file__), 'main.kv')) self.nav_drawer = Navigatorss() diff --git a/src/bitmessagemain.py b/src/bitmessagemain.py index ee4b7eb9..e066dd06 100755 --- a/src/bitmessagemain.py +++ b/src/bitmessagemain.py @@ -179,13 +179,13 @@ def signal_handler(signum, frame): if shared.thisapp.daemon or not state.enableGUI: shutdown.doCleanShutdown() else: - print '# Thread: %s(%d)' % (thread.name, thread.ident) + print ('# Thread: {}({})'.format(thread.name, thread.ident)) for filename, lineno, name, line in traceback.extract_stack(frame): - print 'File: "%s", line %d, in %s' % (filename, lineno, name) + print ("File: '{}', line {}, in {}" .format(filename, lineno, name)) if line: - print ' %s' % line.strip() - print 'Unfortunately you cannot use Ctrl+C when running the UI \ - because the UI captures the signal.' + print (' {}'.format(line.strip())) + print('Unfortunately you cannot use Ctrl+C when running the UI \ + because the UI captures the signal.') class Main: # pylint: disable=no-init, old-style-class @@ -282,7 +282,7 @@ class Main: # pylint: disable=no-init, old-style-class if daemon: with shared.printLock: - print 'Running as a daemon. Send TERM signal to end.' + print('Running as a daemon. Send TERM signal to end.') self.daemonize() self.setSignalHandler() @@ -405,7 +405,7 @@ class Main: # pylint: disable=no-init, old-style-class if state.curses: if not depends.check_curses(): sys.exit() - print 'Running with curses' + print('Running with curses') import bitmessagecurses bitmessagecurses.runwrapper() @@ -498,23 +498,22 @@ class Main: # pylint: disable=no-init, old-style-class # signal.signal(signal.SIGINT, signal.SIG_DFL) @staticmethod - def usage(): - """After passing argument, method displays the usages""" - print 'Usage: ' + sys.argv[0] + ' [OPTIONS]' - print ''' -Options: - -h, --help show this help message and exit - -c, --curses use curses (text mode) interface - -d, --daemon run in daemon (background) mode - -t, --test dryrun, make testing + def usage(self): + print('Usage: ' + sys.argv[0] + ' [OPTIONS]') + print (''' + Options: + -h, --help show this help message and exit + -c, --curses use curses (text mode) interface + -d, --daemon run in daemon (background) mode + -t, --test dryrun, make testing -All parameters are optional. -''' + All parameters are optional. + ''') def stop(self): # pylint: disable=no-self-use """Method helps to stop the Bitmessage Deamon""" with shared.printLock: - print 'Stopping Bitmessage Deamon.' + print('Stopping Bitmessage Deamon.') shutdown.doCleanShutdown() # ..todo: nice function but no one is using this diff --git a/src/bitmessageqt/statusbar.py b/src/bitmessageqt/statusbar.py index 65a5acfb..7f559197 100644 --- a/src/bitmessageqt/statusbar.py +++ b/src/bitmessageqt/statusbar.py @@ -1,5 +1,5 @@ from PyQt4 import QtCore, QtGui -from Queue import Queue +from queue.Queue import Queue from time import time class BMStatusBar(QtGui.QStatusBar): diff --git a/src/bmconfigparser.py b/src/bmconfigparser.py index 726d32eb..6f5660e0 100644 --- a/src/bmconfigparser.py +++ b/src/bmconfigparser.py @@ -2,7 +2,7 @@ BMConfigParser class definition and default configuration settings """ -import ConfigParser +import configparser import shutil import os from datetime import datetime @@ -42,35 +42,35 @@ BMConfigDefaults = { @Singleton -class BMConfigParser(ConfigParser.SafeConfigParser): - """Singleton class inherited from ConfigParser.SafeConfigParser +class BMConfigParser(configparser.ConfigParser): + """Singleton class inherited from ConfigParsedadfeConfigParser with additional methods specific to bitmessage config.""" _temp = {} def set(self, section, option, value=None): if self._optcre is self.OPTCRE or value: - if not isinstance(value, basestring): + if not isinstance(value, str): raise TypeError("option values must be strings") if not self.validate(section, option, value): raise ValueError("Invalid value %s" % value) - return ConfigParser.ConfigParser.set(self, section, option, value) + return configparser.ConfigParser.set(self, section, option, value) def get(self, section, option, raw=False, variables=None): try: if section == "bitmessagesettings" and option == "timeformat": - return ConfigParser.ConfigParser.get( - self, section, option, raw, variables) + return configparser.ConfigParser.get( + self, section, option, raw=True, vars=variables) try: return self._temp[section][option] except KeyError: pass - return ConfigParser.ConfigParser.get( - self, section, option, True, variables) - except ConfigParser.InterpolationError: - return ConfigParser.ConfigParser.get( - self, section, option, True, variables) - except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e: + return configparser.ConfigParser.get( + self, section, option, raw=True, vars=variables) + except configparser.InterpolationError: + return configparser.ConfigParser.get( + self, section, option, raw=True, vars=variables) + except (configparser.NoSectionError, configparser.NoOptionError) as e: try: return BMConfigDefaults[section][option] except (KeyError, ValueError, AttributeError): @@ -84,49 +84,56 @@ class BMConfigParser(ConfigParser.SafeConfigParser): self._temp[section] = {option: value} def safeGetBoolean(self, section, field): + config = configparser.ConfigParser() try: - return self.getboolean(section, field) - except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, + #Used in the python2.7 + # return self.getboolean(section, field) + #Used in the python3.5.2 + return config.getboolean(section, field) + except (configparser.NoSectionError, configparser.NoOptionError, ValueError, AttributeError): return False def safeGetInt(self, section, field, default=0): + config = configparser.ConfigParser() try: - return self.getint(section, field) - except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, + #Used in the python2.7 + # return self.getint(section, field) + #Used in the python3.5.2 + return config.getint(section, field) + except (configparser.NoSectionError, configparser.NoOptionError, ValueError, AttributeError): return default def safeGet(self, section, option, default=None): try: return self.get(section, option) - except (ConfigParser.NoSectionError, ConfigParser.NoOptionError, + except (configparser.NoSectionError, configparser.NoOptionError, ValueError, AttributeError): return default def items(self, section, raw=False, variables=None): - return ConfigParser.ConfigParser.items(self, section, True, variables) + return configparser.ConfigParser.items(self, section, True, variables) def addresses(self): - return filter( - lambda x: x.startswith('BM-'), BMConfigParser().sections()) + return [x for x in BMConfigParser().sections() if x.startswith('BM-')] def read(self, filenames): - ConfigParser.ConfigParser.read(self, filenames) + configparser.ConfigParser.read(self, filenames) for section in self.sections(): for option in self.options(section): try: if not self.validate( section, option, - ConfigParser.ConfigParser.get(self, section, option) + configparser.ConfigParser.get(self, section, option) ): try: newVal = BMConfigDefaults[section][option] except KeyError: continue - ConfigParser.ConfigParser.set( + configparser.ConfigParser.set( self, section, option, newVal) - except ConfigParser.InterpolationError: + except configparser.InterpolationError: continue def save(self): @@ -144,7 +151,7 @@ class BMConfigParser(ConfigParser.SafeConfigParser): # didn't exist before. fileNameExisted = False # write the file - with open(fileName, 'wb') as configfile: + with open(fileName, 'w') as configfile: self.write(configfile) # delete the backup if fileNameExisted: diff --git a/src/class_objectProcessorQueue.py b/src/class_objectProcessorQueue.py index b6628816..24c24023 100644 --- a/src/class_objectProcessorQueue.py +++ b/src/class_objectProcessorQueue.py @@ -1,4 +1,4 @@ -import Queue +import queue as Queue import threading import time diff --git a/src/class_sqlThread.py b/src/class_sqlThread.py index a45571e0..bf0e67d9 100644 --- a/src/class_sqlThread.py +++ b/src/class_sqlThread.py @@ -51,8 +51,8 @@ class sqlThread(threading.Thread): '''INSERT INTO subscriptions VALUES('Bitmessage new releases/announcements','BM-GtovgYdgs7qXPkoYaRgrLFuFKz1SFpsw',1)''') self.cur.execute( '''CREATE TABLE settings (key blob, value blob, UNIQUE(key) ON CONFLICT REPLACE)''' ) - self.cur.execute( '''INSERT INTO settings VALUES('version','10')''') - self.cur.execute( '''INSERT INTO settings VALUES('lastvacuumtime',?)''', ( + self.cur.execute('''INSERT INTO settings VALUES('version','10')''') + self.cur.execute('''INSERT INTO settings VALUES('lastvacuumtime',?)''', ( int(time.time()),)) self.cur.execute( '''CREATE TABLE objectprocessorqueue (objecttype int, data blob, UNIQUE(objecttype, data) ON CONFLICT REPLACE)''' ) @@ -70,9 +70,11 @@ class sqlThread(threading.Thread): # If the settings version is equal to 2 or 3 then the # sqlThread will modify the pubkeys table and change # the settings version to 4. - settingsversion = BMConfigParser().getint( - 'bitmessagesettings', 'settingsversion') - + # settingsversion = BMConfigParser().getint('bitmessagesettings', 'settingsversion') + # In the Python3 I am below condition converting into int + # settingsversion = int(BMConfigParser().get('bitmessagesettings', 'settingsversion') \ + # if BMConfigParser().get('bitmessagesettings', 'settingsversion') else 0) + settingsversion = BMConfigParser().safeGetInt('bitmessagesettings', 'settingsvesion') # People running earlier versions of PyBitmessage do not have the # usedpersonally field in their pubkeys table. Let's add it. if settingsversion == 2: diff --git a/src/debug.py b/src/debug.py index 8393bb50..0caf1956 100644 --- a/src/debug.py +++ b/src/debug.py @@ -23,7 +23,7 @@ Use: `from debug import logger` to import this facility into whatever module you """ -import ConfigParser +import configparser import logging import logging.config import os @@ -47,12 +47,13 @@ def configureLogging(): fail_msg = '' try: logging_config = os.path.join(state.appdata, 'logging.dat') - logging.config.fileConfig(logging_config) + # right now I am commenting the logger + # logging.config.fileConfig(logging_config, disable_existing_loggers=False) return ( False, 'Loaded logger configuration from %s' % logging_config ) - except (OSError, ConfigParser.NoSectionError): + except (OSError, configparser.NoSectionError): if os.path.isfile(logging_config): fail_msg = \ 'Failed to load logger configuration from %s, using default' \ diff --git a/src/depends.py b/src/depends.py index dc35b529..b0d0beb4 100755 --- a/src/depends.py +++ b/src/depends.py @@ -419,11 +419,11 @@ def check_dependencies(verbose=False, optional=False): 'PyBitmessage requires Python 2.7.4 or greater' ' (but not Python 3+)') has_all_dependencies = False - if sys.hexversion >= 0x3000000: - logger.error( - 'PyBitmessage does not support Python 3+. Python 2.7.4' - ' or greater is required.') - has_all_dependencies = False + # if sys.hexversion >= 0x3000000: + # logger.error( + # 'PyBitmessage does not support Python 3+. Python 2.7.4' + # ' or greater is required.') + # has_all_dependencies = False check_functions = [check_ripemd160, check_sqlite, check_openssl] if optional: diff --git a/src/helper_bitcoin.py b/src/helper_bitcoin.py index d56e395b..b4f34cf1 100644 --- a/src/helper_bitcoin.py +++ b/src/helper_bitcoin.py @@ -4,7 +4,8 @@ from pyelliptic import arithmetic # This function expects that pubkey begin with \x04 def calculateBitcoinAddressFromPubkey(pubkey): if len(pubkey) != 65: - print 'Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was', len(pubkey), 'bytes long rather than 65.' + print ('Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was'\ + '{}, bytes long rather than 65.'.format(len(pubkey))) return "error" ripe = hashlib.new('ripemd160') sha = hashlib.new('sha256') @@ -25,7 +26,8 @@ def calculateBitcoinAddressFromPubkey(pubkey): def calculateTestnetAddressFromPubkey(pubkey): if len(pubkey) != 65: - print 'Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was', len(pubkey), 'bytes long rather than 65.' + print ('Could not calculate Bitcoin address from pubkey because function was passed a pubkey that was',\ + '{}, bytes long rather than 65.'.format(pubkey)) return "error" ripe = hashlib.new('ripemd160') sha = hashlib.new('sha256') diff --git a/src/helper_sql.py b/src/helper_sql.py index 2b558f62..8bf6ce4d 100644 --- a/src/helper_sql.py +++ b/src/helper_sql.py @@ -1,7 +1,7 @@ """Helper Sql performs sql operations.""" import threading -import Queue +import queue as Queue sqlSubmitQueue = Queue.Queue() # SQLITE3 is so thread-unsafe that they won't even let you call it from different threads using your own locks. diff --git a/src/helper_startup.py b/src/helper_startup.py index 5d1614c7..0d3523e3 100644 --- a/src/helper_startup.py +++ b/src/helper_startup.py @@ -7,7 +7,7 @@ Helper Start performs all the startup operations. # pylint: disable=too-many-branches,too-many-statements from __future__ import print_function -import ConfigParser +import configparser import os import platform import sys @@ -27,7 +27,7 @@ StoreConfigFilesInSameDirectoryAsProgramByDefault = False def _loadTrustedPeer(): try: trustedPeer = BMConfigParser().get('bitmessagesettings', 'trustedpeer') - except ConfigParser.Error: + except configparser.Error: # This probably means the trusted peer wasn't specified so we # can just leave it as None return @@ -137,11 +137,12 @@ def loadConfig(): _loadTrustedPeer() - def updateConfig(): """Save the config""" config = BMConfigParser() - settingsversion = config.getint('bitmessagesettings', 'settingsversion') + # Used python2.7 + # settingsversion = int(BMConfigParser().get('bitmessagesettings', 'settingsversion') \ + settingsversion = BMConfigParser().safeGetInt('bitmessagesettings', 'settingsvesion') if settingsversion == 1: config.set('bitmessagesettings', 'socksproxytype', 'none') config.set('bitmessagesettings', 'sockshostname', 'localhost') diff --git a/src/highlevelcrypto.py b/src/highlevelcrypto.py index 02fb85ab..c235072c 100644 --- a/src/highlevelcrypto.py +++ b/src/highlevelcrypto.py @@ -13,10 +13,11 @@ from pyelliptic import arithmetic as a def makeCryptor(privkey): """Return a private pyelliptic.ECC() instance""" + # import pdb;pdb.set_trace() private_key = a.changebase(privkey, 16, 256, minlen=32) public_key = pointMult(private_key) privkey_bin = '\x02\xca\x00\x20' + private_key - pubkey_bin = '\x02\xca\x00\x20' + public_key[1:-32] + '\x00\x20' + public_key[-32:] + pubkey_bin = '\x02\xca\x00\x20' + public_key[1:-32].decode() + '\x00\x20' + public_key[-32:].decode() cryptor = pyelliptic.ECC(curve='secp256k1', privkey=privkey_bin, pubkey=pubkey_bin) return cryptor diff --git a/src/knownnodes.py b/src/knownnodes.py index ba21bac7..b30ca770 100644 --- a/src/knownnodes.py +++ b/src/knownnodes.py @@ -40,12 +40,13 @@ def json_serialize_knownnodes(output): Reorganize knownnodes dict and write it as JSON to output """ _serialized = [] - for stream, peers in knownNodes.iteritems(): - for peer, info in peers.iteritems(): + for stream, peers in iter(knownNodes.items()): + for peer, info in iter(peers.items()): info.update(rating=round(info.get('rating', 0), 2)) _serialized.append({ 'stream': stream, 'peer': peer._asdict(), 'info': info }) + # import pdb;pdb.set_trace() json.dump(_serialized, output, indent=4) @@ -85,7 +86,7 @@ def saveKnownNodes(dirName=None): if dirName is None: dirName = state.appdata with knownNodesLock: - with open(os.path.join(dirName, 'knownnodes.dat'), 'wb') as output: + with open(os.path.join(dirName, 'knownnodes.dat'), 'w') as output: json_serialize_knownnodes(output) diff --git a/src/l10n.py b/src/l10n.py index b3b16341..890f9491 100644 --- a/src/l10n.py +++ b/src/l10n.py @@ -64,20 +64,30 @@ else: if time_format != DEFAULT_TIME_FORMAT: try: #Check day names - for i in xrange(7): - unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0)), encoding) + new_time_format = time_format + import sys + if sys.version_info >= (3, 0, 0) and time_format == '%%c': + time_format = '%c' + for i in range(7): + #this work for python2.7 + # unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0)), encoding) + #this code for the python3 + (time.strftime(time_format, (0, 0, 0, 0, 0, 0, i, 0, 0))).encode() #Check month names - for i in xrange(1, 13): - unicode(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0)), encoding) + for i in range(1, 13): + # unicode(time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0)), encoding) + (time.strftime(time_format, (0, i, 0, 0, 0, 0, 0, 0, 0))).encode() + #Check AM/PM - unicode(time.strftime(time_format, (0, 0, 0, 11, 0, 0, 0, 0, 0)), encoding) - unicode(time.strftime(time_format, (0, 0, 0, 13, 0, 0, 0, 0, 0)), encoding) + (time.strftime(time_format, (0, 0, 0, 11, 0, 0, 0, 0, 0))).encode() + (time.strftime(time_format, (0, 0, 0, 13, 0, 0, 0, 0, 0))).encode() #Check DST - unicode(time.strftime(time_format, (0, 0, 0, 0, 0, 0, 0, 0, 1)), encoding) + (time.strftime(time_format, (0, 0, 0, 0, 0, 0, 0, 0, 1))).encode() except: logger.exception('Could not decode locale formatted timestamp') time_format = DEFAULT_TIME_FORMAT encoding = DEFAULT_ENCODING + time_format = new_time_format def setlocale(category, newlocale): locale.setlocale(category, newlocale) diff --git a/src/messagetypes/__init__.py b/src/messagetypes/__init__.py index 53d23de7..ea3de756 100644 --- a/src/messagetypes/__init__.py +++ b/src/messagetypes/__init__.py @@ -4,7 +4,7 @@ src/messagetypes/__init__.py """ from importlib import import_module from os import path, listdir -from string import lower + try: from kivy.utils import platform except: diff --git a/src/multiqueue.py b/src/multiqueue.py index 8c64d33d..a41e2033 100644 --- a/src/multiqueue.py +++ b/src/multiqueue.py @@ -3,7 +3,7 @@ src/multiqueue.py ================= """ -import Queue +import queue as Queue from collections import deque import helper_random diff --git a/src/network/addrthread.py b/src/network/addrthread.py index 9f516e80..76f1c184 100644 --- a/src/network/addrthread.py +++ b/src/network/addrthread.py @@ -1,4 +1,4 @@ -import Queue +import queue as Queue from helper_threading import StoppableThread from network.connectionpool import BMConnectionPool diff --git a/src/network/advanceddispatcher.py b/src/network/advanceddispatcher.py index c8f125f0..bec91c60 100644 --- a/src/network/advanceddispatcher.py +++ b/src/network/advanceddispatcher.py @@ -30,7 +30,10 @@ class AdvancedDispatcher(asyncore.dispatcher): _buf_len = 131072 # 128kB def __init__(self, sock=None): - if not hasattr(self, '_map'): + # python 2 below condition is used + # if not hasattr(self, '_map'): + # python 3 below condition is used + if not '_map' in dir(self): asyncore.dispatcher.__init__(self, sock) self.read_buf = bytearray() self.write_buf = bytearray() diff --git a/src/network/asyncore_pollchoose.py b/src/network/asyncore_pollchoose.py index 3337c0f0..3137797c 100644 --- a/src/network/asyncore_pollchoose.py +++ b/src/network/asyncore_pollchoose.py @@ -767,10 +767,11 @@ class dispatcher: # references to the underlying socket object. def __getattr__(self, attr): try: + # import pdb;pdb.set_trace() retattr = getattr(self.socket, attr) except AttributeError: - raise AttributeError("%s instance has no attribute '%s'" - % (self.__class__.__name__, attr)) + raise AttributeError("{} instance has no attribute {}" + .format(self.__class__.__name__, attr)) else: msg = "%(me)s.%(attr)s is deprecated; use %(me)s.socket.%(attr)s " \ "instead" % {'me': self.__class__.__name__, 'attr': attr} @@ -788,7 +789,7 @@ class dispatcher: def log_info(self, message, log_type='info'): """Conditionally print a message""" if log_type not in self.ignore_log_types: - print '%s: %s' % (log_type, message) + print ('{}: {}'.format((log_type, message))) def handle_read_event(self): """Handle a read event""" diff --git a/src/network/bmproto.py b/src/network/bmproto.py index 0a2cdc7e..813d5b97 100644 --- a/src/network/bmproto.py +++ b/src/network/bmproto.py @@ -11,7 +11,7 @@ import time from binascii import hexlify import addresses -import connectionpool +import network.connectionpool import knownnodes import protocol import state @@ -26,9 +26,9 @@ from network.bmobject import ( BMObjectInvalidError, BMObjectAlreadyHaveError) from network.node import Node from network.proxy import ProxyError -from objectracker import missingObjects, ObjectTracker +from network.objectracker import missingObjects, ObjectTracker from queues import objectProcessorQueue, portCheckerQueue, invQueue, addrQueue -from randomtrackingdict import RandomTrackingDict +from network.randomtrackingdict import RandomTrackingDict class BMProtoError(ProxyError): diff --git a/src/network/connectionpool.py b/src/network/connectionpool.py index 4d16df49..a50d83b6 100644 --- a/src/network/connectionpool.py +++ b/src/network/connectionpool.py @@ -7,20 +7,19 @@ import re import socket import time -import asyncore_pollchoose as asyncore +import network.asyncore_pollchoose as asyncore import helper_random import knownnodes import protocol import state from bmconfigparser import BMConfigParser -from connectionchooser import chooseConnection +from network.connectionchooser import chooseConnection from debug import logger -from proxy import Proxy +from network.proxy import Proxy from singleton import Singleton -from tcp import ( - bootstrap, Socks4aBMConnection, Socks5BMConnection, - TCPConnection, TCPServer) -from udp import UDPSocket +from network.tcp import ( + TCPServer, Socks5BMConnection, Socks4aBMConnection, TCPConnection) +from network.udp import UDPSocket @Singleton diff --git a/src/network/dandelion.py b/src/network/dandelion.py index fa9081cb..abba16ba 100644 --- a/src/network/dandelion.py +++ b/src/network/dandelion.py @@ -7,7 +7,7 @@ from random import choice, sample, expovariate from threading import RLock from time import time -import connectionpool +import network.connectionpool import state from debug import logging from queues import invQueue diff --git a/src/network/downloadthread.py b/src/network/downloadthread.py index a4b58862..a09d0c1d 100644 --- a/src/network/downloadthread.py +++ b/src/network/downloadthread.py @@ -7,12 +7,12 @@ import time import addresses import helper_random import protocol -from dandelion import Dandelion +from network.dandelion import Dandelion from debug import logger from helper_threading import StoppableThread from inventory import Inventory from network.connectionpool import BMConnectionPool -from objectracker import missingObjects +from network.objectracker import missingObjects class DownloadThread(StoppableThread): diff --git a/src/network/http.py b/src/network/http.py index 8bba38ac..fdfe8370 100644 --- a/src/network/http.py +++ b/src/network/http.py @@ -2,7 +2,7 @@ import socket from advanceddispatcher import AdvancedDispatcher import asyncore_pollchoose as asyncore -from proxy import ProxyError +from network.proxy import ProxyError from socks5 import Socks5Connection, Socks5Resolver from socks4a import Socks4aConnection, Socks4aResolver diff --git a/src/network/invthread.py b/src/network/invthread.py index ad3a0764..1d2b790d 100644 --- a/src/network/invthread.py +++ b/src/network/invthread.py @@ -2,7 +2,7 @@ src/network/invthread.py ======================== """ -import Queue +import queue as Queue import random from time import time diff --git a/src/network/objectracker.py b/src/network/objectracker.py index a8e3292a..40a0f582 100644 --- a/src/network/objectracker.py +++ b/src/network/objectracker.py @@ -7,7 +7,7 @@ from threading import RLock import network.connectionpool from network.dandelion import Dandelion -from randomtrackingdict import RandomTrackingDict +from network.randomtrackingdict import RandomTrackingDict haveBloom = False diff --git a/src/network/proxy.py b/src/network/proxy.py index 479663d3..c3f13ad2 100644 --- a/src/network/proxy.py +++ b/src/network/proxy.py @@ -6,9 +6,9 @@ src/network/proxy.py import socket import time -import asyncore_pollchoose as asyncore +import network.asyncore_pollchoose as asyncore import state -from advanceddispatcher import AdvancedDispatcher +from network.advanceddispatcher import AdvancedDispatcher from bmconfigparser import BMConfigParser from debug import logger diff --git a/src/network/randomtrackingdict.py b/src/network/randomtrackingdict.py index 6c3300ab..16eb63e1 100644 --- a/src/network/randomtrackingdict.py +++ b/src/network/randomtrackingdict.py @@ -140,20 +140,20 @@ if __name__ == '__main__': k = RandomTrackingDict() d = {} - print "populating random tracking dict" + print ("populating random tracking dict") a.append(time()) for i in range(50000): k[randString()] = True a.append(time()) - print "done" + print ("done") while k: retval = k.randomKeys(1000) if not retval: - print "error getting random keys" + print ("error getting random keys") try: k.randomKeys(100) - print "bad" + print( "bad") except KeyError: pass for i in retval: @@ -161,4 +161,4 @@ if __name__ == '__main__': a.append(time()) for x in range(len(a) - 1): - print "%i: %.3f" % (x, a[x + 1] - a[x]) + print("{}i: {}.3f".format(x, a[x + 1] - a[x])) diff --git a/src/network/receivequeuethread.py b/src/network/receivequeuethread.py index 5d8cbd37..f836b74b 100644 --- a/src/network/receivequeuethread.py +++ b/src/network/receivequeuethread.py @@ -1,5 +1,5 @@ import errno -import Queue +import queue as Queue import socket from debug import logger diff --git a/src/network/socks4a.py b/src/network/socks4a.py index f0b234f5..b92e53a5 100644 --- a/src/network/socks4a.py +++ b/src/network/socks4a.py @@ -6,7 +6,7 @@ src/network/socks4a.py import socket import struct -from proxy import Proxy, ProxyError, GeneralProxyError +from network.proxy import Proxy, ProxyError, GeneralProxyError class Socks4aError(ProxyError): @@ -141,4 +141,4 @@ class Socks4aResolver(Socks4a): PyBitmessage, a callback needs to be implemented which hasn't been done yet. """ - print "Resolved %s as %s" % (self.host, self.proxy_sock_name()) + print("Resolved {} as {}".format(self.host, self.proxy_sock_name())) diff --git a/src/network/socks5.py b/src/network/socks5.py index e0cb7202..8a7d922e 100644 --- a/src/network/socks5.py +++ b/src/network/socks5.py @@ -9,7 +9,7 @@ import socket import struct import state -from proxy import GeneralProxyError, Proxy, ProxyError +from network.proxy import GeneralProxyError, Proxy, ProxyError class Socks5AuthError(ProxyError): @@ -218,4 +218,4 @@ class Socks5Resolver(Socks5): To use this within PyBitmessage, a callback needs to be implemented which hasn't been done yet. """ - print "Resolved %s as %s" % (self.host, self.proxy_sock_name()) + print("Resolved {} as {}".format(self.host, self.proxy_sock_name())) diff --git a/src/network/stats.py b/src/network/stats.py index fedfbbc1..7b9a1e0d 100644 --- a/src/network/stats.py +++ b/src/network/stats.py @@ -6,7 +6,7 @@ import time import asyncore_pollchoose as asyncore from network.connectionpool import BMConnectionPool -from objectracker import missingObjects +from network.objectracker import missingObjects lastReceivedTimestamp = time.time() diff --git a/src/network/tcp.py b/src/network/tcp.py index da02df2f..31346e22 100644 --- a/src/network/tcp.py +++ b/src/network/tcp.py @@ -10,8 +10,8 @@ import socket import time import addresses -import asyncore_pollchoose as asyncore -import connectionpool +import network.asyncore_pollchoose as asyncore +import network.connectionpool import helper_random import knownnodes import protocol diff --git a/src/network/tls.py b/src/network/tls.py index 17b1ee1f..5f4be3b9 100644 --- a/src/network/tls.py +++ b/src/network/tls.py @@ -21,7 +21,12 @@ if sys.version_info >= (2, 7, 13): # this means TLSv1 or higher # in the future change to # ssl.PROTOCOL_TLS1.2 - sslProtocolVersion = ssl.PROTOCOL_TLS # pylint: disable=no-member + # Right now I am using the python3.5.2 and I faced the ssl for protocol due to this I + # have used try and catch + try: + sslProtocolVersion = ssl.PROTOCOL_TLS # pylint: disable=no-member + except AttributeError: + sslProtocolVersion = ssl.PROTOCOL_SSLv23 elif sys.version_info >= (2, 7, 9): # this means any SSL/TLS. SSLv2 and 3 are excluded with an option after context is created sslProtocolVersion = ssl.PROTOCOL_SSLv23 diff --git a/src/network/udp.py b/src/network/udp.py index 01dc1f7b..c3e4ce44 100644 --- a/src/network/udp.py +++ b/src/network/udp.py @@ -7,9 +7,9 @@ import socket import state import protocol -from bmproto import BMProto +from network.bmproto import BMProto from debug import logger -from objectracker import ObjectTracker +from network.objectracker import ObjectTracker from queues import receiveDataQueue diff --git a/src/network/uploadthread.py b/src/network/uploadthread.py index 9b29ef0a..1b06af23 100644 --- a/src/network/uploadthread.py +++ b/src/network/uploadthread.py @@ -11,7 +11,7 @@ from helper_threading import StoppableThread from inventory import Inventory from network.connectionpool import BMConnectionPool from network.dandelion import Dandelion -from randomtrackingdict import RandomTrackingDict +from network.randomtrackingdict import RandomTrackingDict class UploadThread(StoppableThread): diff --git a/src/openclpow.py b/src/openclpow.py index eb91a07f..e56c04c1 100644 --- a/src/openclpow.py +++ b/src/openclpow.py @@ -107,9 +107,10 @@ def do_opencl_pow(hash, target): #initCL() if __name__ == "__main__": - target = 54227212183L + #in python3 I have change this 54227212183L to 54227212183 + target = 54227212183 initialHash = "3758f55b5a8d902fd3597e4ce6a2d3f23daff735f65d9698c270987f4e67ad590b93f3ffeba0ef2fd08a8dc2f87b68ae5a0dc819ab57f22ad2c4c9c8618a43b3".decode("hex") nonce = do_opencl_pow(initialHash.encode("hex"), target) trialValue, = unpack('>Q',hashlib.sha512(hashlib.sha512(pack('>Q',nonce) + initialHash).digest()).digest()[0:8]) - print "{} - value {} < {}".format(nonce, trialValue, target) + print ("{} - value {} < {}".format(nonce, trialValue, target)) diff --git a/src/pyelliptic/arithmetic.py b/src/pyelliptic/arithmetic.py index 95c85b93..43166006 100644 --- a/src/pyelliptic/arithmetic.py +++ b/src/pyelliptic/arithmetic.py @@ -39,7 +39,7 @@ def encode(val, base, minlen=0): code_string = get_code_string(base) result = "" while val > 0: - result = code_string[val % base] + result + result = code_string[round(val % base)] + result val /= base if len(result) < minlen: result = code_string[0] * (minlen - len(result)) + result @@ -53,7 +53,7 @@ def decode(string, base): string = string.lower() while string: result *= base - result += code_string.find(string[0]) + result += code_string.find(string.decode()[0]) string = string[1:] return result diff --git a/src/pyelliptic/cipher.py b/src/pyelliptic/cipher.py index d02b743a..e0bb9ac9 100644 --- a/src/pyelliptic/cipher.py +++ b/src/pyelliptic/cipher.py @@ -8,7 +8,7 @@ src/pyelliptic/cipher.py # Copyright (C) 2011 Yann GUIBET # See LICENSE for details. -from openssl import OpenSSL +from .openssl import OpenSSL # pylint: disable=redefined-builtin diff --git a/src/pyelliptic/ecc.py b/src/pyelliptic/ecc.py index 2de0bfe9..14adca42 100644 --- a/src/pyelliptic/ecc.py +++ b/src/pyelliptic/ecc.py @@ -12,9 +12,9 @@ src/pyelliptic/ecc.py from hashlib import sha512 from struct import pack, unpack -from cipher import Cipher -from hash import equals, hmac_sha256 -from openssl import OpenSSL +from pyelliptic.cipher import Cipher +from pyelliptic.hash import equals, hmac_sha256 +from pyelliptic.openssl import OpenSSL class ECC(object): @@ -129,7 +129,8 @@ class ECC(object): )) @staticmethod - def _decode_pubkey(pubkey): + def _decode_pubkey( pubkey): + pubkey = pubkey.encode() i = 0 curve = unpack('!H', pubkey[i:i + 2])[0] i += 2 diff --git a/src/pyelliptic/hash.py b/src/pyelliptic/hash.py index c21dd6a4..9ea8eb6d 100644 --- a/src/pyelliptic/hash.py +++ b/src/pyelliptic/hash.py @@ -7,7 +7,7 @@ src/pyelliptic/hash.py # Copyright (C) 2011 Yann GUIBET # See LICENSE for details. -from openssl import OpenSSL +from .openssl import OpenSSL # For python3 diff --git a/src/pyelliptic/openssl.py b/src/pyelliptic/openssl.py index 6c5c4a84..35e7933a 100644 --- a/src/pyelliptic/openssl.py +++ b/src/pyelliptic/openssl.py @@ -90,7 +90,7 @@ class _OpenSSL: """Build the wrapper""" self._lib = ctypes.CDLL(library) self._version, self._hexversion, self._cflags = get_version(self._lib) - self._libreSSL = self._version.startswith("LibreSSL") + self._libreSSL = (self._version).decode("utf-8").startswith("OpenSSL") self.pointer = ctypes.pointer self.c_int = ctypes.c_int @@ -674,6 +674,7 @@ def loadOpenSSL(): elif 'win32' in sys.platform or 'win64' in sys.platform: libdir.append(path.join(sys._MEIPASS, 'libeay32.dll')) else: + libdir.extend([ path.join(sys._MEIPASS, 'libcrypto.so'), path.join(sys._MEIPASS, 'libssl.so'), @@ -709,7 +710,7 @@ def loadOpenSSL(): pass elif 'win32' in sys.platform or 'win64' in sys.platform: libdir.append(find_library('libeay32')) - for library in libdir: + for library in libdir: try: OpenSSL = _OpenSSL(library) return diff --git a/src/queues.py b/src/queues.py index 7b6bbade..1bdcd9fb 100644 --- a/src/queues.py +++ b/src/queues.py @@ -1,4 +1,4 @@ -import Queue +import queue as Queue from class_objectProcessorQueue import ObjectProcessorQueue from multiqueue import MultiQueue diff --git a/src/shared.py b/src/shared.py index dacd4a5f..2a53452a 100644 --- a/src/shared.py +++ b/src/shared.py @@ -174,12 +174,11 @@ def reloadBroadcastSendersForWhichImWatching(): # Now, for all addresses, even version 2 addresses, # we should create Cryptor objects in a dictionary which we will # use to attempt to decrypt encrypted broadcast messages. - + # import pdb;pdb.set_trace() if addressVersionNumber <= 3: - privEncryptionKey = hashlib.sha512( - encodeVarint(addressVersionNumber) + - encodeVarint(streamNumber) + hash - ).digest()[:32] + privEncryptionKey = hashlib.sha512((encodeVarint(addressVersionNumber) \ + + encodeVarint(streamNumber) + hash)).digest()[:32] + # import pdb;pdb.set_trace() MyECSubscriptionCryptorObjects[hash] = \ highlevelcrypto.makeCryptor(hexlify(privEncryptionKey)) else: diff --git a/src/shutdown.py b/src/shutdown.py index f136ac75..418d3b37 100644 --- a/src/shutdown.py +++ b/src/shutdown.py @@ -1,5 +1,5 @@ import os -import Queue +import queue as Queue import threading import time diff --git a/src/singleinstance.py b/src/singleinstance.py index a495bea0..554ce826 100644 --- a/src/singleinstance.py +++ b/src/singleinstance.py @@ -75,7 +75,7 @@ class singleinstance: fcntl.lockf(self.fp, fcntl.LOCK_EX | fcntl.LOCK_NB) self.lockPid = os.getpid() except IOError: - print 'Another instance of this application is already running' + print ('Another instance of this application is already running') sys.exit(-1) else: pidLine = "%i\n" % self.lockPid @@ -94,11 +94,11 @@ class singleinstance: os.close(self.fd) else: fcntl.lockf(self.fp, fcntl.LOCK_UN) - except Exception, e: + except Exception as e: pass return - print "Cleaning up lockfile" + print ("Cleaning up lockfile") try: if sys.platform == 'win32': if hasattr(self, 'fd'): diff --git a/src/storage/filesystem.py b/src/storage/filesystem.py index 43ba03fc..74aee4fa 100644 --- a/src/storage/filesystem.py +++ b/src/storage/filesystem.py @@ -9,7 +9,7 @@ from threading import RLock import time from paths import lookupAppdataFolder -from storage import InventoryStorage, InventoryItem +from storage.storage import InventoryStorage, InventoryItem class FilesystemInventory(InventoryStorage): # pylint: disable=too-many-ancestors, abstract-method @@ -144,7 +144,7 @@ class FilesystemInventory(InventoryStorage): # pylint: disable=too-many-ances newInventory[streamNumber][hashId] = InventoryItem( objectType, streamNumber, None, expiresTime, tag) except KeyError: - print "error loading %s" % (hexlify(hashId)) + print ("error loading {}".format((hexlify(hashId)))) self._inventory = newInventory # for i, v in self._inventory.items(): # print "loaded stream: %s, %i items" % (i, len(v)) diff --git a/src/storage/sqlite.py b/src/storage/sqlite.py index 0c2b4afa..54913830 100644 --- a/src/storage/sqlite.py +++ b/src/storage/sqlite.py @@ -6,6 +6,7 @@ import sqlite3 import time from threading import RLock + from helper_sql import sqlQuery, SqlBulkExecute, sqlExecute from storage import InventoryStorage, InventoryItem diff --git a/src/suravata.py b/src/suravata.py deleted file mode 100644 index 18541989..00000000 --- a/src/suravata.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python -# Import the libraries. -import pdb;pdb.set_trace() -import pydenticon100000000000000000000000 -import hashlib -# Set-up some test data. -users = ["alice", "bob", "eve", "dave"] -# Set-up a list of foreground colours (taken from Sigil). -foreground = ["rgb(45,79,255)", - "rgb(254,180,44)", - "rgb(226,121,234)", - "rgb(30,179,253)", - "rgb(232,77,65)", - "rgb(49,203,115)", - "rgb(141,69,170)"] -# Set-up a background colour (taken from Sigil). -background = "rgb(224,224,224)" -# Set-up the padding (top, bottom, left, right) in pixels. -padding = (20, 20, 20, 20) -# Instantiate a generator that will create 5x5 block identicons using SHA1 -# digest. -generator = pydenticon.Generator(5, 5, digest=hashlib.sha1, foreground=foreground, background=background) - -# identicon_ascii = generator.generate("john.doe@example.com", 200, 200, -# output_format="ascii") - -# print identicon_ascii -for user in users: - identicon = generator.generate(user, 200, 200, padding=padding, output_format="png") - filename = user + ".png" - with open(filename, "wb") as f: - f.write(identicon) \ No newline at end of file diff --git a/src/tests/core.py b/src/tests/core.py index b01c6b69..9021e4ff 100644 --- a/src/tests/core.py +++ b/src/tests/core.py @@ -5,7 +5,7 @@ Tests for core and those that do not work outside import os import pickle # nosec -import Queue +import queue as Queue import random # nosec import string import time diff --git a/src/tr.py b/src/tr.py index 5ce623cd..577354cc 100644 --- a/src/tr.py +++ b/src/tr.py @@ -46,11 +46,11 @@ def translateText(context, text, n=None): try: from PyQt4 import QtCore, QtGui except Exception as err: - print 'PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\ + print ('PyBitmessage requires PyQt unless you want to run it as a daemon and interact with it using the API\ .You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download\ or by searching Google for \'PyQt Download\'.\ - If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon' - print 'Error message:', err + If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon') + print ('Error message:', err) os._exit(0) # pylint: disable=protected-access if n is None: return QtGui.QApplication.translate(context, text)