]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39481: PEP 585 for difflib, filecmp, fileinput (#19422)
authorEthan Smith <ethan@ethanhs.me>
Fri, 10 Apr 2020 04:47:31 +0000 (21:47 -0700)
committerGitHub <noreply@github.com>
Fri, 10 Apr 2020 04:47:31 +0000 (21:47 -0700)
Lib/difflib.py
Lib/filecmp.py
Lib/fileinput.py
Lib/test/test_genericalias.py

index 5d756436a67e194b47e8867db3ecbac408ab10fa..f2215d8d4561c2ec2a576f4ea2fd6436af2cb2e4 100644 (file)
@@ -32,6 +32,7 @@ __all__ = ['get_close_matches', 'ndiff', 'restore', 'SequenceMatcher',
 
 from heapq import nlargest as _nlargest
 from collections import namedtuple as _namedtuple
+from types import GenericAlias
 
 Match = _namedtuple('Match', 'a b size')
 
@@ -685,6 +686,9 @@ class SequenceMatcher:
         # shorter sequence
         return _calculate_ratio(min(la, lb), la + lb)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def get_close_matches(word, possibilities, n=3, cutoff=0.6):
     """Use SequenceMatcher to return list of the best "good enough" matches.
 
index cfdca1e924f5521291276200631fae560c0661e8..7a4da6beb50500fb5291e88e2c6afb02483da38d 100644 (file)
@@ -13,6 +13,7 @@ Functions:
 import os
 import stat
 from itertools import filterfalse
+from types import GenericAlias
 
 __all__ = ['clear_cache', 'cmp', 'dircmp', 'cmpfiles', 'DEFAULT_IGNORES']
 
@@ -247,6 +248,9 @@ class dircmp:
         self.methodmap[attr](self)
         return getattr(self, attr)
 
+    __class_getitem__ = classmethod(GenericAlias)
+
+
 def cmpfiles(a, b, common, shallow=True):
     """Compare common files in two directories.
 
index c1b0ec9a8ed084f8b409bc7e81bab5dd53c0a294..0c31f93ed8f2e7eb34324381baf208c8555c387c 100644 (file)
@@ -73,6 +73,7 @@ XXX Possible additions:
 """
 
 import sys, os
+from types import GenericAlias
 
 __all__ = ["input", "close", "nextfile", "filename", "lineno", "filelineno",
            "fileno", "isfirstline", "isstdin", "FileInput", "hook_compressed",
@@ -391,6 +392,8 @@ class FileInput:
     def isstdin(self):
         return self._isstdin
 
+    __class_getitem__ = classmethod(GenericAlias)
+
 
 def hook_compressed(filename, mode):
     ext = os.path.splitext(filename)[1]
index 196b059dfa0dd09b7f3bd81979b1304ff554dfa3..4241eabed084528c241bd1bf0861581fffc8be68 100644 (file)
@@ -7,6 +7,9 @@ from collections import (
 )
 from collections.abc import *
 from contextlib import AbstractContextManager, AbstractAsyncContextManager
+from difflib import SequenceMatcher
+from filecmp import dircmp
+from fileinput import FileInput
 from mmap import mmap
 from ipaddress import IPv4Network, IPv4Interface, IPv6Network, IPv6Interface
 from itertools import chain
@@ -25,6 +28,9 @@ class BaseTest(unittest.TestCase):
         for t in (type, tuple, list, dict, set, frozenset, enumerate,
                   mmap,
                   defaultdict, deque,
+                  SequenceMatcher,
+                  dircmp,
+                  FileInput,
                   OrderedDict, Counter, UserDict, UserList,
                   Pattern, Match,
                   AbstractContextManager, AbstractAsyncContextManager,