diff --git a/gramps/gui/dbman.py b/gramps/gui/dbman.py index d8abcc6f7..583f679ba 100644 --- a/gramps/gui/dbman.py +++ b/gramps/gui/dbman.py @@ -35,23 +35,7 @@ import time import copy import subprocess from urllib.parse import urlparse - -#------------------------------------------------------------------------- -# -# set up logging -# -#------------------------------------------------------------------------- import logging -LOG = logging.getLogger(".DbManager") - -from gramps.gen.constfunc import win -if win(): - _RCS_FOUND = os.system("rcs -V >nul 2>nul") == 0 - if _RCS_FOUND and "TZ" not in os.environ: - # RCS requires the "TZ" variable be set. - os.environ["TZ"] = str(time.timezone) -else: - _RCS_FOUND = os.system("rcs -V >/dev/null 2>/dev/null") == 0 #------------------------------------------------------------------------- # @@ -68,8 +52,6 @@ from gi.repository import Pango # #------------------------------------------------------------------------- from gramps.gen.const import GRAMPS_LOCALE as glocale -from gramps.gen.plug import BasePluginManager -_ = glocale.translation.gettext from gramps.gui.display import display_help from gramps.gen.const import URL_WIKISTRING, URL_MANUAL_PAGE from .user import User @@ -83,32 +65,49 @@ from .glade import Glade from gramps.gen.db.exceptions import DbException from gramps.gen.config import config from gramps.gui.listmodel import ListModel +from gramps.gen.constfunc import win +from gramps.gen.plug import BasePluginManager +_ = glocale.translation.gettext -_RETURN = Gdk.keyval_from_name("Return") -_KP_ENTER = Gdk.keyval_from_name("KP_Enter") - +#------------------------------------------------------------------------- +# +# set up logging +# +#------------------------------------------------------------------------- +LOG = logging.getLogger(".DbManager") #------------------------------------------------------------------------- # # constants # #------------------------------------------------------------------------- +if win(): + _RCS_FOUND = os.system("rcs -V >nul 2>nul") == 0 + if _RCS_FOUND and "TZ" not in os.environ: + # RCS requires the "TZ" variable be set. + os.environ["TZ"] = str(time.timezone) +else: + _RCS_FOUND = os.system("rcs -V >/dev/null 2>/dev/null") == 0 + +_RETURN = Gdk.keyval_from_name("Return") +_KP_ENTER = Gdk.keyval_from_name("KP_Enter") + WIKI_HELP_PAGE = _('%s_-_Manage_Family_Trees') % URL_MANUAL_PAGE WIKI_HELP_SEC = _('Family_Trees_manager_window') -ARCHIVE = "rev.gramps" -ARCHIVE_V = "rev.gramps,v" +ARCHIVE = "rev.gramps" +ARCHIVE_V = "rev.gramps,v" -NAME_COL = 0 -PATH_COL = 1 -FILE_COL = 2 -DATE_COL = 3 +NAME_COL = 0 +PATH_COL = 1 +FILE_COL = 2 +DATE_COL = 3 DSORT_COL = 4 -OPEN_COL = 5 +OPEN_COL = 5 ICON_COL = 6 BACKEND_COL = 7 -RCS_BUTTON = { True : _('_Extract'), False : _('_Archive') } +RCS_BUTTON = {True : _('_Extract'), False : _('_Archive')} class Information(ManagedWindow): def __init__(self, uistate, data, parent): @@ -122,8 +121,8 @@ class Information(ManagedWindow): self.window.set_default_size(600, 400) s = Gtk.ScrolledWindow() titles = [ - (_('Setting'),0,150), - (_('Value'),1,400) + (_('Setting'), 0, 150), + (_('Value'), 1, 400) ] treeview = Gtk.TreeView() model = ListModel(treeview, titles) @@ -147,11 +146,11 @@ class DbManager(CLIDbManager): create, rename, delete and open databases. """ ICON_MAP = { - CLIDbManager.ICON_NONE : None, - CLIDbManager.ICON_RECOVERY : 'dialog-error', - CLIDbManager.ICON_LOCK : 'gramps-lock', - CLIDbManager.ICON_OPEN : 'document-open', - } + CLIDbManager.ICON_NONE : None, + CLIDbManager.ICON_RECOVERY : 'dialog-error', + CLIDbManager.ICON_LOCK : 'gramps-lock', + CLIDbManager.ICON_OPEN : 'document-open', + } ERROR = ErrorDialog @@ -174,7 +173,7 @@ class DbManager(CLIDbManager): setattr(self, attr, self.glade.get_object(attr)) self.model = None - self.column = None + self.column = None self.lock_file = None self.data_to_delete = None @@ -227,15 +226,14 @@ class DbManager(CLIDbManager): self.top.connect('drag_data_received', self.__drag_data_received) self.top.connect('drag_motion', drag_motion) self.top.connect('drag_drop', drop_cb) - self.define_help_button(self.glade.get_object('help'), - WIKI_HELP_PAGE, WIKI_HELP_SEC) + self.define_help_button( + self.glade.get_object('help'), WIKI_HELP_PAGE, WIKI_HELP_SEC) if _RCS_FOUND: self.rcs.connect('clicked', self.__rcs) def define_help_button(self, button, webpage='', section=''): - button.connect('clicked', lambda x: display_help(webpage, - section)) + button.connect('clicked', lambda x: display_help(webpage, section)) def __button_press(self, obj, event): """ @@ -307,7 +305,7 @@ class DbManager(CLIDbManager): self.close.set_sensitive(False) backend_name = self.get_backend_name_from_dbid("bsddb") if (store.get_value(node, ICON_COL) in [None, ""] and - store.get_value(node, BACKEND_COL).startswith(backend_name)): + store.get_value(node, BACKEND_COL).startswith(backend_name)): self.convert.set_sensitive(True) else: self.convert.set_sensitive(False) @@ -433,7 +431,7 @@ class DbManager(CLIDbManager): If skippath given, the name of skippath is not considered """ iter = self.model.get_iter_first() - while (iter): + while iter: path = self.model.get_path(iter) if path == skippath: pass @@ -548,7 +546,7 @@ class DbManager(CLIDbManager): self.before_change = old_text self.after_change = new_text if not old_text.strip() == new_text.strip(): - if len(path.get_indices()) > 1 : + if len(path.get_indices()) > 1: self.__rename_revision(path, new_text) else: self.__rename_database(path, new_text) @@ -569,9 +567,9 @@ class DbManager(CLIDbManager): rev = self.model.get_value(node, PATH_COL) archive = os.path.join(db_dir, ARCHIVE_V) - cmd = [ "rcs", "-x,v", "-m%s:%s" % (rev, new_text), archive ] + cmd = ["rcs", "-x,v", "-m%s:%s" % (rev, new_text), archive] - proc = subprocess.Popen(cmd, stderr = subprocess.PIPE) + proc = subprocess.Popen(cmd, stderr=subprocess.PIPE) status = proc.wait() message = "\n".join(proc.stderr.readlines()) proc.stderr.close() @@ -598,11 +596,12 @@ class DbManager(CLIDbManager): node = self.model.get_iter(path) filename = self.model.get_value(node, FILE_COL) if self.existing_name(new_text, skippath=path): - DbManager.ERROR(_("Could not rename the Family Tree."), - _("Family Tree already exists, choose a unique name.")) + DbManager.ERROR( + _("Could not rename the Family Tree."), + _("Family Tree already exists, choose a unique name.")) return old_text, new_text = self.rename_database(filename, new_text) - if not (old_text is None): + if old_text is not None: rename_filename(old_text, new_text) self.model.set_value(node, NAME_COL, new_text) #scroll to new position @@ -698,7 +697,7 @@ class DbManager(CLIDbManager): filename = self.model.get_value(node, FILE_COL) try: with open(filename, "r") as name_file: - file_name_to_delete=name_file.read() + file_name_to_delete = name_file.read() remove_filename(file_name_to_delete) directory = self.data_to_delete[1] for (top, dirs, files) in os.walk(directory): @@ -722,9 +721,9 @@ class DbManager(CLIDbManager): rev = self.data_to_delete[PATH_COL] archive = os.path.join(db_dir, ARCHIVE_V) - cmd = [ "rcs", "-x,v", "-o%s" % rev, "-q", archive ] + cmd = ["rcs", "-x,v", "-o%s" % rev, "-q", archive] - proc = subprocess.Popen(cmd, stderr = subprocess.PIPE) + proc = subprocess.Popen(cmd, stderr=subprocess.PIPE) status = proc.wait() message = "\n".join(proc.stderr.readlines()) proc.stderr.close() @@ -858,8 +857,7 @@ class DbManager(CLIDbManager): #First ask user if he is really sure :-) yes_no = QuestionDialog2( _("Repair Family Tree?"), - _( - "If you click %(bold_start)sProceed%(bold_end)s, Gramps will " + _("If you click %(bold_start)sProceed%(bold_end)s, Gramps will " "attempt to recover your Family Tree from the last good " "backup. There are several ways this can cause unwanted " "effects, so %(bold_start)sbackup%(bold_end)s the " @@ -884,12 +882,12 @@ class DbManager(CLIDbManager): "If this is the case, you can disable the repair button " "by removing the file %(recover_file)s in the " "Family Tree directory." - ) % { 'bold_start' : '' , - 'bold_end' : '' , - 'recover_file' : 'need_recover' , - 'gramps_wiki_recover_url' : - URL_WIKISTRING + 'Recover_corrupted_family_tree', - 'dirname' : dirname }, + ) % {'bold_start': '', + 'bold_end': '', + 'recover_file': 'need_recover', + 'gramps_wiki_recover_url': + URL_WIKISTRING + 'Recover_corrupted_family_tree', + 'dirname': dirname}, _("Proceed, I have taken a backup"), _("Stop")) prompt = yes_no.run() @@ -934,7 +932,7 @@ class DbManager(CLIDbManager): """ self.msg.set_label(msg) self.top.get_window().set_cursor(Gdk.Cursor.new(Gdk.CursorType.WATCH)) - while (Gtk.events_pending()): + while Gtk.events_pending(): Gtk.main_iteration() def __end_cursor(self): @@ -1023,15 +1021,15 @@ def find_revisions(name): """ import re - rev = re.compile("\s*revision\s+([\d\.]+)") + rev = re.compile("\s*revision\s+([\d\.]+)") date = re.compile("date:\s+(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)[-+]\d\d;") if not os.path.isfile(name) or not _RCS_FOUND: return [] - rlog = [ "rlog", "-x,v", "-zLT" , name ] + rlog = ["rlog", "-x,v", "-zLT", name] - proc = subprocess.Popen(rlog, stdout = subprocess.PIPE) + proc = subprocess.Popen(rlog, stdout=subprocess.PIPE) proc.wait() revlist = [] @@ -1051,9 +1049,9 @@ def find_revisions(name): continue match = date.match(line) if match: - date_str = time.strftime('%x %X', - time.strptime(match.groups()[0], '%Y-%m-%d %H:%M:%S')) - + date_str = time.strftime( + '%x %X', time.strptime(match.groups()[0], + '%Y-%m-%d %H:%M:%S')) get_next = True continue if get_next: @@ -1071,10 +1069,10 @@ def check_out(dbase, rev, path, user): Checks out the revision from rcs, and loads the resulting XML file into the database. """ - co_cmd = [ "co", "-x,v", "-q%s" % rev] + [ os.path.join(path, ARCHIVE), - os.path.join(path, ARCHIVE_V)] + co_cmd = ["co", "-x,v", "-q%s" % rev] + [os.path.join(path, ARCHIVE), + os.path.join(path, ARCHIVE_V)] - proc = subprocess.Popen(co_cmd, stderr = subprocess.PIPE) + proc = subprocess.Popen(co_cmd, stderr=subprocess.PIPE) status = proc.wait() message = "\n".join(proc.stderr.readlines()) proc.stderr.close() @@ -1097,12 +1095,12 @@ def check_out(dbase, rev, path, user): rdr(dbase, xml_file, user) os.unlink(xml_file) -def check_in(dbase, filename, user, cursor_func = None): +def check_in(dbase, filename, user, cursor_func=None): """ Checks in the specified file into RCS """ - init = [ "rcs", '-x,v', '-i', '-U', '-q', '-t-"Gramps database"' ] - ci_cmd = [ "ci", '-x,v', "-q", "-f" ] + init = ["rcs", '-x,v', '-i', '-U', '-q', '-t-"Gramps database"'] + ci_cmd = ["ci", '-x,v', "-q", "-f"] archive_name = filename + ",v" glade = Glade(toplevel='comment') @@ -1114,8 +1112,7 @@ def check_in(dbase, filename, user, cursor_func = None): if not os.path.isfile(archive_name): cmd = init + [archive_name] - proc = subprocess.Popen(cmd, - stderr = subprocess.PIPE) + proc = subprocess.Popen(cmd, stderr=subprocess.PIPE) status = proc.wait() message = "\n".join(proc.stderr.readlines()) proc.stderr.close() @@ -1140,9 +1137,8 @@ def check_in(dbase, filename, user, cursor_func = None): if cursor_func: cursor_func(_("Saving archive...")) - cmd = ci_cmd + ['-m%s' % comment, filename, archive_name ] - proc = subprocess.Popen(cmd, - stderr = subprocess.PIPE) + cmd = ci_cmd + ['-m%s' % comment, filename, archive_name] + proc = subprocess.Popen(cmd, stderr=subprocess.PIPE) status = proc.wait() message = "\n".join(proc.stderr.readlines())