18799: Add Python 3.7 compatibility for TypedDict
authorBrett Smith <brett.smith@curii.com>
Fri, 14 Apr 2023 17:55:54 +0000 (13:55 -0400)
committerBrett Smith <brett.smith@curii.com>
Fri, 14 Apr 2023 17:55:54 +0000 (13:55 -0400)
Arvados-DCO-1.1-Signed-off-by: Brett Smith <brett.smith@curii.com>

sdk/python/discovery2pydoc.py
sdk/python/setup.py

index ad7606145a199b95738f0045cdf08fedbb3f1fe3..29502ace1e0eab32446d08b0094bf14dbcfa7d35 100755 (executable)
@@ -93,6 +93,15 @@ Refer to the API documentation for details about how to retrieve specific keys
 if you need them.
 '''
 
+_MODULE_PRELUDE = '''
+import sys
+if sys.version_info < (3, 8):
+    from typing import Any
+    from typing_extensions import TypedDict
+else:
+    from typing import Any, TypedDict
+'''
+
 _TYPE_MAP = {
     # Map the API's JavaScript-based type names to Python annotations.
     # Some of these may disappear after Arvados issue #19795 is fixed.
@@ -327,8 +336,8 @@ def main(arglist: Optional[Sequence[str]]=None) -> int:
         discovery_document = json.load(discovery_file)
     print(
         to_docstring(_MODULE_PYDOC, indent=0),
-        '''from typing import Any, TypedDict''',
-        sep='\n\n', end='\n\n', file=args.out_file,
+        _MODULE_PRELUDE,
+        sep='\n', file=args.out_file,
     )
 
     schemas = sorted(discovery_document['schemas'].items())
index f6d6a43c789bb499a443272975649d55ec38b3cf..910757817e171d53bf610fca84eb0bc58258eb35 100644 (file)
@@ -126,6 +126,7 @@ setup(name='arvados-python-client',
           'pycurl >=7.19.5.1, <7.45.0',
           'ruamel.yaml >=0.15.54, <0.17.22',
           'setuptools>=40.3.0',
+          'typing_extensions; python_version<"3.8"',
           'ws4py >=0.4.2',
           'protobuf<4.0.0dev',
           'pyparsing<3',