From 9a438c1a1a9fe252a7fee5771060ce90d3801509 Mon Sep 17 00:00:00 2001 From: Dmitri Bogomolov <4glitch@gmail.com> Date: Fri, 27 Sep 2019 17:09:29 +0300 Subject: [PATCH] flake8: paths --- src/paths.py | 117 ++++++++++++++++++++++++++++----------------------- 1 file changed, 65 insertions(+), 52 deletions(-) diff --git a/src/paths.py b/src/paths.py index 325fcd8b..ada54c8e 100644 --- a/src/paths.py +++ b/src/paths.py @@ -1,76 +1,85 @@ -from os import environ, path -import sys +import logging +import os import re +import sys from datetime import datetime +from shutil import move + + +logger = logging.getLogger('default') # When using py2exe or py2app, the variable frozen is added to the sys -# namespace. This can be used to setup a different code path for +# namespace. This can be used to setup a different code path for # binary distributions vs source distributions. -frozen = getattr(sys,'frozen', None) +frozen = getattr(sys, 'frozen', None) + def lookupExeFolder(): + """Returns executable folder path""" if frozen: - if frozen == "macosx_app": + exeFolder = ( # targetdir/Bitmessage.app/Contents/MacOS/Bitmessage - exeFolder = path.dirname(path.dirname(path.dirname(path.dirname(sys.executable)))) + path.sep - else: - exeFolder = path.dirname(sys.executable) + path.sep + os.path.dirname(sys.executable).split(os.path.sep)[0] + os.path.sep + if frozen == "macosx_app" else + os.path.dirname(sys.executable) + os.path.sep) elif __file__: - exeFolder = path.dirname(__file__) + path.sep + exeFolder = os.path.dirname(__file__) + os.path.sep else: exeFolder = '' return exeFolder + def lookupAppdataFolder(): + """Returns path of the folder where application data is stored""" APPNAME = "PyBitmessage" - if "BITMESSAGE_HOME" in environ: - dataFolder = environ["BITMESSAGE_HOME"] - if dataFolder[-1] not in [path.sep, path.altsep]: - dataFolder += path.sep + dataFolder = os.environ.get('BITMESSAGE_HOME') + if dataFolder: + if dataFolder[-1] not in (os.path.sep, os.path.altsep): + dataFolder += os.path.sep elif sys.platform == 'darwin': - if "HOME" in environ: - dataFolder = path.join(environ["HOME"], "Library/Application Support/", APPNAME) + '/' - else: - stringToLog = 'Could not find home folder, please report this message and your OS X version to the BitMessage Github.' - if 'logger' in globals(): - logger.critical(stringToLog) - else: - print stringToLog - sys.exit() - - elif 'win32' in sys.platform or 'win64' in sys.platform: - dataFolder = path.join(environ['APPDATA'].decode(sys.getfilesystemencoding(), 'ignore'), APPNAME) + path.sep - else: - from shutil import move try: - dataFolder = path.join(environ["XDG_CONFIG_HOME"], APPNAME) + dataFolder = os.path.join( + os.environ['HOME'], + 'Library/Application Support/', APPNAME + ) + '/' # FIXME: should also be os.path.sep except KeyError: - dataFolder = path.join(environ["HOME"], ".config", APPNAME) - - # Migrate existing data to the proper location if this is an existing install + sys.exit( + 'Could not find home folder, please report this message' + ' and your OS X version to the BitMessage Github.') + elif 'win32' in sys.platform or 'win64' in sys.platform: + dataFolder = os.path.join( + os.environ['APPDATA'].decode( + sys.getfilesystemencoding(), 'ignore'), APPNAME + ) + os.path.sep + else: try: - move(path.join(environ["HOME"], ".%s" % APPNAME), dataFolder) - stringToLog = "Moving data folder to %s" % (dataFolder) - if 'logger' in globals(): - logger.info(stringToLog) - else: - print stringToLog + dataFolder = os.path.join(os.environ['XDG_CONFIG_HOME'], APPNAME) + except KeyError: + dataFolder = os.path.join(os.environ['HOME'], '.config', APPNAME) + + # Migrate existing data to the proper location + # if this is an existing install + try: + move(os.path.join(os.environ['HOME'], '.%s' % APPNAME), dataFolder) + logger.info('Moving data folder to %s', dataFolder) except IOError: # Old directory may not exist. pass - dataFolder = dataFolder + '/' + dataFolder = dataFolder + os.path.sep return dataFolder - + + def codePath(): - if frozen == "macosx_app": - codePath = environ.get("RESOURCEPATH") - elif frozen: # windows - codePath = sys._MEIPASS - else: - codePath = path.dirname(__file__) - return codePath + """Returns path to the program sources""" + if not frozen: + return os.path.dirname(__file__) + return ( + os.environ.get('RESOURCEPATH') + if frozen == "macosx_app" else sys._MEIPASS) + def tail(f, lines=20): + """Returns last lines in the f file object""" total_lines_wanted = lines BLOCK_SIZE = 1024 @@ -78,16 +87,17 @@ def tail(f, lines=20): block_end_byte = f.tell() lines_to_go = total_lines_wanted block_number = -1 - blocks = [] # blocks of size BLOCK_SIZE, in reverse order starting - # from the end of the file + # blocks of size BLOCK_SIZE, in reverse order starting + # from the end of the file + blocks = [] while lines_to_go > 0 and block_end_byte > 0: if (block_end_byte - BLOCK_SIZE > 0): # read the last block we haven't yet read - f.seek(block_number*BLOCK_SIZE, 2) + f.seek(block_number * BLOCK_SIZE, 2) blocks.append(f.read(BLOCK_SIZE)) else: # file too small, start from begining - f.seek(0,0) + f.seek(0, 0) # only read what was not read blocks.append(f.read(block_end_byte)) lines_found = blocks[-1].count('\n') @@ -99,9 +109,12 @@ def tail(f, lines=20): def lastCommit(): - githeadfile = path.join(codePath(), '..', '.git', 'logs', 'HEAD') + """ + Returns last commit information as dict with 'commit' and 'time' keys + """ + githeadfile = os.path.join(codePath(), '..', '.git', 'logs', 'HEAD') result = {} - if path.isfile(githeadfile): + if os.path.isfile(githeadfile): try: with open(githeadfile, 'rt') as githead: line = tail(githead, 1)