tahoe-lafs/newsfragments
Ross Patterson 362c121426 feat(py3): Convert unicode-only modules to str
Modules that reference `unicode` but do *not* reference `str` can safely be converted to
use `str` in a way that's closest to the way it should be done under Python 3 but that
is still Python 2 compatible [per
`python-future`](https://python-future.org/compatible_idioms.html?highlight=unicode#unicode).

This change results in 4 additional tests passing under Python 3 that weren't before,
one previous test error is now a failure, and more coverage in a few modules.  Here's
the diff of the output from running all tests under Python 3 before these changes and
after.  I've elided the irrelevant changes (time stamps, object ids, etc.):

```diff
--- .tox/make-test-py3-all-old.log	2020-09-27 20:56:55.761691130 -0700
+++ .tox/make-test-py3-all-new.log	2020-09-27 20:58:16.242075678 -0700
@@ -1,6 +1,6 @@
...
@@ -4218,7 +4218,7 @@
 [ERROR]
 (#.### secs)
 allmydata.test.mutable.test_version.Version.test_download_version ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/mutable/test_version.py", line 274, in test_download_version
+  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/mutable/test_version.py", line 279, in test_download_version
     d = self.publish_multiple()
   File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/mutable/util.py", line 372, in publish_multiple
     self._nodemaker = make_nodemaker(self._storage)
@@ -4438,40 +4438,26 @@
 allmydata.test.test_abbreviate.Abbreviate.test_time ... [OK]
 (#.### secs)
 allmydata.test.test_auth.AccountFileCheckerKeyTests.test_authenticated ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
+Failure: twisted.cred.error.UnauthorizedLogin:
 [ERROR]
 (#.### secs)
 allmydata.test.test_auth.AccountFileCheckerKeyTests.test_missing_signature ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
-[ERROR]
+  File "/home/rpatterson/src/work/sfu/tahoe-lafs/.tox/py36-coverage/lib/python3.6/site-packages/twisted/trial/_asynctest.py", line 75, in _eb
+    raise self.failureException(output)
+twisted.trial.unittest.FailTest:
+Expected: (<class 'twisted.conch.error.ValidPublicKey'>,)
+Got:
+[Failure instance: Traceback (failure with no frames): <class 'twisted.cred.error.UnauthorizedLogin'>:
+]
+[FAILURE]
 (#.### secs)
-allmydata.test.test_auth.AccountFileCheckerKeyTests.test_password_auth_user ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
-[ERROR]
+allmydata.test.test_auth.AccountFileCheckerKeyTests.test_password_auth_user ... [OK]
 (#.### secs)
-allmydata.test.test_auth.AccountFileCheckerKeyTests.test_unknown_user ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
-[ERROR]
+allmydata.test.test_auth.AccountFileCheckerKeyTests.test_unknown_user ... [OK]
 (#.### secs)
-allmydata.test.test_auth.AccountFileCheckerKeyTests.test_unrecognized_key ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
-[ERROR]
+allmydata.test.test_auth.AccountFileCheckerKeyTests.test_unrecognized_key ... [OK]
 (#.### secs)
-allmydata.test.test_auth.AccountFileCheckerKeyTests.test_wrong_signature ... Traceback (most recent call last):
-  File "/home/rpatterson/src/work/sfu/tahoe-lafs/src/allmydata/test/test_auth.py", line 42, in setUp
-    abspath = abspath_expanduser_unicode(unicode(self.account_file.path))
-builtins.NameError: name 'unicode' is not defined
-[ERROR]
+allmydata.test.test_auth.AccountFileCheckerKeyTests.test_wrong_signature ... [OK]
 (#.### secs)
 allmydata.test.test_backupdb.BackupDB.test_basic ... [OK]
 (#.### secs)
@@ -4615,7 +4601,7 @@
 src/allmydata/crypto/util.py                            12      2      4      2    75%   13, 32, 12->13, 30->32
 src/allmydata/deep_stats.py                             83     63     26      0    18%   27-52, 56-58, 62-82, 86-91, 94, 97, 103-114, 117-121, 125-131, 135
 src/allmydata/dirnode.py                               525    420    178      0    15%   70-103, 112-116, 119-135, 140-143, 146-160, 165-173, 176-177, 180-205, 208-217, 223-229, 248-286, 293-299, 302, 310, 315, 318-324, 327-332, 336-340, 344-346, 355-406, 410, 413, 416, 419, 422, 425, 428, 431-433, 436, 439, 442, 445, 448-450, 453, 457, 459, 464, 469-472, 475-478, 481-484, 489-492, 498-501, 504-507, 510-518, 530-532, 539-555, 558-566, 570-589, 600-610, 613-620, 628-641, 646-652, 657-678, 693-714, 752-761, 765-770, 774-812, 819-820, 825, 828, 831, 836-839, 842-849, 852-853, 862-877, 880-881, 884-891, 894, 897-899
-src/allmydata/frontends/auth.py                        100     71     28      0    26%   21-22, 30-48, 51, 54-56, 59-70, 80-87, 100-110, 117-118, 121, 124-142, 147-150, 156-159
+src/allmydata/frontends/auth.py                        100     52     28      4    47%   21-22, 38, 41-44, 51, 54-56, 65-70, 80-87, 106-108, 117-118, 121, 124-142, 147-150, 156-159, 37->38, 40->41, 59->65, 101->106
 src/allmydata/frontends/ftpd.py                        255    254     84      0     1%   4-337
 src/allmydata/frontends/sftpd.py                      1211   1208    488      0     1%   4-2014
 src/allmydata/hashtree.py                              174    135     72      1    16%   59, 75-78, 106-108, 114-117, 123-126, 132-136, 142-149, 152-162, 165-169, 172, 175, 180, 183, 186, 218-232, 259-262, 295-306, 320-323, 326-331, 384-484, 58->59
@@ -4653,7 +4639,7 @@
 src/allmydata/scripts/admin.py                          51     31      2      0    38%   9-14, 17-21, 25, 28, 31-37, 40-46, 56-57, 59, 61-66, 74-78
 src/allmydata/scripts/backupdb.py                      146     91     14      1    36%   84-91, 94-96, 99, 103, 106, 111-114, 117-119, 122, 125, 128, 176-221, 231-242, 245-263, 266-272, 308-324, 327-333, 336-341, 306->308
 src/allmydata/scripts/cli.py                           259    124     46      6    46%   25-49, 69-72, 79-81, 103, 142-146, 175, 221-222, 258, 265-266, 284-285, 330-331, 338-341, 346-355, 361-362, 366-373, 388, 405, 417, 432, 449, 479-481, 484-486, 489-491, 494-496, 499-501, 504-515, 518-520, 523-525, 528-530, 533, 536-538, 541-543, 546-548, 551-553, 556-558, 561-563, 566-568, 571-573, 576-577, 60->exit, 61->exit, 174->175, 180->exit, 181->exit, 219->221
-src/allmydata/scripts/common.py                        153     74     60      4    48%   64, 82, 88, 100, 114-126, 130-152, 159-163, 168-169, 172, 177, 191-236, 240-241, 47->49, 63->64, 79->82, 87->88
+src/allmydata/scripts/common.py                        154     74     60      4    49%   69, 87, 93, 105, 119-131, 135-157, 164-168, 173-174, 177, 182, 196-241, 245-246, 52->54, 68->69, 84->87, 92->93
 src/allmydata/scripts/common_http.py                    77     58     20      0    20%   15-30, 34-36, 38, 42-83, 87, 90, 94-96, 101
 src/allmydata/scripts/create_node.py                   302    185    114      8    30%   24, 61-96, 99-111, 114-128, 136-139, 169-174, 191-194, 205-208, 224-229, 235, 242, 256-278, 289-292, 295-298, 329, 339, 347-380, 385-445, 448-450, 455-477, 223->224, 234->235, 241->242, 252->256, 288->289, 294->295, 328->329, 338->339
 src/allmydata/scripts/debug.py                         719    638    202      0     9%   14, 31-32, 35-49, 52-60, 63-142, 146-154, 157-164, 168-217, 220-304, 307-401, 407, 417, 437-465, 468-485, 488-602, 606, 609-611, 637-648, 653-656, 659, 683-689, 692-810, 813-842, 845-848, 851-865, 869, 888, 891-940, 946, 949-950, 957, 960-961, 967-972, 984-985, 999-1000, 1003-1004, 1020-1021, 1025-1031, 1046-1050
@@ -4661,10 +4647,10 @@
 src/allmydata/scripts/run_common.py                    135     18     24      6    85%   37, 41-46, 59-60, 149, 158, 192-193, 216-220, 226-227, 55->62, 135->exit, 135->exit, 148->149, 191->192, 225->226
 src/allmydata/scripts/runner.py                        138     53     42     11    56%   84-85, 91, 97-99, 104, 114, 123-132, 140, 146, 149-160, 174-181, 186, 189-190, 204-232, 248, 255, 31->36, 103->104, 113->114, 139->140, 145->146, 147->149, 185->186, 188->189, 202->204, 247->248, 254->255
 src/allmydata/scripts/slow_operation.py                 69     56     22      0    14%   15-44, 47-52, 55-61, 64-83
-src/allmydata/scripts/stats_gatherer.py                 41     25     10      0    31%   20-25, 62-86
+src/allmydata/scripts/stats_gatherer.py                 42     25     10      0    33%   25-30, 67-91
 src/allmydata/scripts/tahoe_add_alias.py               106     91     30      0    11%   20-32, 35-59, 63-98, 102-111, 115-144
 src/allmydata/scripts/tahoe_backup.py                  331    267     85      0    15%   20-35, 38-51, 54-58, 71-73, 76-152, 155-157, 160-161, 164-174, 178-209, 212-242, 246-274, 278-279, 287-311, 322-331, 336, 339, 342-351, 356, 359, 362-367, 372-374, 379, 384, 389, 398, 417-425, 428, 431-461, 469-480, 483-486, 500-504, 511-512, 525, 538-542, 545-549, 552-555, 558-561, 564, 571, 578, 586-594
-src/allmydata/scripts/tahoe_check.py                   263    235    121      0     7%   15, 20-100, 103-112, 120-129, 132-167, 170-173, 179-192, 195-256, 259-270, 277-323, 327-336, 339
+src/allmydata/scripts/tahoe_check.py                   264    235    121      0     8%   20, 25-105, 108-117, 125-134, 137-172, 175-178, 184-197, 200-261, 264-275, 282-328, 332-341, 344
 src/allmydata/scripts/tahoe_cp.py                      602    503    226      0    12%   22, 26, 30-31, 34-37, 40-41, 44-47, 50-53, 56-60, 63-70, 75-77, 80, 83, 86, 90-91, 94, 98-99, 102, 106-111, 114, 117-134, 138-142, 145-159, 162-172, 175-177, 180, 185-189, 192, 195-197, 200-203, 206, 210-214, 218-223, 230-233, 236, 239-253, 256-263, 266-297, 303, 307-309, 316, 320-323, 326-333, 336-350, 354-358, 361-397, 403-413, 416-433, 436-437, 440-454, 465-496, 504-580, 583, 589-630, 636-689, 693-698, 701-703, 706-719, 723-762, 765-775, 778-806, 810-818, 821-838, 842, 845-857, 862-863, 867
 src/allmydata/scripts/tahoe_get.py                      37     32     12      0    10%   9-45
 src/allmydata/scripts/tahoe_invite.py                   59     41      8      0    27%   27-31, 36-71, 76-101
@@ -4679,7 +4665,7 @@
 src/allmydata/scripts/tahoe_stop.py                     60     47     10      0    19%   16, 24-84
 src/allmydata/scripts/tahoe_unlink.py                   28     23      6      0    15%   12-40
 src/allmydata/scripts/tahoe_webopen.py                  27     24     12      0     8%   7-31
-src/allmydata/stats.py                                 242    156     54      3    33%   28-34, 37-40, 43-47, 50-64, 67-72, 101, 104-110, 113-125, 144-146, 154-155, 160-163, 169-174, 178-187, 191, 200-207, 210, 213-219, 222-228, 232-234, 237, 241, 246-250, 253, 256-257, 263-278, 281-285, 288-293, 299-325, 100->101, 143->144, 153->154
+src/allmydata/stats.py                                 242    156     54      3    33%   29-35, 38-41, 44-48, 51-65, 68-73, 102, 105-111, 114-126, 145-147, 155-156, 161-164, 170-175, 179-188, 192, 201-208, 211, 214-220, 223-229, 233-235, 238, 242, 247-251, 254, 257-258, 264-279, 282-286, 289-294, 300-326, 101->102, 144->145, 154->155
 src/allmydata/storage/common.py                         24      2      4      2    86%   11, 28, 10->11, 36->39
 src/allmydata/storage/crawler.py                       222    125     64      6    37%   16, 90, 111-113, 148-178, 192-193, 231, 244, 251, 275-312, 315-363, 377-384, 393, 416, 428, 445, 453, 488-492, 495-508, 13->16, 89->90, 96->99, 228->231, 248->251, 268->271
 src/allmydata/storage/expirer.py                       240    183     81      2    21%   9, 74-79, 119, 122, 125-167, 171-233, 236-253, 256-261, 264-266, 269-274, 280-284, 288-322, 388-435, 7->9, 71->74
@@ -4748,7 +4734,7 @@
 src/allmydata/windows/fixups.py                        133    133     54      0     0%   1-237
 src/allmydata/windows/registry.py                       42     42     12      0     0%   1-77
 ------------------------------------------------------------------------------------------------
-TOTAL                                                27427  20411   8234    294    22%
+TOTAL                                                27430  20392   8234    298    22%

 18 files skipped due to complete coverage.
 + '[' '!' -z 1 ']'
```

Trac: refs #3448, https://tahoe-lafs.org/trac/tahoe-lafs/ticket/3448
2020-09-30 08:47:02 -07:00
..
.gitignore Basic towncrier skeleton 2018-08-06 10:13:16 -04:00
1792.feature news 2020-05-04 21:59:15 -06:00
2755.other news fragment 2020-07-09 16:05:31 -04:00
3247.minor Add news fragment 2020-07-09 16:05:30 -04:00
3254.minor Add newsfragment 2020-05-22 22:18:58 -04:00
3263.other news 2020-04-18 01:52:17 -06:00
3277.minor Use GitHub Actions for CI. 2020-02-20 22:19:21 -05:00
3278.minor newsfragment 2020-05-04 16:54:43 -06:00
3284.removed news fragment 2020-02-13 10:14:25 -05:00
3287.minor Add newsfragment 2020-07-09 16:05:31 -04:00
3288.minor Add newsfragment 2020-05-14 16:09:54 -04:00
3289.minor Add newsfragment 2020-05-11 11:43:04 -04:00
3290.minor Add newsfragment 2020-05-07 16:40:55 -04:00
3291.minor Render map update status using twisted.web.template 2020-05-06 09:06:56 -04:00
3292.minor Add empty news fragment re. Statistics page rendering 2020-04-21 11:53:48 -04:00
3293.minor Add newsfragment 2020-04-22 18:02:33 -04:00
3294.minor Remove nevow from allmydata.web.root.IncidentReporter 2020-04-17 15:44:39 -04:00
3296.installation news fragment 2020-04-13 10:11:36 -04:00
3297.minor news fragment 2020-04-13 10:37:24 -04:00
3298.minor news fragment 2020-04-13 11:01:33 -04:00
3299.minor Add newsfragment 2020-04-14 16:29:17 -04:00
3300.minor news fragment 2020-04-13 12:20:03 -04:00
3302.minor news fragment 2020-04-14 08:41:10 -04:00
3303.minor Fixes: ticket:3303 2020-04-16 08:24:31 -04:00
3304.minor Add newsfragment 2020-04-24 19:04:21 -04:00
3305.minor Add newsfragment 2020-05-04 11:52:07 -04:00
3306.minor Replace nevow with twisted.web in test.web.test_grid 2020-05-05 11:51:28 -04:00
3308.minor Remove web.common.RenderMixin 2020-05-12 07:40:22 -04:00
3309.minor Try running PyInstaller-generated binary in GitHub Actions 2020-05-12 18:15:17 -04:00
3312.bugfix Update newsfragment text 2020-07-09 16:05:29 -04:00
3313.minor Add newsfragment 2020-06-18 18:38:24 -04:00
3315.minor Update newsfragment 2020-07-09 16:05:29 -04:00
3316.minor Add newsfragment 2020-06-17 21:18:14 -04:00
3317.feature different words for news 2020-07-09 16:05:29 -04:00
3320.minor Run integration tests on Windows on GitHub Actions 2020-06-22 16:32:26 -04:00
3323.removed news fragment 2020-08-11 13:25:08 -04:00
3324.other News entry. 2020-07-02 14:29:15 -04:00
3325.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3326.minor Add a codecheck for tabs in indentation 2020-08-03 21:14:55 -04:00
3328.installation news fragment 2020-08-07 15:40:19 -04:00
3329.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3330.minor Stop using TravisCI for Python 2.7/Linux test coverage 2020-07-17 12:42:41 -04:00
3331.minor Stop using TravisCI for Python 2.7/macOS test coverage 2020-07-17 12:43:39 -04:00
3332.minor Stop using TravisCI for pyinstaller/macOS test coverage 2020-07-17 12:44:19 -04:00
3333.minor Stop using TravisCI for coverage/Linux test coverage 2020-07-17 12:45:05 -04:00
3334.minor Stop using TravisCI for codechecks/Linux test coverage 2020-07-17 12:45:50 -04:00
3335.minor Stop using TravisCI for pyinstaller/Linux test coverage 2020-07-17 12:46:23 -04:00
3336.minor news fragment 2020-08-03 17:12:15 -04:00
3338.minor news fragment 2020-07-09 16:05:31 -04:00
3339.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3340.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3341.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3342.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3343.minor Use minor for these sort of tickets. 2020-07-16 15:25:32 -04:00
3344.minor Correct type. 2020-07-16 15:28:39 -04:00
3346.minor News fragment. 2020-07-23 11:37:56 -04:00
3348.bugfix Use a Chutney revision that works with Python 2 2020-07-21 10:44:49 -04:00
3349.bugfix news 2020-07-21 09:40:06 -06:00
3351.minor News file. 2020-07-22 10:01:26 -04:00
3353.minor News file. 2020-07-22 10:30:13 -04:00
3354.minor Port to Python 3. 2020-07-22 13:17:49 -04:00
3355.other Say some words about this change 2020-08-27 10:39:49 -04:00
3356.minor News file. 2020-07-27 11:46:22 -04:00
3357.minor Finish port to Python 3. 2020-07-24 14:31:36 -04:00
3358.minor news fragment 2020-07-29 21:03:05 +02:00
3359.minor Ratchet, and news file. 2020-07-27 15:58:28 -04:00
3361.minor Port to Python 3. 2020-07-29 14:49:48 -04:00
3364.minor News fragment. 2020-08-03 11:00:09 -04:00
3365.minor Port to Python 3. 2020-08-03 14:13:16 -04:00
3366.minor Get tox -e codechecks to work (on macOS?) 2020-08-03 21:19:26 -04:00
3367.minor Finish the port. 2020-08-24 13:57:46 -04:00
3368.minor News file. Not bothering with explanation since the regression was only in 2020-08-05 11:54:09 -04:00
3370.minor Port to Python 3. 2020-08-06 16:38:19 -04:00
3372.minor Satisfy towncrier 2020-08-13 06:23:45 -04:00
3373.minor Ratchet and news file. 2020-08-07 11:51:43 -04:00
3374.minor News file. 2020-08-07 13:11:24 -04:00
3375.minor news fragment 2020-08-10 09:59:28 -04:00
3376.minor News file and ratchet (connection_status stuff is... iffy, but we have to live 2020-08-12 15:59:00 -04:00
3377.minor News file and ratchet. 2020-08-11 15:51:27 -04:00
3378.minor News file. 2020-08-17 13:30:12 -04:00
3380.minor news fragment 2020-08-14 13:09:56 -04:00
3381.minor Add newsfragment 2020-08-18 08:38:55 -04:00
3382.minor Remove web.common.MultiFormatPage 2020-08-18 08:48:02 -04:00
3383.minor News file. 2020-08-18 13:12:05 -04:00
3386.minor Finish porting to Python 3. 2020-08-19 13:25:11 -04:00
3387.minor News file. 2020-08-20 13:05:25 -04:00
3388.minor news fragment 2020-08-20 13:20:56 -04:00
3389.minor Add upper bound for attrs library 2020-08-21 15:55:39 -04:00
3391.minor Add codecov settings 2020-08-22 08:14:08 -04:00
3392.minor Remove unused allmydata.test.common_web.WebRenderingMixin 2020-08-22 16:47:19 -04:00
3393.minor Remove allmydata.web._nevow_106 2020-08-22 17:21:24 -04:00
3394.minor Adding null newsfragment (changes are internal and subsumed by larger Python 3 effort). 2020-08-24 11:35:58 -04:00
3395.minor Finish porting test_storage_web to Python 3. 2020-08-26 10:38:52 -04:00
3396.minor News fragment. 2020-09-01 12:45:32 -04:00
3397.minor Finish port to Python 3. 2020-08-31 13:20:57 -04:00
3398.minor Add news fragment. 2020-09-03 18:48:16 -04:00
3401.minor Disable coverage on pypy, in the hopes of making it less flaky. 2020-09-04 12:05:31 -04:00
3403.minor Pin Pyrsistent at a Python 2.7 compatible version 2020-09-08 16:31:57 -04:00
3406.minor Satisfy towncrier 2020-09-14 08:26:47 -04:00
3408.minor Add empty newsfragment. 2020-09-11 14:51:02 -04:00
3409.minor News fragment. 2020-09-11 14:51:20 -04:00
3411.minor News fragment. 2020-09-11 15:04:52 -04:00
3415.minor News fragment. 2020-09-14 14:48:39 -04:00
3416.minor News file. 2020-09-15 14:14:41 -04:00
3417.minor News file. 2020-09-28 11:56:15 -04:00
3421.minor build(make): Exclude changelog entry from NEWS 2020-09-23 10:31:42 -07:00
3422.minor news fragment 2020-09-18 14:49:39 -04:00
3423.minor Return error pages when an exception is raised in filenode 2020-09-21 13:24:01 -04:00
3424.minor Return ErrorPage when web.operations raises an exception 2020-09-21 16:26:51 -04:00
3425.minor Return an error page when an exception is raised from web.root 2020-09-21 16:37:36 -04:00
3426.minor Return ErrorPage when an exception is raised in web.status 2020-09-21 16:51:27 -04:00
3427.minor Return error page from unlinked 2020-09-22 12:23:40 -04:00
3429.minor Return error page when an exception is raised from web.check_results 2020-09-21 18:18:29 -04:00
3430.minor News file. 2020-09-23 15:21:47 -04:00
3431.minor Port test_immutable to Python 3 2020-09-22 08:36:39 -04:00
3436.minor Remove unused web.common.getxmlfile() 2020-09-22 21:05:17 -04:00
3437.minor News file. 2020-09-23 15:39:19 -04:00
3438.minor news fragment 2020-09-25 09:26:56 -04:00
3439.minor News fragment. 2020-09-24 11:06:47 -04:00
3440.minor news fragment 2020-09-24 10:23:34 -04:00
3443.minor add a test for referrer-policy 2020-09-25 11:06:54 -04:00
3446.minor Finish porting to Python 3. 2020-09-25 14:03:25 -04:00
3448.minor feat(py3): Convert unicode-only modules to str 2020-09-30 08:47:02 -07:00
3449.minor Port to Python 3. 2020-09-28 10:20:00 -04:00
3450.minor News file. 2020-09-28 16:49:51 -04:00