diff options
author | 2023-10-06 14:32:52 +0200 | |
---|---|---|
committer | 2023-10-06 14:32:56 +0200 | |
commit | e53f8a8bb67bf5ab70e0a2b78eec55a6212ad80f (patch) | |
tree | e5d54f4dfde54d22505c4f9e193a5182cb2581b6 | |
parent | Release 0.8.2 (diff) | |
parent | .git-blame-ignore-revs: Ignore reformat commits in blame (diff) | |
download | elogv-e53f8a8bb67bf5ab70e0a2b78eec55a6212ad80f.tar.gz elogv-e53f8a8bb67bf5ab70e0a2b78eec55a6212ad80f.tar.bz2 elogv-e53f8a8bb67bf5ab70e0a2b78eec55a6212ad80f.zip |
Merge branch 'pull-16-parona-source-black'
Signed-off-by: Sebastian Pipping <sping@gentoo.org>
-rw-r--r-- | .git-blame-ignore-revs | 4 | ||||
-rwxr-xr-x | elogv | 291 | ||||
-rw-r--r-- | pyproject.toml | 13 | ||||
-rw-r--r-- | setup.py | 132 |
4 files changed, 249 insertions, 191 deletions
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..b72aa08 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,4 @@ +# Reformat project with black +cf01cb49e14730c2323da4ef9f8093935ef93fb9 +# Reformat project with isort +c08fea8ad853d1508b412f06dd9636273912f1c1 @@ -20,48 +20,57 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -import os -import sys -import re -from datetime import datetime +import bz2 import curses import curses.ascii -import textwrap -from portage import settings as port_settings -from glob import glob import gettext -import locale import gzip -import bz2 +import locale import lzma +import os +import re import signal +import sys +import textwrap +from datetime import datetime +from glob import glob + +from portage import settings as port_settings _LOCALE_CATEGORY_PAIRS = ( - (locale.LC_COLLATE, 'LC_COLLATE'), - (locale.LC_CTYPE, 'LC_CTYPE'), - (locale.LC_MESSAGES, 'LC_MESSAGES'), - (locale.LC_MONETARY, 'LC_MONETARY'), - (locale.LC_NUMERIC, 'LC_NUMERIC'), - (locale.LC_TIME, 'LC_TIME'), - - (locale.LC_ALL, 'LC_ALL'), + (locale.LC_COLLATE, "LC_COLLATE"), + (locale.LC_CTYPE, "LC_CTYPE"), + (locale.LC_MESSAGES, "LC_MESSAGES"), + (locale.LC_MONETARY, "LC_MONETARY"), + (locale.LC_NUMERIC, "LC_NUMERIC"), + (locale.LC_TIME, "LC_TIME"), + (locale.LC_ALL, "LC_ALL"), ) def report_bad_locale(variable, value): - py_version = '%s.%s.%s' % sys.version_info[:3] + py_version = "%s.%s.%s" % sys.version_info[:3] print('ERROR: Locale "%s" does not seem to be supported.' % value, file=sys.stderr) if value not in locale.locale_alias: - print(' Note: Locale "%s" is not a known alias to Python %s (check locale.locale_alias).' % (value, py_version), file=sys.stderr) - if not ('.' in value or '@' in value): - print(' Hint: Try specifying the encoding (e.g. %s=%s.UTF-8).' % (variable, value), file=sys.stderr) + print( + ' Note: Locale "%s" is not a known alias to Python %s (check locale.locale_alias).' + % (value, py_version), + file=sys.stderr, + ) + if not ("." in value or "@" in value): + print( + " Hint: Try specifying the encoding (e.g. %s=%s.UTF-8)." + % (variable, value), + file=sys.stderr, + ) + reported_bad_locales = set() # Enable support for user locale try: - locale.setlocale(locale.LC_ALL, '') + locale.setlocale(locale.LC_ALL, "") except locale.Error: # Find guilty value and variable for category, variable in _LOCALE_CATEGORY_PAIRS: @@ -83,7 +92,7 @@ for category, variable in _LOCALE_CATEGORY_PAIRS: try: locale.getlocale(category) - except ValueError as e: + except ValueError: value = os.environ[variable] if value in reported_bad_locales: continue @@ -95,11 +104,12 @@ if reported_bad_locales: # Setup gettext. -gettext.textdomain('elogv') +gettext.textdomain("elogv") _ = gettext.gettext # This text is used on the in-line help -helptext = _(""" +helptext = _( + """ Elogv is a portage elog viewer based on curses and python, you can use these keys to control the behavior of the program: @@ -127,7 +137,8 @@ you can use these keys to control the behavior of the program: - / -> starts a search prompt, write a string and will be showed the next package that contains your string, use ESC to exit - q -> quit -""") +""" +) (normal, selected, einfo, elog, ewarn, eerror) = range(6) (PATH, CAT, PN, DATE, CLASS) = range(5) @@ -137,6 +148,7 @@ class_char = "*" list_format = "%s/%s - %s" date_format = "%x" + # Exceptions classes class TermTooSmall(Exception): """Terminal too small.""" @@ -165,11 +177,11 @@ def date2str(d): b = d.strftime(date_format) for encoding in ( - locale.getlocale(locale.LC_TIME)[1], - locale.getlocale()[1], - sys.getdefaultencoding(), - 'utf-8', - ): + locale.getlocale(locale.LC_TIME)[1], + locale.getlocale()[1], + sys.getdefaultencoding(), + "utf-8", + ): if encoding is None: continue @@ -182,24 +194,25 @@ def date2str(d): except UnicodeDecodeError: pass else: - raise ValueError('Cannot decode byte stream') + raise ValueError("Cannot decode byte stream") try: if not isinstance(b, str): - b = u.encode('ascii') + b = u.encode("ascii") else: b = u except UnicodeEncodeError: # Prevent crash locales like ja_JP.UTF-8, e.g. "2014年10月24日" # https://bugs.gentoo.org/show_bug.cgi?id=464962 - b = u.encode('ascii', errors='replace') + b = u.encode("ascii", errors="replace") return b + # Main class (called with curses.wrapper later) class ElogViewer: def __init__(self, screen): - #curses.curs_set(0) + # curses.curs_set(0) self.screen = screen # Our color pairs @@ -214,20 +227,20 @@ class ElogViewer: pass # This attributes are used to manage the scrolling of the list - # of files + # of files self.pposy = 0 self.usel = 0 # Method used to order the list: use DATE for order by date, CAT to # order by category name, PN to order by package name, CLASS to order # by class second value set if the list should be reversed (True o False) - self.sort_method = [ DATE, False] + self.sort_method = [DATE, False] # Initialize screen self.init_screen() c = self.screen.getch() - while c not in ( ord("q"), curses.ascii.ESC): + while c not in (ord("q"), curses.ascii.ESC): ## Scrolling keys ## if c in (curses.KEY_DOWN, ord("j")): self.change_usel(1) @@ -237,12 +250,12 @@ class ElogViewer: elif c in (curses.KEY_NPAGE, ord("f")): self.change_usel(10) - + elif c in (curses.KEY_PPAGE, ord("b")): self.change_usel(-10) elif c in (curses.KEY_END, ord("G")): - self.change_usel(len(self.packages)-1, False) + self.change_usel(len(self.packages) - 1, False) elif c in (curses.KEY_HOME, ord("g")): self.change_usel(0, False) @@ -317,12 +330,12 @@ class ElogViewer: elif c == ord("/"): word = "" - self.screen.move(self.height-1,2) + self.screen.move(self.height - 1, 2) self.screen.addstr("/") subc = self.screen.getch() while subc != curses.ascii.ESC: if subc == ord("\n"): - self.search(word,1) + self.search(word, 1) elif subc == curses.ascii.BS: word = word[:-1] self.screen.delch() @@ -330,10 +343,10 @@ class ElogViewer: elif curses.ascii.isalpha(subc): word += chr(subc) self.screen.addstr(chr(subc)) - self.search(word) + self.search(word) subc = self.screen.getch() - self.screen.hline(self.height-1,2,curses.ACS_HLINE,(len(word)+1)) - self.screen.addstr(self.height-2,2," "*20) + self.screen.hline(self.height - 1, 2, curses.ACS_HLINE, (len(word) + 1)) + self.screen.addstr(self.height - 2, 2, " " * 20) # Get another key from the user c = self.screen.getch() @@ -351,14 +364,15 @@ class ElogViewer: # Screen Look&Feel self.screen.border() - self.screen.hline(self.height//2,1, "_", self.width-2) + self.screen.hline(self.height // 2, 1, "_", self.width - 2) m = _(" Press F1 or h to show the help screen ") - self.screen.addstr(self.height-1, self.width-len(m)-1, m) + self.screen.addstr(self.height - 1, self.width - len(m) - 1, m) self.screen.refresh() # Initialize log file window - self.log_win = curses.newwin(self.height//2-2, self.width-2, - self.height//2+1, 1) + self.log_win = curses.newwin( + self.height // 2 - 2, self.width - 2, self.height // 2 + 1, 1 + ) # Draw other window of the screen self.fill_file_pad() @@ -367,31 +381,37 @@ class ElogViewer: self.logf_wrap = self.wrap_logf_lines() self.show_log() - def change_usel(self,n,relative=True): + def change_usel(self, n, relative=True): prev_usel = self.usel if not relative: self.usel = n - elif n < 0 and self.usel+n < 0: + elif n < 0 and self.usel + n < 0: self.usel = 0 - elif n > 0 and self.usel+n > len(self.packages)-1: - self.usel = len(self.packages)-1 + elif n > 0 and self.usel + n > len(self.packages) - 1: + self.usel = len(self.packages) - 1 else: self.usel += n prev_pkg = self.packages[prev_usel] pkg = self.packages[self.usel] - self.file_pad.addstr(prev_usel,1, - class_char, - curses.A_BOLD + curses.color_pair(prev_pkg[CLASS])) - self.file_pad.addstr(prev_usel,3, - list_format % (prev_pkg[CAT], prev_pkg[PN], date2str(prev_pkg[DATE]) ), - curses.color_pair(normal)) - self.file_pad.addstr(self.usel,1, - class_char, - curses.A_BOLD + curses.color_pair(pkg[CLASS])) - self.file_pad.addstr(self.usel,3, - list_format % (pkg[CAT], pkg[PN], date2str(pkg[DATE]) ), - curses.color_pair(selected)) + self.file_pad.addstr( + prev_usel, 1, class_char, curses.A_BOLD + curses.color_pair(prev_pkg[CLASS]) + ) + self.file_pad.addstr( + prev_usel, + 3, + list_format % (prev_pkg[CAT], prev_pkg[PN], date2str(prev_pkg[DATE])), + curses.color_pair(normal), + ) + self.file_pad.addstr( + self.usel, 1, class_char, curses.A_BOLD + curses.color_pair(pkg[CLASS]) + ) + self.file_pad.addstr( + self.usel, + 3, + list_format % (pkg[CAT], pkg[PN], date2str(pkg[DATE])), + curses.color_pair(selected), + ) first = self.pposy last = (self.height // 2 - 2) + first @@ -414,12 +434,12 @@ class ElogViewer: self.show_log() @staticmethod - def open(file, mode='rt'): - if file.endswith('.xz'): + def open(file, mode="rt"): + if file.endswith(".xz"): return lzma.open(file, mode=mode) - elif file.endswith('.gz'): + elif file.endswith(".gz"): return gzip.open(file, mode=mode) - elif file.endswith('.bz2'): + elif file.endswith(".bz2"): return bz2.open(file, mode=mode) else: return open(file, mode=mode) @@ -432,7 +452,7 @@ class ElogViewer: Redraws file pad, first half of the screen. Can be used to scroll or simply update """ - self.file_pad.refresh(self.pposy,0,1,1,self.height//2-1,self.width-2) + self.file_pad.refresh(self.pposy, 0, 1, 1, self.height // 2 - 1, self.width - 2) def get_packages_key(self, k): return k[self.sort_method[0]] @@ -444,7 +464,9 @@ class ElogViewer: """ # Get the list of files try: - file_list = glob(os.path.join(elogdir,"*:*:*.log*")) + glob(os.path.join(elogdir,"*","*:*.log*")) + file_list = glob(os.path.join(elogdir, "*:*:*.log*")) + glob( + os.path.join(elogdir, "*", "*:*.log*") + ) except OSError: raise CannotOpenElogdir() @@ -465,13 +487,15 @@ class ElogViewer: # then we split the string using as pattern / or : to obtain in any # case # ( "x11-themes", "haematite-xcursors", "1.0:20091018-195827.log") - tmpfilepath = re.sub('\\.log[^/]*$', '.log', filepath) - split_up = re.split(":|" + os.path.sep, tmpfilepath.replace(elogdir + os.path.sep, "")) + tmpfilepath = re.sub("\\.log[^/]*$", ".log", filepath) + split_up = re.split( + ":|" + os.path.sep, tmpfilepath.replace(elogdir + os.path.sep, "") + ) if len(split_up) < 3: continue (cat, pn, other) = split_up[-3:] date = datetime.strptime(other, "%Y%m%d-%H%M%S.log") - self.packages.append( (filepath, cat, pn, date, self.get_class(filepath)) ) + self.packages.append((filepath, cat, pn, date, self.get_class(filepath))) if not self.packages: raise NoLogFiles() @@ -479,24 +503,26 @@ class ElogViewer: # Maybe that after removing files self.usel points to a wrong index, # so this will prevent a crash if self.usel >= len(self.packages): - self.usel = len(self.packages)-1 + self.usel = len(self.packages) - 1 # We also have to update self.pposy if self.pposy > self.usel: - self.pposy = max(0, self.usel-10) + self.pposy = max(0, self.usel - 10) # Sort the list if self.sort_method[0] in (DATE, CLASS): - self.packages.sort(key=self.get_packages_key,reverse=not self.sort_method[1]) + self.packages.sort( + key=self.get_packages_key, reverse=not self.sort_method[1] + ) else: self.packages.sort(key=self.get_packages_key, reverse=self.sort_method[1]) # Curses' newpad fails for nlines >32767 so we truncate the list # of log files to not exceed that limit (issue #10) - MAX_ENTRIES = 2 ** 15 - 1 + MAX_ENTRIES = 2**15 - 1 if len(self.packages) > MAX_ENTRIES: self.packages = self.packages[:MAX_ENTRIES] - self.file_pad = curses.newpad(len(self.packages),self.width) + self.file_pad = curses.newpad(len(self.packages), self.width) self.file_pad.erase() for i, pkg in enumerate(self.packages): @@ -513,14 +539,17 @@ class ElogViewer: else: cp = normal - self.file_pad.addstr(i,1, - class_char, - curses.A_BOLD + curses.color_pair(pkg[CLASS])) - self.file_pad.addstr(i,3, - list_format % (pkg[CAT], pkg[PN], date2str(pkg[DATE]) ), - curses.color_pair(cp)) - - def get_class(self,filepath): + self.file_pad.addstr( + i, 1, class_char, curses.A_BOLD + curses.color_pair(pkg[CLASS]) + ) + self.file_pad.addstr( + i, + 3, + list_format % (pkg[CAT], pkg[PN], date2str(pkg[DATE])), + curses.color_pair(cp), + ) + + def get_class(self, filepath): """ Get the highest elog class in a file """ @@ -540,7 +569,6 @@ class ElogViewer: """ Takes a file-like object and wraps long lines. Returns a list iterator. """ - result = [] self.logf.seek(0) for line in self.logf.readlines(): if not line.strip(): @@ -548,9 +576,9 @@ class ElogViewer: yield "\n" else: # Returns a list of new lines minus the line ending \n - wrapped_line = textwrap.wrap(line, width=self.width-2) - for l in wrapped_line: - yield l + "\n" + wrapped_lines = textwrap.wrap(line, width=self.width - 2) + for output_line in wrapped_lines: + yield output_line + "\n" def show_log(self): """ @@ -561,7 +589,7 @@ class ElogViewer: self.log_win.erase() shown_all = False - for i in range(0,self.height//2-4): + for i in range(0, self.height // 2 - 4): try: x = next(self.logf_wrap) except StopIteration: @@ -571,27 +599,31 @@ class ElogViewer: break try: - if x.startswith('INFO:'): - self.log_win.addstr(x[:self.width-2],curses.color_pair(einfo)) - elif x.startswith('WARN:'): - self.log_win.addstr(x[:self.width-2],curses.color_pair(ewarn)) - elif x.startswith('ERROR:'): - self.log_win.addstr(x[:self.width-2],curses.color_pair(eerror)) - elif x.startswith('LOG:'): - self.log_win.addstr(x[:self.width-2],curses.color_pair(elog)) + if x.startswith("INFO:"): + self.log_win.addstr(x[: self.width - 2], curses.color_pair(einfo)) + elif x.startswith("WARN:"): + self.log_win.addstr(x[: self.width - 2], curses.color_pair(ewarn)) + elif x.startswith("ERROR:"): + self.log_win.addstr(x[: self.width - 2], curses.color_pair(eerror)) + elif x.startswith("LOG:"): + self.log_win.addstr(x[: self.width - 2], curses.color_pair(elog)) else: - self.log_win.addstr(x[:self.width-2],curses.color_pair(normal)) + self.log_win.addstr(x[: self.width - 2], curses.color_pair(normal)) except curses.error: pass - if not shown_all: + if not shown_all: s = _("Continue...") - self.log_win.addstr(self.height//2-3, self.width-len(s)-4, s, - curses.color_pair(normal)) + self.log_win.addstr( + self.height // 2 - 3, + self.width - len(s) - 4, + s, + curses.color_pair(normal), + ) self.log_win.refresh() - def remove_file(self,n): + def remove_file(self, n): """ Delete from the filesystem a slice of elog files n can be: @@ -614,24 +646,25 @@ class ElogViewer: end = self.usel + int(n) for item in self.packages[start:end]: - os.remove(os.path.join(elogdir,item[0])) + os.remove(os.path.join(elogdir, item[0])) def show_help(self): # Setup help window helpwin_height = self.height // 3 * 2 helpwin_corner = (self.height // 6, self.width // 2 - 40) - helpwin = curses.newwin(helpwin_height, 80, - helpwin_corner[0], helpwin_corner[1]) + helpwin = curses.newwin( + helpwin_height, 80, helpwin_corner[0], helpwin_corner[1] + ) helplines = helptext.splitlines() # Setup help pad row = 0 maxrow = len(helplines) - helppad = curses.newpad(maxrow,80) + helppad = curses.newpad(maxrow, 80) # Insert helptext on the pad for i in range(maxrow): - helppad.addstr(i,0,helplines[i]) + helppad.addstr(i, 0, helplines[i]) # Loop to manage user actions c = None @@ -640,31 +673,39 @@ class ElogViewer: helpwin.border() helpwin.refresh() - helppad.refresh(row,0,helpwin_corner[0]+1,helpwin_corner[1]+1, - helpwin_height+helpwin_corner[0]-2,80+helpwin_corner[1]-2) + helppad.refresh( + row, + 0, + helpwin_corner[0] + 1, + helpwin_corner[1] + 1, + helpwin_height + helpwin_corner[0] - 2, + 80 + helpwin_corner[1] - 2, + ) c = self.screen.getch() if c == curses.KEY_NPAGE: - if row+10 <= maxrow: + if row + 10 <= maxrow: row += 10 elif c == curses.KEY_PPAGE: - if row-10 >= 0: + if row - 10 >= 0: row -= 10 elif c in (curses.KEY_DOWN, ord("j")): - if row+1 < maxrow: + if row + 1 < maxrow: row += 1 elif c in (curses.KEY_UP, ord("k")): if row > 0: row -= 1 def search(self, word, div=0): - for x in self.packages[self.usel+div:]: + for x in self.packages[self.usel + div :]: if re.search(word, "%s/%s" % x[1:3]): - self.change_usel(self.packages.index(x),False) + self.change_usel(self.packages.index(x), False) break else: - self.screen.addstr(self.height-2,2,_("Not Found!"), - curses.color_pair(eerror)) + self.screen.addstr( + self.height - 2, 2, _("Not Found!"), curses.color_pair(eerror) + ) + if __name__ == "__main__": if "--help" in sys.argv: @@ -672,10 +713,12 @@ if __name__ == "__main__": sys.exit() # Get the path of the elogdir - if port_settings['PORT_LOGDIR']: - elogdir = os.path.join(port_settings['PORT_LOGDIR'],"elog") + if port_settings["PORT_LOGDIR"]: + elogdir = os.path.join(port_settings["PORT_LOGDIR"], "elog") else: - elogdir = os.path.join(os.sep,port_settings['EPREFIX'],"var","log","portage","elog") + elogdir = os.path.join( + os.sep, port_settings["EPREFIX"], "var", "log", "portage", "elog" + ) signal.signal(signal.SIGTSTP, handle_sig_tstp) signal.signal(signal.SIGCONT, handle_sig_cont) @@ -691,7 +734,9 @@ if __name__ == "__main__": sys.exit(1) except CannotOpenElogdir: print(_("Cannot open"), elogdir) - print(_("Please check if the directory exists and if it's readable by your user.")) + print( + _("Please check if the directory exists and if it's readable by your user.") + ) sys.exit(1) except KeyboardInterrupt: pass diff --git a/pyproject.toml b/pyproject.toml index 2edc922..25bc44c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,3 +14,16 @@ dependencies = ["portage"] [project.urls] homepage = "https://gitweb.gentoo.org/proj/elogv.git/" + +[tool.black] +include = "(elogv|setup.py)" +extend_exclude = "(man|po|.*.egg-info)" + +[tool.isort] +profile = "black" +src_paths = ["elogv"] + +[tool.ruff] +include = ["elogv", "setup.py"] +# Ignore long line violations +ignore = ["E501"] @@ -1,26 +1,24 @@ -from setuptools import setup -from setuptools import Command -from setuptools.command.build import build as _build -from setuptools.command.install import install as _install - import logging - import os from glob import glob +from setuptools import Command, setup +from setuptools.command.build import build as _build +from setuptools.command.install import install as _install + ## Snippet of code found on ## http://developer.berlios.de/snippet/detail.php?type=snippet&id=100019 ## Useful to handle *.po files under distutils class messages(Command): + description = "Extract messages from source files" - description = 'Extract messages from source files' - - user_options = [('merge', 'm', 'Merge message catalogs after ' - 'extracting template')] + user_options = [ + ("merge", "m", "Merge message catalogs after " "extracting template") + ] - boolean_options = ['merge'] + boolean_options = ["merge"] def initialize_options(self): self.merge = False @@ -31,18 +29,18 @@ class messages(Command): def run(self): wd = os.getcwd() name = self.distribution.get_name() - logging.info('Extracting messages from %s' % name) - os.chdir('po') - os.system('pygettext -k i18n -o %s.pot ../%s' % (name, name)) + logging.info("Extracting messages from %s" % name) + os.chdir("po") + os.system("pygettext -k i18n -o %s.pot ../%s" % (name, name)) os.chdir(wd) if self.merge: - self.run_command('merge') + self.run_command("merge") class merge(Command): - description = 'Merge message catalogs with template' + description = "Merge message catalogs with template" - user_options = [('lang=', 'l', 'Only merge specified language')] + user_options = [("lang=", "l", "Only merge specified language")] def initialize_options(self): self.lang = None @@ -52,46 +50,44 @@ class merge(Command): def run(self): wd = os.getcwd() - os.chdir('po') + os.chdir("po") if self.lang is not None: - filename = '%s.po' % self.lang + filename = "%s.po" % self.lang if os.path.exists(filename): self.merge(filename) else: - logging.error('No catalog found for language %s' % self.lang) + logging.error("No catalog found for language %s" % self.lang) else: - files = glob('*.po') + files = glob("*.po") for f in files: self.merge(f) os.chdir(wd) def merge(self, f): name = self.distribution.get_name() - logging.info('Merging catalog %s' % f) - os.system('msgmerge %s %s.pot -o %s' % (f, name, f)) + logging.info("Merging catalog %s" % f) + os.system("msgmerge %s %s.pot -o %s" % (f, name, f)) class build_messages(Command): - - description = 'Compile message catalogs' - user_options = [('build-dir=', 'd', - 'directory to build message catalogs in')] + description = "Compile message catalogs" + user_options = [("build-dir=", "d", "directory to build message catalogs in")] def initialize_options(self): self.build_dir = None def finalize_options(self): - self.set_undefined_options('build', ('build_messages', 'build_dir')) + self.set_undefined_options("build", ("build_messages", "build_dir")) def run(self): self.mkpath(self.build_dir) - po_files = os.path.join('po', '*.po') + po_files = os.path.join("po", "*.po") po_files = glob(po_files) for f in po_files: base = os.path.basename(f) base = os.path.splitext(base)[0] - out_file = os.path.join(self.build_dir, '%s.gmo' % base) - logging.info('Building catalog %s > %s' % (f, out_file)) + out_file = os.path.join(self.build_dir, "%s.gmo" % base) + logging.info("Building catalog %s > %s" % (f, out_file)) cmd = 'msgfmt -o "%s" %s' % (out_file, f) os.system(cmd) @@ -108,24 +104,24 @@ class build(_build): def finalize_options(self): _build.finalize_options(self) if self.build_messages is None: - self.build_messages = os.path.join(self.build_base, 'po') + self.build_messages = os.path.join(self.build_base, "po") _build.user_options.append( - ('build-messages=', None, "build directory for messages")) - _build.sub_commands.append(('build_messages', has_messages)) + ("build-messages=", None, "build directory for messages") + ) + _build.sub_commands.append(("build_messages", has_messages)) class install_messages(Command): - - description = 'Installs message catalogs' + description = "Installs message catalogs" user_options = [ - ('install-dir=', 'd', "directory to install scripts to"), - ('build-dir=', 'b', "build directory (where to install from)"), - ('skip-build', None, "skip the build steps"), + ("install-dir=", "d", "directory to install scripts to"), + ("build-dir=", "b", "build directory (where to install from)"), + ("skip-build", None, "skip the build steps"), ] - boolean_options = ['skip-build'] + boolean_options = ["skip-build"] def initialize_options(self): self.install_dir = None @@ -133,26 +129,25 @@ class install_messages(Command): self.skip_build = None def finalize_options(self): - self.set_undefined_options('build', ('build_messages', 'build_dir')) + self.set_undefined_options("build", ("build_messages", "build_dir")) self.set_undefined_options( - 'install', - ('install_data', 'install_dir'), - ('force', 'force'), - ('skip_build', 'skip_build'), + "install", + ("install_data", "install_dir"), + ("force", "force"), + ("skip_build", "skip_build"), ) - self.install_dir = os.path.join(self.install_dir, 'share', 'locale') + self.install_dir = os.path.join(self.install_dir, "share", "locale") def run(self): if not self.skip_build: - self.run_command('build_messages') - catalogs = glob(os.path.join(self.build_dir, '*.gmo')) + self.run_command("build_messages") + catalogs = glob(os.path.join(self.build_dir, "*.gmo")) for c in catalogs: base = os.path.basename(c) base = os.path.splitext(base)[0] - out_dir = os.path.join(self.install_dir, base, 'LC_MESSAGES') + out_dir = os.path.join(self.install_dir, base, "LC_MESSAGES") self.mkpath(out_dir) - out_file = os.path.join(out_dir, - '%s.mo' % self.distribution.get_name()) + out_file = os.path.join(out_dir, "%s.mo" % self.distribution.get_name()) self.copy_file(c, out_file) @@ -164,15 +159,14 @@ class install(_install): def has_manpages(self): return True - _install.sub_commands.append(('install_messages', has_messages)) - _install.sub_commands.append(('install_manpages', has_manpages)) + _install.sub_commands.append(("install_messages", has_messages)) + _install.sub_commands.append(("install_manpages", has_manpages)) ### End of snippet ### class install_manpages(Command): - description = "Install man pages" user_options = [] @@ -184,9 +178,9 @@ class install_manpages(Command): def finalize_options(self): self.set_undefined_options( - 'install', - ('install_data', 'install_dir'), - ('root', 'root'), + "install", + ("install_data", "install_dir"), + ("root", "root"), ) def run(self): @@ -204,14 +198,16 @@ class install_manpages(Command): man_pages = glob("man/*") -setup(packages=[], - scripts=['elogv'], - cmdclass={ - 'extract_messages': messages, - 'merge': merge, - 'build_messages': build_messages, - 'build': build, - 'install_messages': install_messages, - 'install_manpages': install_manpages, - 'install': install, - }) +setup( + packages=[], + scripts=["elogv"], + cmdclass={ + "extract_messages": messages, + "merge": merge, + "build_messages": build_messages, + "build": build, + "install_messages": install_messages, + "install_manpages": install_manpages, + "install": install, + }, +) |