From f3b5f75e372268702e644e697cef8cfe7ab41c41 Mon Sep 17 00:00:00 2001 From: Paul Culley Date: Mon, 3 Sep 2018 21:03:17 -0500 Subject: [PATCH] Fix strings containing deprecated illegal escape sequences (#648) Python 3.6 and above has deprecated illegal string escape sequences. Escape sequences are preceded by a '\' and valid ones are "\n\t\r" etc. Illegal ones are not in the list https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals. Previous to Python 3.6 these illegal sequences were ignored and the '\' was left in place. Pylint has been noting these for a while now. This PR corrects these sequences in Gramps. I used find . -name "*.py" | xargs -t -n 1 python3 -Wd -m py_compile 2>&1 | grep Depre to locate the failing strings. --- gramps/gen/config.py | 2 +- gramps/gen/datehandler/_date_ar.py | 12 +- gramps/gen/datehandler/_date_bg.py | 12 +- gramps/gen/datehandler/_date_ca.py | 14 +-- gramps/gen/datehandler/_date_da.py | 9 +- gramps/gen/datehandler/_date_de.py | 18 +-- gramps/gen/datehandler/_date_el.py | 14 +-- gramps/gen/datehandler/_date_es.py | 14 +-- gramps/gen/datehandler/_date_fi.py | 10 +- gramps/gen/datehandler/_date_hr.py | 10 +- gramps/gen/datehandler/_date_hu.py | 18 +-- gramps/gen/datehandler/_date_is.py | 15 +-- gramps/gen/datehandler/_date_it.py | 10 +- gramps/gen/datehandler/_date_ja.py | 10 +- gramps/gen/datehandler/_date_lt.py | 17 +-- gramps/gen/datehandler/_date_nb.py | 11 +- gramps/gen/datehandler/_date_nl.py | 16 ++- gramps/gen/datehandler/_date_pl.py | 15 ++- gramps/gen/datehandler/_date_pt.py | 12 +- gramps/gen/datehandler/_date_ru.py | 12 +- gramps/gen/datehandler/_date_sk.py | 10 +- gramps/gen/datehandler/_date_sl.py | 16 +-- gramps/gen/datehandler/_date_sr.py | 17 +-- gramps/gen/datehandler/_date_sv.py | 16 +-- gramps/gen/datehandler/_date_uk.py | 12 +- gramps/gen/datehandler/_date_zh_CN.py | 10 +- gramps/gen/datehandler/_date_zh_TW.py | 10 +- gramps/gen/datehandler/_dateparser.py | 108 +++++++++--------- gramps/gen/display/name.py | 14 +-- gramps/gen/filters/rules/_changedsincebase.py | 12 +- gramps/gen/lib/place.py | 8 +- gramps/gen/mime/_winmime.py | 2 +- gramps/gen/soundex.py | 2 +- gramps/gen/utils/db.py | 2 +- gramps/gui/dbman.py | 4 +- gramps/gui/editors/editlink.py | 2 +- gramps/plugins/docgen/latexdoc.py | 5 +- gramps/plugins/docgen/rtfdoc.py | 6 +- .../plugins/export/test/exportvcard_test.py | 2 +- gramps/plugins/importer/importgeneweb.py | 11 +- gramps/plugins/importer/importxml.py | 2 +- .../plugins/importer/test/importvcard_test.py | 9 +- gramps/plugins/tool/reorderids.py | 4 +- setup.py | 3 +- windows/nonAIO/builder/build_GrampsWin32.py | 2 +- windows/nonAIO/builder/check_gtk_install.py | 3 +- windows/nonAIO/builder/make_launcher.py | 2 +- windows/nonAIO/check_gtk_install.py | 3 +- 48 files changed, 285 insertions(+), 263 deletions(-) diff --git a/gramps/gen/config.py b/gramps/gen/config.py index ebd971ec6..edb711f1e 100644 --- a/gramps/gen/config.py +++ b/gramps/gen/config.py @@ -325,7 +325,7 @@ if not os.path.exists(CONFIGMAN.filename): # check previous version of gramps: fullpath, filename = os.path.split(CONFIGMAN.filename) fullpath, previous = os.path.split(fullpath) - match = re.match('gramps(\d*)', previous) + match = re.match(r'gramps(\d*)', previous) if match: # cycle back looking for previous versions of gramps for i in range(1, 20): # check back 2 gramps versions diff --git a/gramps/gen/datehandler/_date_ar.py b/gramps/gen/datehandler/_date_ar.py index 8b96bfca1..d471b4ecc 100644 --- a/gramps/gen/datehandler/_date_ar.py +++ b/gramps/gen/datehandler/_date_ar.py @@ -124,12 +124,12 @@ class DateParserAR(DateParser): _span_2 = ['إلى'] _range_1 = ['بين'] _range_2 = ['و'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_bg.py b/gramps/gen/datehandler/_date_bg.py index 3ea050a8e..e9f9ae85e 100644 --- a/gramps/gen/datehandler/_date_bg.py +++ b/gramps/gen/datehandler/_date_bg.py @@ -166,12 +166,12 @@ class DateParserBG(DateParser): _span_2 = ['до'] _range_1 = ['между'] _range_2 = ['и'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_ca.py b/gramps/gen/datehandler/_date_ca.py index 688c990f1..7f1ffdddb 100644 --- a/gramps/gen/datehandler/_date_ca.py +++ b/gramps/gen/datehandler/_date_ca.py @@ -98,14 +98,14 @@ class DateParserCA(DateParser): DateParser.init_strings(self) _span_1 = ['des de'] _span_2 = ['fins a'] - _range_1 = ['entre', 'ent\.', 'ent'] + _range_1 = ['entre', r'ent\.', 'ent'] _range_2 = ['i'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_da.py b/gramps/gen/datehandler/_date_da.py index fcd0a9b19..e7d7565a0 100644 --- a/gramps/gen/datehandler/_date_da.py +++ b/gramps/gen/datehandler/_date_da.py @@ -89,10 +89,11 @@ class DateParserDa(DateParser): def init_strings(self): DateParser.init_strings(self) - self._span = re.compile("(fra)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", - re.IGNORECASE) - self._range = re.compile("(mellem)\s+(?P.+)\s+og\s+(?P.+)", - re.IGNORECASE) + self._span = re.compile( + r"(fra)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", + re.IGNORECASE) + self._range = re.compile( + r"(mellem)\s+(?P.+)\s+og\s+(?P.+)", re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_de.py b/gramps/gen/datehandler/_date_de.py index 4bb37cc8f..88ac155e4 100644 --- a/gramps/gen/datehandler/_date_de.py +++ b/gramps/gen/datehandler/_date_de.py @@ -248,14 +248,16 @@ class DateParserDE(DateParser): def init_strings(self): DateParser.init_strings(self) - self._span = re.compile("(von|vom)\s+(?P.+)\s+(bis)\s+(?P.+)", - re.IGNORECASE) - self._range = re.compile("zwischen\s+(?P.+)\s+und\s+(?P.+)", - re.IGNORECASE) - self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str, - re.IGNORECASE) - self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str, - re.IGNORECASE) + self._span = re.compile( + r"(von|vom)\s+(?P.+)\s+(bis)\s+(?P.+)", re.IGNORECASE) + self._range = re.compile( + r"zwischen\s+(?P.+)\s+und\s+(?P.+)", re.IGNORECASE) + self._text2 = re.compile( + r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str, + re.IGNORECASE) + self._jtext2 = re.compile( + r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str, + re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_el.py b/gramps/gen/datehandler/_date_el.py index 5668f9a69..b5209f5f6 100644 --- a/gramps/gen/datehandler/_date_el.py +++ b/gramps/gen/datehandler/_date_el.py @@ -116,14 +116,14 @@ class DateParserEL(DateParser): DateParser.init_strings(self) _span_1 = ['από'] _span_2 = ['έως'] - _range_1 = ['μετ', 'μετ\.', 'μεταξύ'] + _range_1 = ['μετ', r'μετ\.', 'μεταξύ'] _range_2 = ['και'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_es.py b/gramps/gen/datehandler/_date_es.py index f1ce90786..089a4c039 100644 --- a/gramps/gen/datehandler/_date_es.py +++ b/gramps/gen/datehandler/_date_es.py @@ -97,14 +97,14 @@ class DateParserES(DateParser): DateParser.init_strings(self) _span_1 = ['de'] _span_2 = ['a'] - _range_1 = ['entre', 'ent\.', 'ent'] + _range_1 = ['entre', r'ent\.', 'ent'] _range_2 = ['y'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_fi.py b/gramps/gen/datehandler/_date_fi.py index 18f31e4f0..0954baf0f 100644 --- a/gramps/gen/datehandler/_date_fi.py +++ b/gramps/gen/datehandler/_date_fi.py @@ -98,12 +98,12 @@ class DateParserFI(DateParser): def init_strings(self): DateParser.init_strings(self) - self._text2 = re.compile('(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' - % self._mon_str, re.IGNORECASE) - self._span = re.compile("(?P.+)\s+(-)\s+(?P.+)", - re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?\.?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' + % self._mon_str, re.IGNORECASE) + self._span = re.compile(r"(?P.+)\s+(-)\s+(?P.+)", + re.IGNORECASE) self._range = re.compile( - "(vuosien\s*)?(?P.+)\s+ja\s+(?P.+)\s+välillä", + r"(vuosien\s*)?(?P.+)\s+ja\s+(?P.+)\s+välillä", re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_hr.py b/gramps/gen/datehandler/_date_hr.py index a411b8649..4a9d38de4 100644 --- a/gramps/gen/datehandler/_date_hr.py +++ b/gramps/gen/datehandler/_date_hr.py @@ -83,11 +83,11 @@ class DateParserHR(DateParser): _span_2 = ['do'] _range_1 = ['između'] _range_2 = ['i'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_hu.py b/gramps/gen/datehandler/_date_hu.py index 567adf53c..c601aa7a0 100644 --- a/gramps/gen/datehandler/_date_hu.py +++ b/gramps/gen/datehandler/_date_hu.py @@ -228,19 +228,19 @@ class DateParserHU(DateParser): DateParser.init_strings(self) self._numeric = re.compile( - "((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$") + r"((\d+)[/\.])?\s*((\d+)[/\.])?\s*(\d+)[/\. ]?$") # this next RE has the (possibly-slashed) year at the string's start - self._text2 = re.compile('((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$' - % self._mon_str, re.IGNORECASE) - _span_1 = ['-tó\(ő\)l', '-tól', '-től'] + self._text2 = re.compile(r'((\d+)(/\d+)?\.)?\s+?%s\.?\s*(\d+\.)?\s*$' + % self._mon_str, re.IGNORECASE) + _span_1 = [r'-tó\(ő\)l', '-tól', '-től'] _span_2 = ['-ig'] _range_1 = ['és'] _range_2 = ['között'] - self._span = re.compile("(?P.+)(%s)\s+(?P.+)(%s)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(?P.+)\s+(%s)\s+(?P.+)\s+(%s)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(?P.+)(%s)\s+(?P.+)(%s)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(?P.+)\s+(%s)\s+(?P.+)\s+(%s)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) diff --git a/gramps/gen/datehandler/_date_is.py b/gramps/gen/datehandler/_date_is.py index bbc553cac..d2ba32c36 100644 --- a/gramps/gen/datehandler/_date_is.py +++ b/gramps/gen/datehandler/_date_is.py @@ -90,22 +90,23 @@ class DateParserIs(DateParser): } def dhformat_changed(self): - self._dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*%(\S).*") + self._dhformat_parse = re.compile(r".*%(\S).*%(\S).*%(\S).*%(\S).*") def init_strings(self): DateParser.init_strings(self) # match 'day. month year' format - self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*$' + self._text2 = re.compile(r'(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*$' % self._mon_str, re.IGNORECASE) # match 'short-day day.month year' format short_day_str = '(' + '|'.join(self._ds.short_days[1:]) + ')' - self._numeric = re.compile("%s\s*((\d+)[\.]\s*)?((\d+)\s*)?(\d+)\s*$" + self._numeric = re.compile(r"%s\s*((\d+)[\.]\s*)?((\d+)\s*)?(\d+)\s*$" % short_day_str, re.IGNORECASE) - self._span = re.compile("(frá)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", - re.IGNORECASE) - self._range = re.compile("(milli)\s+(?P.+)\s+og\s+(?P.+)", - re.IGNORECASE) + self._span = re.compile( + r"(frá)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", + re.IGNORECASE) + self._range = re.compile( + r"(milli)\s+(?P.+)\s+og\s+(?P.+)", re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_it.py b/gramps/gen/datehandler/_date_it.py index 863c5d4f8..06dc531e7 100644 --- a/gramps/gen/datehandler/_date_it.py +++ b/gramps/gen/datehandler/_date_it.py @@ -96,12 +96,12 @@ class DateParserIT(DateParser): _span_2 = ['al', 'a'] _range_1 = ['tra', 'fra'] _range_2 = ['e'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_ja.py b/gramps/gen/datehandler/_date_ja.py index d60d6fca2..16d5a2458 100644 --- a/gramps/gen/datehandler/_date_ja.py +++ b/gramps/gen/datehandler/_date_ja.py @@ -166,13 +166,13 @@ class DateParserJA(DateParser): _span_2 = ['まで', ''] _range_1 = ['から', 'と', '~', '〜'] _range_2 = ['までの間', 'の間'] - self._span = re.compile("(?P.+)(%s)(?P\d+)(%s)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(?P.+)(%s)(?P.+)(%s)" % + self._span = re.compile(r"(?P.+)(%s)(?P\d+)(%s)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(?P.+)(%s)(?P.+)(%s)" % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) - self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") + self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_lt.py b/gramps/gen/datehandler/_date_lt.py index 072ee8747..932ae609d 100644 --- a/gramps/gen/datehandler/_date_lt.py +++ b/gramps/gen/datehandler/_date_lt.py @@ -131,18 +131,19 @@ class DateParserLT(DateParser): def init_strings(self): DateParser.init_strings(self) # this next RE has the (possibly-slashed) year at the string's start - self._text2 = re.compile('((\d+)(/\d+)?)?\s+?m\.\s+%s\s*(\d+)?\s*d?\.?$' - % self._mon_str, re.IGNORECASE) + self._text2 = re.compile( + r'((\d+)(/\d+)?)?\s+?m\.\s+%s\s*(\d+)?\s*d?\.?$' + % self._mon_str, re.IGNORECASE) _span_1 = ['nuo'] _span_2 = ['iki'] _range_1 = ['tarp'] _range_2 = ['ir'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), - re.IGNORECASE) + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile( + r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_nb.py b/gramps/gen/datehandler/_date_nb.py index 676290437..f126e43a4 100644 --- a/gramps/gen/datehandler/_date_nb.py +++ b/gramps/gen/datehandler/_date_nb.py @@ -90,11 +90,12 @@ class DateParserNb(DateParser): def init_strings(self): DateParser.init_strings(self) # match day. month year - self._numeric = re.compile("((\d+)[\.])?\s*((\d+))?\s*(\d+)$") - self._span = re.compile("(fra)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", - re.IGNORECASE) - self._range = re.compile("(mellom)\s+(?P.+)\s+og\s+(?P.+)", - re.IGNORECASE) + self._numeric = re.compile(r"((\d+)[\.])?\s*((\d+))?\s*(\d+)$") + self._span = re.compile( + r"(fra)?\s*(?P.+)\s*(til|--|–)\s*(?P.+)", + re.IGNORECASE) + self._range = re.compile( + r"(mellom)\s+(?P.+)\s+og\s+(?P.+)", re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_nl.py b/gramps/gen/datehandler/_date_nl.py index 5da036cfd..0c3a8beb1 100644 --- a/gramps/gen/datehandler/_date_nl.py +++ b/gramps/gen/datehandler/_date_nl.py @@ -119,16 +119,14 @@ class DateParserNL(DateParser): def init_strings(self): DateParser.init_strings(self) - self._span = re.compile("(van)\s+(?P.+)\s+(tot)\s+(?P.+)", + self._span = re.compile( + r"(van)\s+(?P.+)\s+(tot)\s+(?P.+)", re.IGNORECASE) + self._range = re.compile(r"tussen\s+(?P.+)\s+en\s+(?P.+)", re.IGNORECASE) - self._range = re.compile("tussen\s+(?P.+)\s+en\s+(?P.+)", - re.IGNORECASE) - self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' - % self._mon_str, - re.IGNORECASE) - self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' - % self._jmon_str, - re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' + % self._mon_str, re.IGNORECASE) + self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' + % self._jmon_str, re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_pl.py b/gramps/gen/datehandler/_date_pl.py index 3bec0a5e0..a41179ace 100644 --- a/gramps/gen/datehandler/_date_pl.py +++ b/gramps/gen/datehandler/_date_pl.py @@ -156,13 +156,16 @@ class DateParserPL(DateParser): def init_strings(self): DateParser.init_strings(self) - self._span = re.compile("(od)\s+(?P.+)\s+(do)\s+(?P.+)", re.IGNORECASE) + self._span = re.compile( + r"(od)\s+(?P.+)\s+(do)\s+(?P.+)", re.IGNORECASE) # Also handle a common mistakes - self._range = re.compile("((?:po)?mi(?:ę|e)dzy)\s+(?P.+)\s+(a)\s+(?P.+)", re.IGNORECASE) - self._text2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str, - re.IGNORECASE) - self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str, - re.IGNORECASE) + self._range = re.compile( + r"((?:po)?mi(?:ę|e)dzy)\s+(?P.+)\s+(a)\s+(?P.+)", + re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' + % self._mon_str, re.IGNORECASE) + self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' + % self._jmon_str, re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_pt.py b/gramps/gen/datehandler/_date_pt.py index 2de57bbf8..4d55153d0 100644 --- a/gramps/gen/datehandler/_date_pt.py +++ b/gramps/gen/datehandler/_date_pt.py @@ -102,13 +102,13 @@ class DateParserPT(DateParser): DateParser.init_strings(self) _span_1 = ['de'] _span_2 = ['a'] - _range_1 = ['entre','ent\.','ent'] + _range_1 = ['entre', r'ent\.', 'ent'] _range_2 = ['e'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_ru.py b/gramps/gen/datehandler/_date_ru.py index f435d4083..3682247fd 100644 --- a/gramps/gen/datehandler/_date_ru.py +++ b/gramps/gen/datehandler/_date_ru.py @@ -94,13 +94,13 @@ class DateParserRU(DateParser): _span_1 = ['с', 'от'] #_span_2 = ['по', 'до'] # <-- clashes with bce parsing :-( _span_2 = ['по'] - _range_1 = ['между', 'меж\.', 'меж'] + _range_1 = ['между', r'меж\.', 'меж'] _range_2 = ['и'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_sk.py b/gramps/gen/datehandler/_date_sk.py index 24c785e9e..473ac77f7 100644 --- a/gramps/gen/datehandler/_date_sk.py +++ b/gramps/gen/datehandler/_date_sk.py @@ -86,11 +86,11 @@ class DateParserSK(DateParser): _span_2 = ['do'] _range_1 = ['medzi'] _range_2 = ['a'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_sl.py b/gramps/gen/datehandler/_date_sl.py index 553d15e5e..a0aa8f648 100644 --- a/gramps/gen/datehandler/_date_sl.py +++ b/gramps/gen/datehandler/_date_sl.py @@ -88,18 +88,18 @@ class DateParserSL(DateParser): DateParser.init_strings(self) # match 'Day. MONTH year.' format with or without dots - self._text2 = re.compile('(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$' - % self._mon_str, re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?\.?\s*?%s\.?\s*((\d+)(/\d+)?)?\s*\.?$' + % self._mon_str, re.IGNORECASE) # match Day.Month.Year. - self._numeric = re.compile("((\d+)[/\.-])?\s*((\d+)[/\.-])?\s*(\d+)\.?$") + self._numeric = re.compile( + r"((\d+)[/\.-])?\s*((\d+)[/\.-])?\s*(\d+)\.?$") - self._span = re.compile("od\s+(?P.+)\s+do\s+(?P.+)", + self._span = re.compile(r"od\s+(?P.+)\s+do\s+(?P.+)", re.IGNORECASE) self._range = re.compile( - "med\s+(?P.+)\s+in\s+(?P.+)", - re.IGNORECASE) - self._jtext2 = re.compile('(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?'\ - % self._jmon_str, re.IGNORECASE) + r"med\s+(?P.+)\s+in\s+(?P.+)", re.IGNORECASE) + self._jtext2 = re.compile(r'(\d+)?.?\s+?%s\s*((\d+)(/\d+)?)?' + % self._jmon_str, re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_sr.py b/gramps/gen/datehandler/_date_sr.py index c77c16fb6..d348a9580 100644 --- a/gramps/gen/datehandler/_date_sr.py +++ b/gramps/gen/datehandler/_date_sr.py @@ -208,21 +208,22 @@ class DateParserSR(DateParser): """ DateParser.init_strings(self) # match 'Day. MONTH year.' format with or without dots - self._text2 = re.compile('(\d+)?\.?\s*?%s\s*((\d+)(/\d+)?)?\.?\s*$' - % self._mon_str, re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?\.?\s*?%s\s*((\d+)(/\d+)?)?\.?\s*$' + % self._mon_str, re.IGNORECASE) # match Day.Month.Year. - self._numeric = re.compile("((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$") + self._numeric = re.compile( + r"((\d+)[/\. ])?\s*((\d+)[/\.])?\s*(\d+)\.?$") _span_1 = ['od', 'од'] _span_2 = ['do', 'до'] _range_1 = ['između', 'између'] _range_2 = ['i', 'и'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_sv.py b/gramps/gen/datehandler/_date_sv.py index 57dc65c12..9c215f571 100644 --- a/gramps/gen/datehandler/_date_sv.py +++ b/gramps/gen/datehandler/_date_sv.py @@ -95,14 +95,16 @@ class DateParserSv(DateParser): def init_strings(self): """ Define, in Swedish, span and range regular expressions""" DateParser.init_strings(self) - self._numeric = re.compile("((\d+)/)?\s*((\d+)/)?\s*(\d+)[/ ]?$") + self._numeric = re.compile(r"((\d+)/)?\s*((\d+)/)?\s*(\d+)[/ ]?$") # this next RE has the (possibly-slashed) year at the string's start - self._text2 = re.compile('((\d+)(/\d+)?)?\s+?%s\s*(\d+)?\s*$' - % self._mon_str, re.IGNORECASE) - self._span = re.compile("(från)?\s*(?P.+)\s*(till|--|–)\s*(?P.+)", - re.IGNORECASE) - self._range = re.compile("(mellan)\s+(?P.+)\s+och\s+(?P.+)", - re.IGNORECASE) + self._text2 = re.compile(r'((\d+)(/\d+)?)?\s+?%s\s*(\d+)?\s*$' + % self._mon_str, re.IGNORECASE) + self._span = re.compile( + r"(från)?\s*(?P.+)\s*(till|--|–)\s*(?P.+)", + re.IGNORECASE) + self._range = re.compile( + r"(mellan)\s+(?P.+)\s+och\s+(?P.+)", + re.IGNORECASE) #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_uk.py b/gramps/gen/datehandler/_date_uk.py index 33eed34c1..82a468a7f 100644 --- a/gramps/gen/datehandler/_date_uk.py +++ b/gramps/gen/datehandler/_date_uk.py @@ -108,14 +108,14 @@ class DateParserUK(DateParser): _span_1 = ['з', 'від'] # b.c.e. pattern also have "до" so skip "до н." - _span_2 = ['по', 'до(?!\s+н)'] + _span_2 = ['по', r'до(?!\s+н)'] _range_1 = ['між'] _range_2 = ['і', 'та'] - self._span = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % - ('|'.join(_range_1), '|'.join(_range_2)), + self._span = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)\s+(?P.+)\s+(%s)\s+(?P.+)" + % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) #------------------------------------------------------------------------- diff --git a/gramps/gen/datehandler/_date_zh_CN.py b/gramps/gen/datehandler/_date_zh_CN.py index df881134f..98ec011ec 100644 --- a/gramps/gen/datehandler/_date_zh_CN.py +++ b/gramps/gen/datehandler/_date_zh_CN.py @@ -124,13 +124,13 @@ class DateParserZH_CN(DateParser): _span_2 = ['至'] _range_1 = ['介于'] _range_2 = ['与'] - self._span = re.compile("(%s)(?P.+)(%s)(?P\d+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)(?P.+)(%s)(?P\d+)" % + self._span = re.compile(r"(%s)(?P.+)(%s)(?P\d+)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)(?P.+)(%s)(?P\d+)" % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) - self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") + self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_date_zh_TW.py b/gramps/gen/datehandler/_date_zh_TW.py index 3ff683ad5..da3935108 100644 --- a/gramps/gen/datehandler/_date_zh_TW.py +++ b/gramps/gen/datehandler/_date_zh_TW.py @@ -124,13 +124,13 @@ class DateParserZH_TW(DateParser): _span_2 = ['至'] _range_1 = ['介於'] _range_2 = ['與'] - self._span = re.compile("(%s)(?P.+)(%s)(?P\d+)" % - ('|'.join(_span_1), '|'.join(_span_2)), - re.IGNORECASE) - self._range = re.compile("(%s)(?P.+)(%s)(?P\d+)" % + self._span = re.compile(r"(%s)(?P.+)(%s)(?P\d+)" % + ('|'.join(_span_1), '|'.join(_span_2)), + re.IGNORECASE) + self._range = re.compile(r"(%s)(?P.+)(%s)(?P\d+)" % ('|'.join(_range_1), '|'.join(_range_2)), re.IGNORECASE) - self._numeric = re.compile("((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") + self._numeric = re.compile(r"((\d+)年\s*)?((\d+)月\s*)?(\d+)?日?\s*$") #------------------------------------------------------------------------- # diff --git a/gramps/gen/datehandler/_dateparser.py b/gramps/gen/datehandler/_dateparser.py index 6c197073c..74e5dfd12 100644 --- a/gramps/gen/datehandler/_dateparser.py +++ b/gramps/gen/datehandler/_dateparser.py @@ -193,7 +193,7 @@ class DateParser: converted, the text string is assigned. """ - _dhformat_parse = re.compile(".*%(\S).*%(\S).*%(\S).*") + _dhformat_parse = re.compile(r".*%(\S).*%(\S).*%(\S).*") # RFC-2822 only uses capitalized English abbreviated names, no locales. _rfc_days = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat') @@ -423,63 +423,69 @@ class DateParser: # bce, calendar type and quality may be either at the end or at # the beginning of the given date string, therefore they will # be parsed from the middle and will be in match.group(2). - self._bce_re = re.compile("(.*)\s+%s( ?.*)" % self._bce_str) + self._bce_re = re.compile(r"(.*)\s+%s( ?.*)" % self._bce_str) - self._cal = re.compile("(.*)\s+\(%s\)( ?.*)" % self._cal_str, - re.IGNORECASE) - self._calny = re.compile("(.*)\s+\(%s,\s*%s\)( ?.*)" % (self._cal_str, - self._ny_str), - re.IGNORECASE) - self._calny_iso = re.compile("(.*)\s+\(%s,\s*(\d{1,2}-\d{1,2})\)( ?.*)" % self._cal_str, - re.IGNORECASE) + self._cal = re.compile(r"(.*)\s+\(%s\)( ?.*)" % self._cal_str, + re.IGNORECASE) + self._calny = re.compile(r"(.*)\s+\(%s,\s*%s\)( ?.*)" % + (self._cal_str, self._ny_str), re.IGNORECASE) + self._calny_iso = re.compile( + r"(.*)\s+\(%s,\s*(\d{1,2}-\d{1,2})\)( ?.*)" % self._cal_str, + re.IGNORECASE) - self._ny = re.compile("(.*)\s+\(%s\)( ?.*)" % self._ny_str, - re.IGNORECASE) - self._ny_iso = re.compile("(.*)\s+\((\d{1,2}-\d{1,2})\)( ?.*)") + self._ny = re.compile(r"(.*)\s+\(%s\)( ?.*)" % self._ny_str, + re.IGNORECASE) + self._ny_iso = re.compile(r"(.*)\s+\((\d{1,2}-\d{1,2})\)( ?.*)") - self._qual = re.compile("(.* ?)%s\s+(.+)" % self._qual_str, - re.IGNORECASE) + self._qual = re.compile(r"(.* ?)%s\s+(.+)" % self._qual_str, + re.IGNORECASE) - self._span = re.compile("(from)\s+(?P.+)\s+to\s+(?P.+)", + self._span = re.compile(r"(from)\s+(?P.+)\s+to\s+(?P.+)", + re.IGNORECASE) + self._range = re.compile( + r"(bet|bet.|between)\s+(?P.+)\s+and\s+(?P.+)", + re.IGNORECASE) + self._modifier = re.compile(r'%s\s+(.*)' % self._mod_str, re.IGNORECASE) - self._range = re.compile("(bet|bet.|between)\s+(?P.+)\s+and\s+(?P.+)", - re.IGNORECASE) - self._modifier = re.compile('%s\s+(.*)' % self._mod_str, - re.IGNORECASE) - self._modifier_after = re.compile('(.*)\s+%s' % self._mod_after_str, + self._modifier_after = re.compile(r'(.*)\s+%s' % self._mod_after_str, re.IGNORECASE) - self._abt2 = re.compile('<(.*)>', re.IGNORECASE) - self._text = re.compile('%s\.?(\s+\d+)?\s*,?\s+((\d+)(/\d+)?)?\s*$' - % self._mon_str, re.IGNORECASE) + self._abt2 = re.compile('<(.*)>', re.IGNORECASE) + self._text = re.compile(r'%s\.?(\s+\d+)?\s*,?\s+((\d+)(/\d+)?)?\s*$' + % self._mon_str, re.IGNORECASE) # this next RE has the (possibly-slashed) year at the string's end - self._text2 = re.compile('(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' % self._mon_str, - re.IGNORECASE) - self._jtext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str, - re.IGNORECASE) - self._jtext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str, - re.IGNORECASE) - self._ftext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str, - re.IGNORECASE) - self._ftext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str, - re.IGNORECASE) - self._ptext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str, - re.IGNORECASE) - self._ptext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str, - re.IGNORECASE) - self._itext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._imon_str, - re.IGNORECASE) - self._itext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._imon_str, - re.IGNORECASE) - self._stext = re.compile('%s\.?\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._smon_str, - re.IGNORECASE) - self._stext2 = re.compile('(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' % self._smon_str, - re.IGNORECASE) - self._numeric = re.compile("((\d+)[/\.]\s*)?((\d+)[/\.]\s*)?(\d+)\s*$") - self._iso = re.compile("(\d+)(/(\d+))?-(\d+)-(\d+)\s*$") - self._isotimestamp = re.compile("^\s*?(\d{4})([01]\d)([0123]\d)(?:(?:[012]\d[0-5]\d[0-5]\d)|(?:\s+[012]\d:[0-5]\d(?::[0-5]\d)?))?\s*?$") - self._rfc = re.compile("(%s,)?\s+(\d|\d\d)\s+%s\s+(\d+)\s+\d\d:\d\d(:\d\d)?\s+(\+|-)\d\d\d\d" - % (self._rfc_day_str, self._rfc_mon_str)) - self._today = re.compile("^\s*%s\s*$" % self._today_str, re.IGNORECASE) + self._text2 = re.compile(r'(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' + % self._mon_str, re.IGNORECASE) + self._jtext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' + % self._jmon_str, re.IGNORECASE) + self._jtext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' + % self._jmon_str, re.IGNORECASE) + self._ftext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' + % self._fmon_str, re.IGNORECASE) + self._ftext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' + % self._fmon_str, re.IGNORECASE) + self._ptext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' + % self._pmon_str, re.IGNORECASE) + self._ptext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' + % self._pmon_str, re.IGNORECASE) + self._itext = re.compile(r'%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' + % self._imon_str, re.IGNORECASE) + self._itext2 = re.compile(r'(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' + % self._imon_str, re.IGNORECASE) + self._stext = re.compile(r'%s\.?\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' + % self._smon_str, re.IGNORECASE) + self._stext2 = re.compile(r'(\d+)?\s+?%s\.?\s*((\d+)(/\d+)?)?\s*$' + % self._smon_str, re.IGNORECASE) + self._numeric = re.compile( + r"((\d+)[/\.]\s*)?((\d+)[/\.]\s*)?(\d+)\s*$") + self._iso = re.compile(r"(\d+)(/(\d+))?-(\d+)-(\d+)\s*$") + self._isotimestamp = re.compile( + r"^\s*?(\d{4})([01]\d)([0123]\d)(?:(?:[012]\d[0-5]\d[0-5]\d)|" + r"(?:\s+[012]\d:[0-5]\d(?::[0-5]\d)?))?\s*?$") + self._rfc = re.compile( + r"(%s,)?\s+(\d|\d\d)\s+%s\s+(\d+)\s+\d\d:\d\d(:\d\d)?\s+" + r"(\+|-)\d\d\d\d" % (self._rfc_day_str, self._rfc_mon_str)) + self._today = re.compile(r"^\s*%s\s*$" % self._today_str, + re.IGNORECASE) def _get_int(self, val): """ diff --git a/gramps/gen/display/name.py b/gramps/gen/display/name.py index 6ab47682f..8cb274e0e 100644 --- a/gramps/gen/display/name.py +++ b/gramps/gen/display/name.py @@ -1059,13 +1059,13 @@ class NameDisplay: format_str = format_str[1:] else: patterns = [ - ",\W*\"%(" + ("|".join(codes)) + ")\"", # ,\W*"%s" - ",\W*\(%(" + ("|".join(codes)) + ")\)", # ,\W*(%s) - ",\W*%(" + ("|".join(codes)) + ")", # ,\W*%s - "\"%(" + ("|".join(codes)) + ")\"", # "%s" - "_%(" + ("|".join(codes)) + ")_", # _%s_ - "\(%(" + ("|".join(codes)) + ")\)", # (%s) - "%(" + ("|".join(codes)) + ")", # %s + ",\\W*\"%(" + ("|".join(codes)) + ")\"", # ,\W*"%s" + ",\\W*\\(%(" + ("|".join(codes)) + ")\\)", # ,\W*(%s) + ",\\W*%(" + ("|".join(codes)) + ")", # ,\W*%s + "\"%(" + ("|".join(codes)) + ")\"", # "%s" + "_%(" + ("|".join(codes)) + ")_", # _%s_ + "\\(%(" + ("|".join(codes)) + ")\\)", # (%s) + "%(" + ("|".join(codes)) + ")", # %s ] new_fmt = format_str diff --git a/gramps/gen/filters/rules/_changedsincebase.py b/gramps/gen/filters/rules/_changedsincebase.py index 17a86758d..b8af93df4 100644 --- a/gramps/gen/filters/rules/_changedsincebase.py +++ b/gramps/gen/filters/rules/_changedsincebase.py @@ -56,17 +56,17 @@ class ChangedSinceBase(Rule): category = _('General filters') def add_time(self, date): - if re.search("\d.*\s+\d{1,2}:\d{2}:\d{2}", date): + if re.search(r"\d.*\s+\d{1,2}:\d{2}:\d{2}", date): return date - elif re.search("\d.*\s+\d{1,2}:\d{2}", date): + elif re.search(r"\d.*\s+\d{1,2}:\d{2}", date): return date + ":00" - elif re.search("\d.*\s+\d{1,2}", date): + elif re.search(r"\d.*\s+\d{1,2}", date): return date + ":00:00" - elif re.search("\d{4}-\d{1,2}-\d{1,2}", date): + elif re.search(r"\d{4}-\d{1,2}-\d{1,2}", date): return date + " 00:00:00" - elif re.search("\d{4}-\d{1,2}", date): + elif re.search(r"\d{4}-\d{1,2}", date): return date + "-01 00:00:00" - elif re.search("\d{4}", date): + elif re.search(r"\d{4}", date): return date + "-01-01 00:00:00" else: return date diff --git a/gramps/gen/lib/place.py b/gramps/gen/lib/place.py index 39b6c1ee3..fc8f48306 100644 --- a/gramps/gen/lib/place.py +++ b/gramps/gen/lib/place.py @@ -520,11 +520,11 @@ class Place(CitationBase, NoteBase, MediaBase, UrlBase, PrimaryObject): Return a list of alternate :class:`~.location.Location` objects the present alternate information about the current Place. - A Place can have more than one :class:`~.location.Location`, since names - and jurisdictions can change over time for the same place. + A Place can have more than one :class:`~.location.Location`, since + names and jurisdictions can change over time for the same place. - :returns: Returns the alternate :class:`~.location.Location`\ s for the - Place + :returns: Returns the alternate :class:`~.location.Location` objects + for the Place :rtype: list of :class:`~.location.Location` objects """ return self.alt_loc diff --git a/gramps/gen/mime/_winmime.py b/gramps/gen/mime/_winmime.py index 545d37ba3..899247e56 100644 --- a/gramps/gen/mime/_winmime.py +++ b/gramps/gen/mime/_winmime.py @@ -85,7 +85,7 @@ def _get_extension(mime_type): extension = None try: hcr = ConnectRegistry(None, HKEY_CLASSES_ROOT) - subkey = OpenKey(hcr, "MIME\DataBase\Content Type") + subkey = OpenKey(hcr, r"MIME\DataBase\Content Type") mimekey = OpenKey(subkey, mime_type) extension, value_type = QueryValueEx(mimekey, "Extension") CloseKey(mimekey) diff --git a/gramps/gen/soundex.py b/gramps/gen/soundex.py index f062c0f08..052b643fc 100644 --- a/gramps/gen/soundex.py +++ b/gramps/gen/soundex.py @@ -34,7 +34,7 @@ import unicodedata # constants # #------------------------------------------------------------------------- -IGNORE = "HW~!@#$%^&*()_+=-`[]\|;:'/?.,<>\" \t\f\v" +IGNORE = "HW~!@#$%^&*()_+=-`[]\\|;:'/?.,<>\" \t\f\v" TABLE = bytes.maketrans(b'ABCDEFGIJKLMNOPQRSTUVXYZ', b'012301202245501262301202') diff --git a/gramps/gen/utils/db.py b/gramps/gen/utils/db.py index ce8410d77..8a6f94168 100644 --- a/gramps/gen/utils/db.py +++ b/gramps/gen/utils/db.py @@ -256,7 +256,7 @@ def get_participant_from_event(db, event_handle, all_=False): Obtain the first primary or family participant to an event we find in the database. Note that an event can have more than one primary or family participant, only one is returned, adding ellipses if there are - more. If the all\_ parameter is true a comma-space separated string with + more. If the all_ parameter is true a comma-space separated string with the names of all primary participants is returned and no ellipses is used. """ participant = "" diff --git a/gramps/gui/dbman.py b/gramps/gui/dbman.py index fb6ae0d1b..3c33d22bd 100644 --- a/gramps/gui/dbman.py +++ b/gramps/gui/dbman.py @@ -1048,8 +1048,8 @@ def find_revisions(name): """ import re - 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;") + rev = re.compile(r"\s*revision\s+([\d\.]+)") + date = re.compile(r"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 [] diff --git a/gramps/gui/editors/editlink.py b/gramps/gui/editors/editlink.py index 52b482500..31169c776 100644 --- a/gramps/gui/editors/editlink.py +++ b/gramps/gui/editors/editlink.py @@ -142,7 +142,7 @@ class EditLink(ManagedWindow): def update_ui(self, widget): url = self.url_link.get_text() # text needs to have 3 or more chars://and at least one char - match = re.match("\w{3,}://\w+", url) + match = re.match(r"\w{3,}://\w+", url) if match: self.ok_button.set_sensitive(True) else: diff --git a/gramps/plugins/docgen/latexdoc.py b/gramps/plugins/docgen/latexdoc.py index 0e2a648fc..a12635dce 100644 --- a/gramps/plugins/docgen/latexdoc.py +++ b/gramps/plugins/docgen/latexdoc.py @@ -579,7 +579,7 @@ class LaTeXBackend(DocBackend): LaTeXBackend.ESCAPE_FUNC = lambda x: latexescapeverbatim def _create_xmltag(self, type, value): - """ + r""" overwrites the method in DocBackend. creates the latex tags needed for non bool style types we support: FONTSIZE : use different \large denomination based @@ -1267,7 +1267,8 @@ class LaTeXDoc(BaseDoc, TextDoc): text = re.sub(URL_PATTERN, _CLICKABLE, text) #hard coded replace of the underline used for missing names/data - text = text.replace('\\_'*13, '\\underline{\hspace{3\\grbaseindent}}') + text = text.replace('\\_' * 13, + '\\underline{\\hspace{3\\grbaseindent}}') self.emit(text + ' ') diff --git a/gramps/plugins/docgen/rtfdoc.py b/gramps/plugins/docgen/rtfdoc.py index 19610bcfb..adb263f2b 100644 --- a/gramps/plugins/docgen/rtfdoc.py +++ b/gramps/plugins/docgen/rtfdoc.py @@ -102,7 +102,7 @@ class RTFDoc(BaseDoc, TextDoc): '{\\fonttbl\n' '{\\f0\\froman\\fcharset0\\fprq0 Times New Roman;}\n' '{\\f1\\fswiss\\fcharset0\\fprq0 Arial;}}\n' - '{\colortbl\n' + '{\\colortbl\n' ) self.color_map = {} @@ -442,7 +442,7 @@ class RTFDoc(BaseDoc, TextDoc): act_height = size[1] if self.in_table: - self.text += '{\*\shppict{\\pict\\jpegblip' + self.text += '{\\*\\shppict{\\pict\\jpegblip' self.text += '\\picwgoal%d\\pichgoal%d\n' % (act_width, act_height) index = 1 for i in buf: @@ -452,7 +452,7 @@ class RTFDoc(BaseDoc, TextDoc): index = index+1 self.text += '}}\\par\n' else: - self.file.write('{\*\shppict{\\pict\\jpegblip') + self.file.write('{\\*\\shppict{\\pict\\jpegblip') self.file.write('\\picwgoal%d\\pichgoal%d\n' % (act_width, act_height)) index = 1 for i in buf: diff --git a/gramps/plugins/export/test/exportvcard_test.py b/gramps/plugins/export/test/exportvcard_test.py index 6489dd0e8..66fe6bd84 100644 --- a/gramps/plugins/export/test/exportvcard_test.py +++ b/gramps/plugins/export/test/exportvcard_test.py @@ -170,7 +170,7 @@ class VCardCheck(unittest.TestCase): def test_write_name_honsuffix(self): ET.SubElement(self.name, "suffix").text = "Jr." - self.expect[3] = "FN:Lastname\, Jr." + self.expect[3] = "FN:Lastname\\, Jr." self.expect[4] = "N:Lastname;;;;Jr." self.expect[5] = "SORT-STRING:" + "Lastname".ljust(55)+ "Jr." self.do_case(self.database, self.expect) diff --git a/gramps/plugins/importer/importgeneweb.py b/gramps/plugins/importer/importgeneweb.py index 45d44b30b..f54662eb6 100644 --- a/gramps/plugins/importer/importgeneweb.py +++ b/gramps/plugins/importer/importgeneweb.py @@ -55,8 +55,9 @@ from gramps.gen.lib import (Attribute, AttributeType, ChildRef, Citation, from gramps.gen.db import DbTxn from html.entities import name2codepoint -_date_parse = re.compile('([kmes~?<>]+)?([0-9/]+)([J|H|F])?(\.\.)?([0-9/]+)?([J|H|F])?') -_text_parse = re.compile('0\((.*)\)') +_date_parse = re.compile( + r'([kmes~?<>]+)?([0-9/]+)([J|H|F])?(\.\.)?([0-9/]+)?([J|H|F])?') +_text_parse = re.compile(r'0\((.*)\)') _mod_map = { '>' : Date.MOD_AFTER, @@ -312,7 +313,7 @@ class GeneWebParser: return None def read_relationship_person(self,line,fields): - LOG.debug("\Relationships:") + LOG.debug(r"\Relationships:") (idx,person) = self.parse_person(fields,1,Person.UNKNOWN,None) if person: self.current_relationship_person_handle = person.get_handle() @@ -607,7 +608,7 @@ class GeneWebParser: firstname = self.decode(fields[idx]) idx += 1 if idx < len(fields) and father_surname: - noSurnameRe = re.compile("^[({\[~>~#\[({!].*$") + personDataRe = re.compile(r"^[kmes0-9<>~#\[({!].*$") dateRe = re.compile("^[kmes0-9~<>?]+.*$") source = None diff --git a/gramps/plugins/importer/importxml.py b/gramps/plugins/importer/importxml.py index b7e3c9b09..52424e1ec 100644 --- a/gramps/plugins/importer/importxml.py +++ b/gramps/plugins/importer/importxml.py @@ -708,7 +708,7 @@ class GrampsParser(UpdateCallback): "rname": (None, self.stop_rname), } self.grampsuri = re.compile(r"^gramps://(?P[A-Z][a-z]+)/" - "handle/(?P\w+)$") + r"handle/(?P\w+)$") def inaugurate(self, handle, target, prim_obj): """ diff --git a/gramps/plugins/importer/test/importvcard_test.py b/gramps/plugins/importer/test/importvcard_test.py index 984140f3a..d51ec6478 100644 --- a/gramps/plugins/importer/test/importvcard_test.py +++ b/gramps/plugins/importer/test/importvcard_test.py @@ -144,11 +144,12 @@ class VCardCheck(unittest.TestCase): "TEL:012\\345,67;89") def test_unesc_list(self): - self.assertEqual(VCardParser.unesc(["Last\,name", "First\;name"]), + self.assertEqual(VCardParser.unesc([r"Last\,name", r"First\;name"]), ["Last,name", "First;name"]) def test_unesc_tuple(self): - self.assertRaises(TypeError, VCardParser.unesc, ("Last\,name", "First\;name")) + self.assertRaises(TypeError, VCardParser.unesc, + (r"Last\,name", r"First\;name")) def test_count_escapes_null(self): self.assertEqual(VCardParser.count_escapes("Lastname"), 0) @@ -371,7 +372,7 @@ class VCardCheck(unittest.TestCase): self.do_case("\r\n".join(self.vcard), self.gramps) def test_add_nicknames_multiple(self): - self.vcard.insert(4, "NICKNAME:A,B\,C") + self.vcard.insert(4, r"NICKNAME:A,B\,C") attribs = {"alt": "1", "type": "Birth Name"} name = ET.SubElement(self.person, 'name', attribs) ET.SubElement(name, 'nick').text = "A" @@ -391,7 +392,7 @@ class VCardCheck(unittest.TestCase): self.do_case("\r\n".join(self.vcard), self.gramps) def test_add_address_too_many(self): - self.vcard.insert(4, "ADR:;;Broadway 11; New\,York; ;; USA; Earth") + self.vcard.insert(4, r"ADR:;;Broadway 11; New\,York; ;; USA; Earth") address = ET.SubElement(self.person, 'address') ET.SubElement(address, 'street').text = 'Broadway 11' ET.SubElement(address, 'city').text = 'New,York' diff --git a/gramps/plugins/tool/reorderids.py b/gramps/plugins/tool/reorderids.py index bce2a1242..5a7305e27 100644 --- a/gramps/plugins/tool/reorderids.py +++ b/gramps/plugins/tool/reorderids.py @@ -561,10 +561,10 @@ class ReorderIds(tool.BatchTool, ManagedWindow, UpdateCallback): print('\nDone.') # finds integer portion in a GrampsID - _findint = re.compile('^[^\d]*(\d+)[^\d]*$') + _findint = re.compile(r'^[^\d]*(\d+)[^\d]*$') # finds prefix, number, suffix of a Gramps ID ignoring a leading or # trailing space. The number must be at least three digits. - _prob_id = re.compile('^ *([^\d]*)(\d{3,9})([^\d]*) *$') + _prob_id = re.compile(r'^ *([^\d]*)(\d{3,9})([^\d]*) *$') def _reorder(self, prim_obj): """ reorders all selected objects with a (new) style, start & step """ diff --git a/setup.py b/setup.py index 4dd6e82b2..9ff4f676a 100755 --- a/setup.py +++ b/setup.py @@ -80,7 +80,8 @@ def intltool_version(): Return the version of intltool as a tuple. ''' if sys.platform == 'win32': - cmd = ["perl", "-e print qx(intltool-update --version) =~ m/(\d+.\d+.\d+)/;"] + cmd = ["perl", + r"-e print qx(intltool-update --version) =~ m/(\d+.\d+.\d+)/;"] try: ver, ret = subprocess.Popen(cmd ,stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate() diff --git a/windows/nonAIO/builder/build_GrampsWin32.py b/windows/nonAIO/builder/build_GrampsWin32.py index 63053b94f..16aaac51f 100644 --- a/windows/nonAIO/builder/build_GrampsWin32.py +++ b/windows/nonAIO/builder/build_GrampsWin32.py @@ -222,7 +222,7 @@ class buildbase(GObject.GObject): os.makedirs(mo_dir) #TODO: find a better way to handle different platforms if sys.platform == 'win32': - po_files = glob.glob(po_dir + "\*.po") + po_files = glob.glob(po_dir + r"\*.po") # no longer using python msgfmt as it doesn't handle plurals (april 2010) # msgfmtCmd = path.normpath(path.join(sys.prefix, "Tools/i18n/msgfmt.py") ) diff --git a/windows/nonAIO/builder/check_gtk_install.py b/windows/nonAIO/builder/check_gtk_install.py index 0257cc108..0cf89ce8a 100644 --- a/windows/nonAIO/builder/check_gtk_install.py +++ b/windows/nonAIO/builder/check_gtk_install.py @@ -138,7 +138,8 @@ def ScanDependencyFileForErrors(fname): parts = line[pthend_idx:].split() OK = False if dirname.startswith(os.path.join(sysroot, 'winsxs').lower()) \ - or dirname.startswith(os.path.join(sys.prefix, 'lib\site-packages\gtk-2.0').lower()): + or dirname.startswith(os.path.join( + sys.prefix, r'lib\site-packages\gtk-2.0').lower()): OK = True for pth in acceptablePaths: diff --git a/windows/nonAIO/builder/make_launcher.py b/windows/nonAIO/builder/make_launcher.py index da138addb..2241abd3e 100644 --- a/windows/nonAIO/builder/make_launcher.py +++ b/windows/nonAIO/builder/make_launcher.py @@ -139,7 +139,7 @@ def writeLauncher(language, langcode, runtimepath, grampspath): @rem During the boot process of GRAMPS there is a check for an environment variable @rem called GRAMPSHOME. Without this environment variable GRAMPS uses the default @rem windows path as the location to save all configuration files: -@rem \\\gramps +@rem \\\\\\gramps @rem If required, uncomment GRAMPSHOME line and edit to suit your use. ''') lines.append('\n@rem set the path for GRAMPS configuration files') diff --git a/windows/nonAIO/check_gtk_install.py b/windows/nonAIO/check_gtk_install.py index b9c909421..f69772294 100644 --- a/windows/nonAIO/check_gtk_install.py +++ b/windows/nonAIO/check_gtk_install.py @@ -133,7 +133,8 @@ def ScanDependencyFileForErrors(fname): parts = line[pthend_idx:].split() OK = False if dirname.startswith(os.path.join(sysroot, 'winsxs').lower()) \ - or dirname.startswith(os.path.join(sys.prefix, 'lib\site-packages\gtk-2.0').lower()): + or dirname.startswith(os.path.join( + sys.prefix, r'lib\site-packages\gtk-2.0').lower()): OK = True for pth in acceptablePaths: