Marco Ricci commited on 2024-12-21 00:57:49
              Zeige 8 geänderte Dateien mit 45 Einfügungen und 37 Löschungen.
            
Aside from formatting fixes, disable the E501/line-too-long and C419/unnecessary-comprehension-in-call linting rules in tests, where they hinder debuggability of the tests. (See embedded comments for full rationale.) Furthermore, make `coverage` recognize `@overload` lines automatically as lines that should not be included in coverage, like `assert False` and friends.
| ... | ... | 
                      @@ -81,6 +81,7 @@ exclude_also = [  | 
                  
| 81 | 81 | 
                        "raise NotImplementedError",  | 
                    
| 82 | 82 | 
                        'assert False',  | 
                    
| 83 | 83 | 
                           '(?:typing\.)?assert_never\(',
                       | 
                    
| 84 | 
                        + '@overload',  | 
                    |
| 84 | 85 | 
                        ]  | 
                    
| 85 | 86 | 
                         | 
                    
| 86 | 87 | 
                        [tool.coverage.run]  | 
                    
| ... | ... | 
                      @@ -304,6 +305,15 @@ select = [  | 
                  
| 304 | 305 | 
                        # things), we need to call and to mock several internal functions,  | 
                    
| 305 | 306 | 
                        # which would automatically trigger `SLF001`.  | 
                    
| 306 | 307 | 
                        'SLF001',  | 
                    
| 308 | 
                        + # pytest does not support sensible introspection of `assert all(...)`  | 
                    |
| 309 | 
                        + # expressions in tests the same way it supports introspection in  | 
                    |
| 310 | 
                        + # `asssert all([...])`. So the extra list comprehension actually  | 
                    |
| 311 | 
                        + # improves debuggability in this case.  | 
                    |
| 312 | 
                        + 'C419',  | 
                    |
| 313 | 
                        + # The tests sometimes include long strings (in non-Python formats)  | 
                    |
| 314 | 
                        + # that should be included verbatim, without artificial line breaking,  | 
                    |
| 315 | 
                        + # so they can be grepped for.  | 
                    |
| 316 | 
                        + 'E501',  | 
                    |
| 307 | 317 | 
                        ]  | 
                    
| 308 | 318 | 
                         | 
                    
| 309 | 319 | 
                        [tool.ruff.lint.flake8-copyright]  | 
                    
| ... | ... | 
                      @@ -225,8 +225,7 @@ def validate_vault_config(  | 
                  
| 225 | 225 | 
                        *,  | 
                    
| 226 | 226 | 
                        allow_derivepassphrase_extensions: bool,  | 
                    
| 227 | 227 | 
                        allow_unknown_settings: bool = False,  | 
                    
| 228 | 
                        -) -> None:  | 
                    |
| 229 | 
                        - ... # pragma: no cover  | 
                    |
| 228 | 
                        +) -> None: ...  | 
                    |
| 230 | 229 | 
                         | 
                    
| 231 | 230 | 
                         | 
                    
| 232 | 231 | 
                        @overload  | 
                    
| ... | ... | 
                      @@ -235,8 +234,7 @@ def validate_vault_config(  | 
                  
| 235 | 234 | 
                        /,  | 
                    
| 236 | 235 | 
                        *,  | 
                    
| 237 | 236 | 
                        allow_unknown_settings: bool = False,  | 
                    
| 238 | 
                        -) -> None:  | 
                    |
| 239 | 
                        - ... # pragma: no cover  | 
                    |
| 237 | 
                        +) -> None: ...  | 
                    |
| 240 | 238 | 
                         | 
                    
| 241 | 239 | 
                         | 
                    
| 242 | 240 | 
                        def validate_vault_config( # noqa: C901,PLR0912  | 
                    
| ... | ... | 
                      @@ -2374,9 +2376,11 @@ def derivepassphrase_vault( # noqa: C901,PLR0912,PLR0913,PLR0914,PLR0915  | 
                  
| 2374 | 2376 | 
                        # cases, set the phrase via vault.Vault.phrase_from_key if  | 
                    
| 2375 | 2377 | 
                        # a key is given. Finally, if nothing is set, error out.  | 
                    
| 2376 | 2378 | 
                        if use_key or use_phrase:  | 
                    
| 2377 | 
                        - kwargs['phrase'] = _key_to_phrase(  | 
                    |
| 2378 | 
                        - key, error_callback=err  | 
                    |
| 2379 | 
                        - ) if use_key else phrase  | 
                    |
| 2379 | 
                        + kwargs['phrase'] = (  | 
                    |
| 2380 | 
                        + _key_to_phrase(key, error_callback=err)  | 
                    |
| 2381 | 
                        + if use_key  | 
                    |
| 2382 | 
                        + else phrase  | 
                    |
| 2383 | 
                        + )  | 
                    |
| 2380 | 2384 | 
                                     elif kwargs.get('key'):
                       | 
                    
| 2381 | 2385 | 
                        kwargs['phrase'] = _key_to_phrase(  | 
                    
| 2382 | 2386 | 
                        kwargs['key'], error_callback=err  | 
                    
| ... | ... | 
                      @@ -379,7 +379,7 @@ class SSHAgentClient:  | 
                  
| 379 | 379 | 
                        )  | 
                    
| 380 | 380 | 
                         | 
                    
| 381 | 381 | 
                        @overload  | 
                    
| 382 | 
                        - def request( # pragma: no cover  | 
                    |
| 382 | 
                        + def request(  | 
                    |
| 383 | 383 | 
                        self,  | 
                    
| 384 | 384 | 
                        code: int | _types.SSH_AGENTC,  | 
                    
| 385 | 385 | 
                        payload: Buffer,  | 
                    
| ... | ... | 
                      @@ -389,7 +389,7 @@ class SSHAgentClient:  | 
                  
| 389 | 389 | 
                        ) -> tuple[int, bytes]: ...  | 
                    
| 390 | 390 | 
                         | 
                    
| 391 | 391 | 
                        @overload  | 
                    
| 392 | 
                        - def request( # pragma: no cover  | 
                    |
| 392 | 
                        + def request(  | 
                    |
| 393 | 393 | 
                        self,  | 
                    
| 394 | 394 | 
                        code: int | _types.SSH_AGENTC,  | 
                    
| 395 | 395 | 
                        payload: Buffer,  | 
                    
| ... | ... | 
                      @@ -401,7 +401,7 @@ class SSHAgentClient:  | 
                  
| 401 | 401 | 
                        ) -> bytes: ...  | 
                    
| 402 | 402 | 
                         | 
                    
| 403 | 403 | 
                        @overload  | 
                    
| 404 | 
                        - def request( # pragma: no cover  | 
                    |
| 404 | 
                        + def request(  | 
                    |
| 405 | 405 | 
                        self,  | 
                    
| 406 | 406 | 
                        code: int | _types.SSH_AGENTC,  | 
                    
| 407 | 407 | 
                        payload: Buffer,  | 
                    
| ... | ... | 
                      @@ -487,7 +487,7 @@ idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC  | 
                  
| 487 | 487 | 
                        68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 488 | 488 | 
                        """),  | 
                    
| 489 | 489 | 
                        'public_key': rb"""ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIF4gWgm1gJIXw//Mkhv5MEwidwcakUGCekJD/vCEml2 test key without passphrase  | 
                    
| 490 | 
                        -""", # noqa: E501  | 
                    |
| 490 | 
                        +""",  | 
                    |
| 491 | 491 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 492 | 492 | 
                        00 00 00 0b 73 73 68 2d 65 64 32 35 35 31 39  | 
                    
| 493 | 493 | 
                        00 00 00 20  | 
                    
| ... | ... | 
                      @@ -502,7 +502,7 @@ idwcakUGCekJD/vCEml2AAAAG3Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQEC  | 
                  
| 502 | 502 | 
                        0d 08 1f ec f8 73 9b 8c 5f 55 39 16 7c 53 54 2c  | 
                    
| 503 | 503 | 
                        1e 52 bb 30 ed 7f 89 e2 2f 69 51 55 d8 9e a6 02  | 
                    
| 504 | 504 | 
                        """),  | 
                    
| 505 | 
                        - 'derived_passphrase': rb'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==', # noqa: E501  | 
                    |
| 505 | 
                        + 'derived_passphrase': rb'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==',  | 
                    |
| 506 | 506 | 
                        },  | 
                    
| 507 | 507 | 
                        # Currently only supported by PuTTY (which is deficient in other  | 
                    
| 508 | 508 | 
                        # niceties of the SSH agent and the agent's client).  | 
                    
| ... | ... | 
                      @@ -536,7 +536,7 @@ dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==  | 
                  
| 536 | 536 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 537 | 537 | 
                        """),  | 
                    
| 538 | 538 | 
                        'public_key': rb"""ssh-ed448 AAAACXNzaC1lZDQ0OAAAADni9nLTT1a7zATGO8RveGq0vPUY7/53m+YZRsStZDgBQ72ZgtPMckdzabiz7JbM/b0JzcRzGLMsbwA= test key without passphrase  | 
                    
| 539 | 
                        -""", # noqa: E501  | 
                    |
| 539 | 
                        +""",  | 
                    |
| 540 | 540 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 541 | 541 | 
                        00 00 00 09 73 73 68 2d 65 64 34 34 38  | 
                    
| 542 | 542 | 
                        00 00 00 39 e2 f6 72 d3 4f 56 bb cc 04  | 
                    
| ... | ... | 
                      @@ -555,7 +555,7 @@ dGhvdXQgcGFzc3BocmFzZQECAwQFBgcICQ==  | 
                  
| 555 | 555 | 
                        db bd 77 7c 80 20 7f 3a 48 61 f6 1f ae a9 5e 53  | 
                    
| 556 | 556 | 
                        7b e0 9d 93 1e ea dc eb b5 cd 56 4c ea 8f 08 00  | 
                    
| 557 | 557 | 
                        """),  | 
                    
| 558 | 
                        - 'derived_passphrase': rb'Bob0ZKSmutnDIsSTSZn8Ed5nlwjy2Lc8LBPnxRwekqYO2C9tgQOCAONy5DJtctJtMoQ/zKkeVywAmrOZ3kXazi7R2+WJ8zW+JFiQxsoE8NuIgNu9d3yAIH86SGH2H66pXlN74J2THurc67XNVkzqjwgA', # noqa: E501  | 
                    |
| 558 | 
                        + 'derived_passphrase': rb'Bob0ZKSmutnDIsSTSZn8Ed5nlwjy2Lc8LBPnxRwekqYO2C9tgQOCAONy5DJtctJtMoQ/zKkeVywAmrOZ3kXazi7R2+WJ8zW+JFiQxsoE8NuIgNu9d3yAIH86SGH2H66pXlN74J2THurc67XNVkzqjwgA',  | 
                    |
| 559 | 559 | 
                        },  | 
                    
| 560 | 560 | 
                             'rsa': {
                       | 
                    
| 561 | 561 | 
                        'private_key': rb"""-----BEGIN OPENSSH PRIVATE KEY-----  | 
                    
| ... | ... | 
                      @@ -693,7 +693,7 @@ Bgp6142WnSCQAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UB  | 
                  
| 693 | 693 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 694 | 694 | 
                        """),  | 
                    
| 695 | 695 | 
                        'public_key': rb"""ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCxoe7pezhxWy4NI0mUwKqg9WCYOAS+IjxN9eYcqpfcmQiojcuy9XsiN/xYJ1O94SrsKS5mEia2xHnYA4RUChTyYNcM2v6cnnBQ/N/VQhpGMN7SVxdbhKUXTWFCwbjBgO6rGyHB6WtoH8vd7TOEPt+NgcXwhsWyoaUUdYTA62V+GF9vEmxMaC4ubgDz+B0QkPnauSoNxmkhcIe0lsLNb1pClZyz88PDnKXCX/d0HuN/HJ+sbPg7dCvOyqFYSyKn3uY6bCXqoIdurxXzH3O7z0P8f5sbmKOrGGKNuNxVRbeVl/D/3uDL0nqsbfUc1qvkfwbJwtMXC4IV6kOZMSk2BAsqh7x48gQ+rhYeEVSi8F3CWs4HJQoqrGt7K9a3mCSlMBHP70u3w6ME7eumoryxlUofewTd17ZEkzdX08l2ZlKzZvwQUrc+xQZ2Uw8z2mfW6Ti4gi0pYGaig7Ke4PwuXpo/C5YAWfeXycsvJZ2uaYRjMdZeJGNAnHLUGLkBscw5aI8= test key without passphrase  | 
                    
| 696 | 
                        -""", # noqa: E501  | 
                    |
| 696 | 
                        +""",  | 
                    |
| 697 | 697 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 698 | 698 | 
                        00 00 00 07 73 73 68 2d 72 73 61  | 
                    
| 699 | 699 | 
                        00 00 00 03 01 00 01  | 
                    
| ... | ... | 
                      @@ -751,7 +751,7 @@ Bgp6142WnSCQAAABt0ZXN0IGtleSB3aXRob3V0IHBhc3NwaHJhc2UB  | 
                  
| 751 | 751 | 
                        de 69 2c 48 62 d9 fd d1 9b 6b b0 49 db d3 ff 38  | 
                    
| 752 | 752 | 
                        e7 10 d9 2d ce 9f 0d 5e 09 7b 37 d2 7b c3 bf ce  | 
                    
| 753 | 753 | 
                        """),  | 
                    
| 754 | 
                        - 'derived_passphrase': rb'ohB8Lva7U6h0KqEZma2Bvnmc7dadCU5uxRhIM5B3mWj3ngNazU4Y64l9haLurkqS9m/Ouf6GfyprMdpuGv6ipYi4RH+hdnOz7HW10Ka5FZdlCRN9lCHR+10PiyMEd8LDVSKxoAmK9Tgq1n8bhymgJdMlb8tkYQeY3BTFhPiSJF5QEWtJ5fDMKcspqRnYp3EfkQsFsQFLwl8ApbYhv/gsnWebRzsKSWt5Lfwd7Ayw5Sci1an408P530ho6fvvPNwmv8/qKUMBpuPFUZX0Zm2KVeJH7OgwRUyuR+fJpCGLZLq2iPYh+HO5yxGheHWSxlrlZP7tQtmVmeYrbzwWPCh0pHIvDT8sM2eqNRmO57URL7P3asUC4m+jQuNiGZkD6qUg56HjvMgGo7V81nZd329gRoMqCADW09mkwUGM+GBWRYHaO6IWH55OdYMX2sNTwz4ZpBu80im4eGEreOaxUrDV7N5pLEhi2f3Rm2uwSdvT/zjnENktzp8NXgl7N9J7w7/O', # noqa: E501  | 
                    |
| 754 | 
                        + 'derived_passphrase': rb'ohB8Lva7U6h0KqEZma2Bvnmc7dadCU5uxRhIM5B3mWj3ngNazU4Y64l9haLurkqS9m/Ouf6GfyprMdpuGv6ipYi4RH+hdnOz7HW10Ka5FZdlCRN9lCHR+10PiyMEd8LDVSKxoAmK9Tgq1n8bhymgJdMlb8tkYQeY3BTFhPiSJF5QEWtJ5fDMKcspqRnYp3EfkQsFsQFLwl8ApbYhv/gsnWebRzsKSWt5Lfwd7Ayw5Sci1an408P530ho6fvvPNwmv8/qKUMBpuPFUZX0Zm2KVeJH7OgwRUyuR+fJpCGLZLq2iPYh+HO5yxGheHWSxlrlZP7tQtmVmeYrbzwWPCh0pHIvDT8sM2eqNRmO57URL7P3asUC4m+jQuNiGZkD6qUg56HjvMgGo7V81nZd329gRoMqCADW09mkwUGM+GBWRYHaO6IWH55OdYMX2sNTwz4ZpBu80im4eGEreOaxUrDV7N5pLEhi2f3Rm2uwSdvT/zjnENktzp8NXgl7N9J7w7/O',  | 
                    |
| 755 | 755 | 
                        },  | 
                    
| 756 | 756 | 
                        }  | 
                    
| 757 | 757 | 
                         | 
                    
| ... | ... | 
                      @@ -816,7 +816,7 @@ u7HfrQhdOiKSa+ZO9AAojbURqrLDRfBJa5dXn2AAAAFQDJHfenj4EJ9WkehpdJatPBlqCW  | 
                  
| 816 | 816 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 817 | 817 | 
                        """),  | 
                    
| 818 | 818 | 
                        'public_key': rb"""ssh-dss AAAAB3NzaC1kc3MAAACBALsoBleoEY1UsFA+twxgCg1bngGEPxoiF7sENZjMlyxoy3vZUpKSC5nz5dHudFrQL9mwGL64mnR2nHL1kxM5Zfi7lg8x5BxcR0YTFkh+KYapI4CzLp8KV3Yh8lklkTFwKaF71KyOx3dhIA8lGW45cVBz3kxmhHmEzCUgMPxDOsTtAAAAFQD32c5k6B3tocxUahelQQFyfseiywAAAIAuvYCDeHEzesp3HNVTDx9fRVU9c77f4qvyEZ7Qpz/s3BVoFUvUZDx96cG5bKekBRsfTCjeHXCQH/yFfqn5Lxye7msgGVS5U3AvD9shiiEr3wt+pNgr9X6DooP7ybfjC8SJdmarLBjnifZuSxyHU2q+P+02kvMTFLH9dLSRIzVqKAAAAIBtA1E9xUS4YOsRx/7GDm2AB6M9cE9ev8myz4KGTriSbeaKsxiMBbJZi1VyBP7uE5jG1hGKfwvIwuopGaprRDlSu8N8KGAuG+wb1hJv8ynDmqbw+IdJp/CGRrP+17f7yEqiCqh7ux360IXToikmvmTvQAKI21Eaqyw0XwSWuXV59g== test key without passphrase  | 
                    
| 819 | 
                        -""", # noqa: E501  | 
                    |
| 819 | 
                        +""",  | 
                    |
| 820 | 820 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 821 | 821 | 
                        00 00 00 07 73 73 68 2d 64 73 73  | 
                    
| 822 | 822 | 
                        00 00 00 81 00  | 
                    
| ... | ... | 
                      @@ -879,7 +879,7 @@ dGhvdXQgcGFzc3BocmFzZQECAwQ=  | 
                  
| 879 | 879 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 880 | 880 | 
                        """),  | 
                    
| 881 | 881 | 
                        'public_key': rb"""ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMttTTMPCyTYO+n5Vgiuw1V/mBbDPZLdJnxNvGJBGSmcZJWrIigck4lz41Ai0BrvGUn/xnqB/PntndqlSRowmbo= test key without passphrase  | 
                    
| 882 | 
                        -""", # noqa: E501  | 
                    |
| 882 | 
                        +""",  | 
                    |
| 883 | 883 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 884 | 884 | 
                        00 00 00 13 65 63 64  | 
                    
| 885 | 885 | 
                        73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36  | 
                    
| ... | ... | 
                      @@ -924,7 +924,7 @@ JAu0J3Q+cypZuKQVAAAAMQD5sTy8p+B1cn/DhOmXquui1BcxvASqzzevkBlbQoBa73y04B  | 
                  
| 924 | 924 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 925 | 925 | 
                        """),  | 
                    
| 926 | 926 | 
                        'public_key': rb"""ecdsa-sha2-nistp384 AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBKCQ6OQC+ru/m8e6PcoEvj8QBZyfmFkPIpxvJXR4EwYWruEpdCVmohqEtWp4xHRCqaTE0nauXLZUdxed6re9n718ixYI51iTlY/c1k/O/3XVefvBsSQLtCd0PnMqWbikFQ== test key without passphrase  | 
                    
| 927 | 
                        -""", # noqa: E501  | 
                    |
| 927 | 
                        +""",  | 
                    |
| 928 | 928 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 929 | 929 | 
                        00 00 00 13 65 63 64  | 
                    
| 930 | 930 | 
                        73 61 2d 73 68 61 32 2d 6e 69 73 74 70 33 38 34  | 
                    
| ... | ... | 
                      @@ -976,7 +976,7 @@ Rlc3Qga2V5IHdpdGhvdXQgcGFzc3BocmFzZQ==  | 
                  
| 976 | 976 | 
                        74 68 6f 75 74 20 70 61 73 73 70 68 72 61 73 65  | 
                    
| 977 | 977 | 
                        """),  | 
                    
| 978 | 978 | 
                        'public_key': rb"""ecdsa-sha2-nistp521 AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBABJU53APOeaVwaqIu8W1h5W2sASJXOIh+wvuMQzxS27+bxZKQ8VC2PCp0XD5Z9nSaLqoxsQWCL8QvNlIpW14JJtwwCGoCQ4wUqIO7hvG+wzptPTZG7urbJPjXJLIaFQPRDJIGcjoKS3/CdDVMSmPzMMqJESvGz17pAsYSU1GTMs8yz6Yw== test key without passphrase  | 
                    
| 979 | 
                        -""", # noqa: E501  | 
                    |
| 979 | 
                        +""",  | 
                    |
| 980 | 980 | 
                                 'public_key_data': bytes.fromhex("""
                       | 
                    
| 981 | 981 | 
                        00 00 00 13 65 63 64  | 
                    
| 982 | 982 | 
                        73 61 2d 73 68 61 32 2d 6e 69 73 74 70 32 35 36  | 
                    
| ... | ... | 
                      @@ -1023,10 +1023,10 @@ DUMMY_PHRASE_FROM_KEY1_RAW = (  | 
                  
| 1023 | 1023 | 
                        b'\x1d\xaf\xfd\r\x08\x1f\xec\xf8s\x9b\x8c_U9\x16|ST,'  | 
                    
| 1024 | 1024 | 
                        b'\x1eR\xbb0\xed\x7f\x89\xe2/iQU\xd8\x9e\xa6\x02'  | 
                    
| 1025 | 1025 | 
                        )  | 
                    
| 1026 | 
                        -DUMMY_PHRASE_FROM_KEY1 = b'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg==' # noqa: E501  | 
                    |
| 1026 | 
                        +DUMMY_PHRASE_FROM_KEY1 = b'8JgZgGwal9UmA27M42WPhmYHExkTCSEzM/nkNlMdr/0NCB/s+HObjF9VORZ8U1QsHlK7MO1/ieIvaVFV2J6mAg=='  | 
                    |
| 1027 | 1027 | 
                         | 
                    
| 1028 | 1028 | 
                        VAULT_MASTER_KEY = 'vault key'  | 
                    
| 1029 | 
                        -VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi' # noqa: E501  | 
                    |
| 1029 | 
                        +VAULT_V02_CONFIG = 'P7xeh5y4jmjpJ2pFq4KUcTVoaE9ZOEkwWmpVTURSSWQxbGt6emN4aFE4eFM3anVPbDRNTGpOLzY3eDF5aE1YTm5LNWh5Q1BwWTMwM3M5S083MWRWRFlmOXNqSFJNcStGMWFOS3c2emhiOUNNenZYTmNNMnZxaUErdlRoOGF2ZHdGT1ZLNTNLOVJQcU9jWmJrR3g5N09VcVBRZ0ZnSFNUQy9HdFVWWnFteVhRVkY3MHNBdnF2ZWFEbFBseWRGelE1c3BFTnVUckRQdWJSL29wNjFxd2Y2ZVpob3VyVzRod3FKTElTenJ1WTZacTJFOFBtK3BnVzh0QWVxcWtyWFdXOXYyenNQeFNZbWt1MDU2Vm1kVGtISWIxWTBpcWRFbyswUVJudVVhZkVlNVpGWDA4WUQ2Q2JTWW81SnlhQ2Zxa3cxNmZoQjJES0Uyd29rNXpSck5iWVBrVmEwOXFya1NpMi9saU5LL3F0M3N3MjZKekNCem9ER2svWkZ0SUJLdmlHRno0VlQzQ3pqZTBWcTM3YmRiNmJjTkhqUHZoQ0NxMW1ldW1XOFVVK3pQMEtUMkRMVGNvNHFlOG40ck5KcGhsYXg1b1VzZ1NYU1B2T3RXdEkwYzg4NWE3YWUzOWI1MDI0MThhMWZjODQ3MDA2OTJmNDQ0MDkxNGFiNmRlMGQ2YjZiNjI5NGMwN2IwMmI4MGZi'  | 
                    |
| 1030 | 1030 | 
                         VAULT_V02_CONFIG_DATA = {
                       | 
                    
| 1031 | 1031 | 
                             'global': {
                       | 
                    
| 1032 | 1032 | 
                                 'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
                       | 
                    
| ... | ... | 
                      @@ -1038,7 +1038,7 @@ VAULT_V02_CONFIG_DATA = {
                     | 
                  
| 1038 | 1038 | 
                        DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy(),  | 
                    
| 1039 | 1039 | 
                        },  | 
                    
| 1040 | 1040 | 
                        }  | 
                    
| 1041 | 
                        -VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7' # noqa: E501  | 
                    |
| 1041 | 
                        +VAULT_V03_CONFIG = 'sBPBrr8BFHPxSJkV/A53zk9zwDQHFxLe6UIusCVvzFQre103pcj5xxmE11lMTA0U2QTYjkhRXKkH5WegSmYpAnzReuRsYZlWWp6N4kkubf+twZ9C3EeggPm7as2Af4TICHVbX4uXpIHeQJf9y1OtqrO+SRBrgPBzgItoxsIxebxVKgyvh1CZQOSkn7BIzt9xKhDng3ubS4hQ91fB0QCumlldTbUl8tj4Xs5JbvsSlUMxRlVzZ0OgAOrSsoWELXmsp6zXFa9K6wIuZa4wQuMLQFHiA64JO1CR3I+rviWCeMlbTOuJNx6vMB5zotKJqA2hIUpN467TQ9vI4g/QTo40m5LT2EQKbIdTvBQAzcV4lOcpr5Lqt4LHED5mKvm/4YfpuuT3I3XCdWfdG5SB7ciiB4Go+xQdddy3zZMiwm1fEwIB8XjFf2cxoJdccLQ2yxf+9diedBP04EsMHrvxKDhQ7/vHl7xF2MMFTDKl3WFd23vvcjpR1JgNAKYprG/e1p/7'  | 
                    |
| 1042 | 1042 | 
                         VAULT_V03_CONFIG_DATA = {
                       | 
                    
| 1043 | 1043 | 
                             'global': {
                       | 
                    
| 1044 | 1044 | 
                                 'phrase': DUMMY_PASSPHRASE.rstrip('\n'),
                       | 
                    
| ... | ... | 
                      @@ -254,7 +254,7 @@ def running_ssh_agent( # pragma: no cover  | 
                  
| 254 | 254 | 
                        assert (  | 
                    
| 255 | 255 | 
                                             os.environ.get('SSH_AUTH_SOCK', None)
                       | 
                    
| 256 | 256 | 
                        == startup_ssh_auth_sock  | 
                    
| 257 | 
                        -                ), f'SSH_AUTH_SOCK mismatch when checking for spawnable {exec_name}'  # noqa: E501
                       | 
                    |
| 257 | 
                        +                ), f'SSH_AUTH_SOCK mismatch when checking for spawnable {exec_name}'
                       | 
                    |
| 258 | 258 | 
                                         proc = spawn_func(executable=shutil.which(exec_name), env={})
                       | 
                    
| 259 | 259 | 
                        if proc is None:  | 
                    
| 260 | 260 | 
                        continue  | 
                    
| ... | ... | 
                      @@ -370,7 +370,7 @@ def spawn_ssh_agent(  | 
                  
| 370 | 370 | 
                        else:  | 
                    
| 371 | 371 | 
                        assert (  | 
                    
| 372 | 372 | 
                                         os.environ.get('SSH_AUTH_SOCK', None) == startup_ssh_auth_sock
                       | 
                    
| 373 | 
                        -            ), f'SSH_AUTH_SOCK mismatch when checking for spawnable {exec_name}'  # noqa: E501
                       | 
                    |
| 373 | 
                        +            ), f'SSH_AUTH_SOCK mismatch when checking for spawnable {exec_name}'
                       | 
                    |
| 374 | 374 | 
                        proc = spawn_func(  | 
                    
| 375 | 375 | 
                        executable=shutil.which(exec_name), env=agent_env  | 
                    
| 376 | 376 | 
                        )  | 
                    
| ... | ... | 
                      @@ -1704,7 +1704,7 @@ contents go here  | 
                  
| 1704 | 1704 | 
                        }),  | 
                    
| 1705 | 1705 | 
                        (  | 
                    
| 1706 | 1706 | 
                        "Invalid value 'XXX' for config key "  | 
                    
| 1707 | 
                        - "vault.default-unicode-normalization-form"  | 
                    |
| 1707 | 
                        + 'vault.default-unicode-normalization-form'  | 
                    |
| 1708 | 1708 | 
                        ),  | 
                    
| 1709 | 1709 | 
                        id='global',  | 
                    
| 1710 | 1710 | 
                        ),  | 
                    
| ... | ... | 
                      @@ -1722,7 +1722,7 @@ contents go here  | 
                  
| 1722 | 1722 | 
                        }),  | 
                    
| 1723 | 1723 | 
                        (  | 
                    
| 1724 | 1724 | 
                        "Invalid value 'XXX' for config key "  | 
                    
| 1725 | 
                        - "vault.with_normalization.unicode-normalization-form"  | 
                    |
| 1725 | 
                        + 'vault.with_normalization.unicode-normalization-form'  | 
                    |
| 1726 | 1726 | 
                        ),  | 
                    
| 1727 | 1727 | 
                        id='service',  | 
                    
| 1728 | 1728 | 
                        ),  | 
                    
| ... | ... | 
                      @@ -1802,7 +1802,7 @@ contents go here  | 
                  
| 1802 | 1802 | 
                        assert result.error_exit(  | 
                    
| 1803 | 1803 | 
                        error=(  | 
                    
| 1804 | 1804 | 
                        "Invalid value 'XXX' for config key "  | 
                    
| 1805 | 
                        - "vault.default-unicode-normalization-form"  | 
                    |
| 1805 | 
                        + 'vault.default-unicode-normalization-form'  | 
                    |
| 1806 | 1806 | 
                        ),  | 
                    
| 1807 | 1807 | 
                        ), 'expected error exit and known error message'  | 
                    
| 1808 | 1808 | 
                         | 
                    
| ... | ... | 
                      @@ -1953,7 +1953,7 @@ Our menu:  | 
                  
| 1953 | 1953 | 
                        Your selection? (1-10, leave empty to abort): 9  | 
                    
| 1954 | 1954 | 
                        A fine choice: Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam and spam  | 
                    
| 1955 | 1955 | 
                        (Note: Vikings strictly optional.)  | 
                    
| 1956 | 
                        -""" # noqa: E501  | 
                    |
| 1956 | 
                        +"""  | 
                    |
| 1957 | 1957 | 
                        ), 'expected clean exit'  | 
                    
| 1958 | 1958 | 
                        _result = runner.invoke(  | 
                    
| 1959 | 1959 | 
                        driver, ['--heading='], input='', catch_exceptions=True  | 
                    
| ... | ... | 
                      @@ -1976,7 +1976,7 @@ A fine choice: Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam  | 
                  
| 1976 | 1976 | 
                        [9] Spam, spam, spam, spam, spam, spam, baked beans, spam, spam, spam and spam  | 
                    
| 1977 | 1977 | 
                        [10] Lobster thermidor aux crevettes with a mornay sauce garnished with truffle paté, brandy and a fried egg on top and spam  | 
                    
| 1978 | 1978 | 
                        Your selection? (1-10, leave empty to abort):\x20  | 
                    
| 1979 | 
                        -""" # noqa: E501  | 
                    |
| 1979 | 
                        +"""  | 
                    |
| 1980 | 1980 | 
                        ), 'expected known output'  | 
                    
| 1981 | 1981 | 
                         | 
                    
| 1982 | 1982 | 
                        def test_112_prompt_for_selection_single(self) -> None:  | 
                    
| ... | ... | 
                      @@ -2515,9 +2514,7 @@ Boo.  | 
                  
| 2515 | 2514 | 
                        ):  | 
                    
| 2516 | 2515 | 
                        cli._key_to_phrase(loaded_key, error_callback=err)  | 
                    
| 2517 | 2516 | 
                        with monkeypatch.context() as mp:  | 
                    
| 2518 | 
                        - mp.setenv(  | 
                    |
| 2519 | 
                        - 'SSH_AUTH_SOCK', os.environ['SSH_AUTH_SOCK'] + '~'  | 
                    |
| 2520 | 
                        - )  | 
                    |
| 2517 | 
                        +            mp.setenv('SSH_AUTH_SOCK', os.environ['SSH_AUTH_SOCK'] + '~')
                       | 
                    |
| 2521 | 2518 | 
                        with pytest.raises(  | 
                    
| 2522 | 2519 | 
                        CustomError, match='Cannot connect to SSH agent'  | 
                    
| 2523 | 2520 | 
                        ):  | 
                    
| ... | ... | 
                      @@ -3043,7 +3040,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine):  | 
                  
| 3043 | 3040 | 
                        _vault_full_config,  | 
                    
| 3044 | 3041 | 
                        min_size=4,  | 
                    
| 3045 | 3042 | 
                        max_size=4,  | 
                    
| 3046 | 
                        - )  | 
                    |
| 3043 | 
                        + ),  | 
                    |
| 3047 | 3044 | 
                        )  | 
                    
| 3048 | 3045 | 
                        def extract_initial_settings(  | 
                    
| 3049 | 3046 | 
                        self,  | 
                    
| ... | ... | 
                      @@ -47,17 +47,17 @@ class TestStaticFunctionality:  | 
                  
| 47 | 47 | 
                        ['line', 'env_name', 'value'],  | 
                    
| 48 | 48 | 
                        [  | 
                    
| 49 | 49 | 
                        (  | 
                    
| 50 | 
                        - 'SSH_AUTH_SOCK=/tmp/pageant.user/pageant.27170; export SSH_AUTH_SOCK;', # noqa: E501  | 
                    |
| 50 | 
                        + 'SSH_AUTH_SOCK=/tmp/pageant.user/pageant.27170; export SSH_AUTH_SOCK;',  | 
                    |
| 51 | 51 | 
                        'SSH_AUTH_SOCK',  | 
                    
| 52 | 52 | 
                        '/tmp/pageant.user/pageant.27170',  | 
                    
| 53 | 53 | 
                        ),  | 
                    
| 54 | 54 | 
                        (  | 
                    
| 55 | 
                        - 'SSH_AUTH_SOCK=/tmp/ssh-3CSTC1W5M22A/agent.27270; export SSH_AUTH_SOCK;', # noqa: E501  | 
                    |
| 55 | 
                        + 'SSH_AUTH_SOCK=/tmp/ssh-3CSTC1W5M22A/agent.27270; export SSH_AUTH_SOCK;',  | 
                    |
| 56 | 56 | 
                        'SSH_AUTH_SOCK',  | 
                    
| 57 | 57 | 
                        '/tmp/ssh-3CSTC1W5M22A/agent.27270',  | 
                    
| 58 | 58 | 
                        ),  | 
                    
| 59 | 59 | 
                        (  | 
                    
| 60 | 
                        - 'SSH_AUTH_SOCK=/tmp/pageant.user/pageant.27170; export SSH_AUTH_SOCK', # noqa: E501  | 
                    |
| 60 | 
                        + 'SSH_AUTH_SOCK=/tmp/pageant.user/pageant.27170; export SSH_AUTH_SOCK',  | 
                    |
| 61 | 61 | 
                        'SSH_AUTH_SOCK',  | 
                    
| 62 | 62 | 
                        '/tmp/pageant.user/pageant.27170',  | 
                    
| 63 | 63 | 
                        ),  | 
                    
| 64 | 64 |