Marco Ricci commited on 2024-12-19 15:27:08
              Zeige 1 geänderte Dateien mit 20 Einfügungen und 4 Löschungen.
            
The type hints for `click.open_file` are so broad that our file objects, intended to be typed as `typing.TextIO`, end up getting typed as `typing.TextIO | typing.IO[typing.Any]` instead. Fix this by casting, explicitly, one level higher. Also document why no further checks for readability or writablility are actually performed.
| ... | ... | 
                      @@ -1962,11 +1962,19 @@ def derivepassphrase_vault( # noqa: C901,PLR0912,PLR0913,PLR0914,PLR0915  | 
                  
| 1962 | 1962 | 
                        try:  | 
                    
| 1963 | 1963 | 
                        # TODO(the-13th-letter): keep track of auto-close; try  | 
                    
| 1964 | 1964 | 
                        # os.dup if feasible  | 
                    
| 1965 | 
                        - infile = (  | 
                    |
| 1966 | 
                        - cast(TextIO, import_settings)  | 
                    |
| 1965 | 
                        + infile = cast(  | 
                    |
| 1966 | 
                        + TextIO,  | 
                    |
| 1967 | 
                        + (  | 
                    |
| 1968 | 
                        + import_settings  | 
                    |
| 1967 | 1969 | 
                        if hasattr(import_settings, 'close')  | 
                    
| 1968 | 1970 | 
                        else click.open_file(os.fspath(import_settings), 'rt')  | 
                    
| 1971 | 
                        + ),  | 
                    |
| 1969 | 1972 | 
                        )  | 
                    
| 1973 | 
                        + # Don't specifically catch TypeError or ValueError here if  | 
                    |
| 1974 | 
                        + # the passed-in fileobj is not a readable text stream. This  | 
                    |
| 1975 | 
                        + # will never happen on the command-line (thanks to `click`),  | 
                    |
| 1976 | 
                        + # and for programmatic use, our caller may want accurate  | 
                    |
| 1977 | 
                        + # error information.  | 
                    |
| 1970 | 1978 | 
                        with infile:  | 
                    
| 1971 | 1979 | 
                        maybe_config = json.load(infile)  | 
                    
| 1972 | 1980 | 
                        except json.JSONDecodeError as e:  | 
                    
| ... | ... | 
                      @@ -2050,11 +2058,19 @@ def derivepassphrase_vault( # noqa: C901,PLR0912,PLR0913,PLR0914,PLR0915  | 
                  
| 2050 | 2058 | 
                        try:  | 
                    
| 2051 | 2059 | 
                        # TODO(the-13th-letter): keep track of auto-close; try  | 
                    
| 2052 | 2060 | 
                        # os.dup if feasible  | 
                    
| 2053 | 
                        - outfile = (  | 
                    |
| 2054 | 
                        - cast(TextIO, export_settings)  | 
                    |
| 2061 | 
                        + outfile = cast(  | 
                    |
| 2062 | 
                        + TextIO,  | 
                    |
| 2063 | 
                        + (  | 
                    |
| 2064 | 
                        + export_settings  | 
                    |
| 2055 | 2065 | 
                        if hasattr(export_settings, 'close')  | 
                    
| 2056 | 2066 | 
                        else click.open_file(os.fspath(export_settings), 'wt')  | 
                    
| 2067 | 
                        + ),  | 
                    |
| 2057 | 2068 | 
                        )  | 
                    
| 2069 | 
                        + # Don't specifically catch TypeError or ValueError here if  | 
                    |
| 2070 | 
                        + # the passed-in fileobj is not a writable text stream. This  | 
                    |
| 2071 | 
                        + # will never happen on the command-line (thanks to `click`),  | 
                    |
| 2072 | 
                        + # and for programmatic use, our caller may want accurate  | 
                    |
| 2073 | 
                        + # error information.  | 
                    |
| 2058 | 2074 | 
                        with outfile:  | 
                    
| 2059 | 2075 | 
                        json.dump(configuration, outfile)  | 
                    
| 2060 | 2076 | 
                        except OSError as e:  | 
                    
| 2061 | 2077 |