diff --git a/newsfragments/4158.minor b/newsfragments/4158.minor new file mode 100644 index 000000000..56eaa76ca --- /dev/null +++ b/newsfragments/4158.minor @@ -0,0 +1 @@ +Fixed a couple of SyntaxWarnings from invalid escape sequences (shown under Python 3.12 and 3.13). diff --git a/src/allmydata/hashtree.py b/src/allmydata/hashtree.py index c9ae78970..b67f9a49e 100644 --- a/src/allmydata/hashtree.py +++ b/src/allmydata/hashtree.py @@ -70,7 +70,7 @@ def roundup_pow2(x): class CompleteBinaryTreeMixin: - """ + r""" Adds convenience methods to a complete binary tree. Assumes the total number of elements in the binary tree may be @@ -179,7 +179,7 @@ def pair_hash(a, b): return tagged_pair_hash(b'Merkle tree internal node', a, b) class HashTree(CompleteBinaryTreeMixin, list): - """ + r""" Compute Merkle hashes at any node in a complete binary tree. Tree is indexed like so:: diff --git a/src/allmydata/interfaces.py b/src/allmydata/interfaces.py index e44a0e8bb..40899c1d6 100644 --- a/src/allmydata/interfaces.py +++ b/src/allmydata/interfaces.py @@ -406,7 +406,7 @@ class IStorageBucketWriter(Interface): """ def put_uri_extension(data): - """This block of data contains integrity-checking information (hashes + r"""This block of data contains integrity-checking information (hashes of plaintext, crypttext, and shares), as well as encoding parameters that are necessary to recover the data. This is a serialized dict mapping strings to other strings. The hash of this data is kept in diff --git a/src/allmydata/node.py b/src/allmydata/node.py index e81a1e953..160d3e437 100644 --- a/src/allmydata/node.py +++ b/src/allmydata/node.py @@ -90,7 +90,7 @@ def _common_valid_config(): }) # group 1 will be addr (dotted quad string), group 3 if any will be portnum (string) -ADDR_RE = re.compile("^([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*)(:([1-9][0-9]*))?$") +ADDR_RE = re.compile(r"^([1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*\.[1-9][0-9]*)(:([1-9][0-9]*))?$") # this is put into README in new node-directories (for client and introducers) PRIV_README = """ diff --git a/src/allmydata/test/cli/test_backup.py b/src/allmydata/test/cli/test_backup.py index 7ff1a14d0..bbed86fa0 100644 --- a/src/allmydata/test/cli/test_backup.py +++ b/src/allmydata/test/cli/test_backup.py @@ -36,9 +36,9 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): def count_output(self, out): mo = re.search(r"(\d)+ files uploaded \((\d+) reused\), " - "(\d)+ files skipped, " - "(\d+) directories created \((\d+) reused\), " - "(\d+) directories skipped", out) + r"(\d)+ files skipped, " + r"(\d+) directories created \((\d+) reused\), " + r"(\d+) directories skipped", out) return [int(s) for s in mo.groups()] def count_output2(self, out): diff --git a/src/allmydata/test/cli/test_cli.py b/src/allmydata/test/cli/test_cli.py index e4d4c3781..f2fb13a41 100644 --- a/src/allmydata/test/cli/test_cli.py +++ b/src/allmydata/test/cli/test_cli.py @@ -764,7 +764,7 @@ class Errors(GridTestMixin, CLITestMixin, unittest.TestCase): # enough shares. The one remaining share might be in either the # COMPLETE or the PENDING state. in_complete_msg = "ran out of shares: complete=sh0 pending= overdue= unused= need 3" - in_pending_msg_regex = "ran out of shares: complete= pending=Share\(.+\) overdue= unused= need 3" + in_pending_msg_regex = r"ran out of shares: complete= pending=Share\(.+\) overdue= unused= need 3" d.addCallback(lambda ign: self.do_cli("get", self.uri_1share)) def _check1(args): diff --git a/src/allmydata/test/test_runner.py b/src/allmydata/test/test_runner.py index bc55d507d..4a4f727ef 100644 --- a/src/allmydata/test/test_runner.py +++ b/src/allmydata/test/test_runner.py @@ -254,7 +254,7 @@ class CreateNode(unittest.TestCase): # Fail if there is a non-empty line that doesn't end with a # punctuation mark. for line in err.splitlines(): - self.failIf(re.search("[\S][^\.!?]$", line), (line,)) + self.failIf(re.search(r"[\S][^\.!?]$", line), (line,)) # test that the non --basedir form works too n2 = os.path.join(basedir, command + "-n2") diff --git a/src/allmydata/test/web/test_web.py b/src/allmydata/test/web/test_web.py index 505c99a92..c213b1983 100644 --- a/src/allmydata/test/web/test_web.py +++ b/src/allmydata/test/web/test_web.py @@ -1968,7 +1968,7 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, testutil.ReallyEqualMixi def test_CSS_FILE(self): d = self.GET("/tahoe.css", followRedirect=True) def _check(res): - CSS_STYLE=re.compile(b'toolbar\s{.+text-align:\scenter.+toolbar-item.+display:\sinline',re.DOTALL) + CSS_STYLE=re.compile(b'toolbar\\s{.+text-align:\\scenter.+toolbar-item.+display:\\sinline',re.DOTALL) self.failUnless(CSS_STYLE.search(res), res) d.addCallback(_check) return d diff --git a/src/allmydata/util/i2p_provider.py b/src/allmydata/util/i2p_provider.py index c480cd2f1..6aabdfa5c 100644 --- a/src/allmydata/util/i2p_provider.py +++ b/src/allmydata/util/i2p_provider.py @@ -189,7 +189,7 @@ class _Provider(service.MultiService): privkeyfile = self._get_i2p_config("dest.private_key_file") external_port = self._get_i2p_config("dest.port") sam_port = self._get_i2p_config("sam.port") - escaped_sam_port = sam_port.replace(':', '\:') + escaped_sam_port = sam_port.replace(':', r'\:') # for now, this returns a string, which then gets passed to # endpoints.serverFromString . But it can also return an Endpoint # directly, which means we don't need to encode all these options diff --git a/src/allmydata/web/status.py b/src/allmydata/web/status.py index 1737a4d1b..fa6c1607d 100644 --- a/src/allmydata/web/status.py +++ b/src/allmydata/web/status.py @@ -1556,8 +1556,8 @@ class Statistics(MultiFormatResource): def mangle_name(name): return re.sub( - u"_(\d\d)_(\d)_percentile", - u'{quantile="0.\g<1>\g<2>"}', + r"_(\d\d)_(\d)_percentile", + r'{quantile="0.\g<1>\g<2>"}', name.replace(u".", u"_") )