Marco Ricci commited on 2024-09-11 21:00:34
              Zeige 2 geänderte Dateien mit 42 Einfügungen und 61 Löschungen.
            
Rename the `isolated_config` to `isolated_vault_config`, which sets the `derivepassphrase vault` configuration files, and avoid config file manipulation in "vanilla" `isolated_config`. Update tests to use `isolated_config` where feasible.
| ... | ... | 
                      @@ -545,7 +545,6 @@ def phrase_from_key(key: bytes) -> bytes:  | 
                  
| 545 | 545 | 
                        def isolated_config(  | 
                    
| 546 | 546 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 547 | 547 | 
                        runner: click.testing.CliRunner,  | 
                    
| 548 | 
                        - config: Any,  | 
                    |
| 549 | 548 | 
                        ) -> Iterator[None]:  | 
                    
| 550 | 549 | 
                        prog_name = cli.PROG_NAME  | 
                    
| 551 | 550 | 
                             env_name = prog_name.replace(' ', '_').upper() + '_PATH'
                       | 
                    
| ... | ... | 
                      @@ -554,6 +553,16 @@ def isolated_config(  | 
                  
| 554 | 553 | 
                                 monkeypatch.setenv('USERPROFILE', os.getcwd())
                       | 
                    
| 555 | 554 | 
                        monkeypatch.delenv(env_name, raising=False)  | 
                    
| 556 | 555 | 
                        os.makedirs(os.path.dirname(cli._config_filename()), exist_ok=True)  | 
                    
| 556 | 
                        + yield  | 
                    |
| 557 | 
                        +  | 
                    |
| 558 | 
                        +  | 
                    |
| 559 | 
                        +@contextlib.contextmanager  | 
                    |
| 560 | 
                        +def isolated_vault_config(  | 
                    |
| 561 | 
                        + monkeypatch: pytest.MonkeyPatch,  | 
                    |
| 562 | 
                        + runner: click.testing.CliRunner,  | 
                    |
| 563 | 
                        + config: Any,  | 
                    |
| 564 | 
                        +) -> Iterator[None]:  | 
                    |
| 565 | 
                        + with isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 557 | 566 | 
                        with open(cli._config_filename(), 'w', encoding='UTF-8') as outfile:  | 
                    
| 558 | 567 | 
                        json.dump(config, outfile)  | 
                    
| 559 | 568 | 
                        yield  | 
                    
| ... | ... | 
                      @@ -205,7 +205,6 @@ class TestCLI:  | 
                  
| 205 | 205 | 
                        with tests.isolated_config(  | 
                    
| 206 | 206 | 
                        monkeypatch=monkeypatch,  | 
                    
| 207 | 207 | 
                        runner=runner,  | 
                    
| 208 | 
                        -            config={'services': {}},
                       | 
                    |
| 209 | 208 | 
                        ):  | 
                    
| 210 | 209 | 
                        _result = runner.invoke(  | 
                    
| 211 | 210 | 
                        cli.derivepassphrase_vault, ['--help'], catch_exceptions=False  | 
                    
| ... | ... | 
                      @@ -231,7 +230,6 @@ class TestCLI:  | 
                  
| 231 | 230 | 
                        with tests.isolated_config(  | 
                    
| 232 | 231 | 
                        monkeypatch=monkeypatch,  | 
                    
| 233 | 232 | 
                        runner=runner,  | 
                    
| 234 | 
                        -            config={'services': {}},
                       | 
                    |
| 235 | 233 | 
                        ):  | 
                    
| 236 | 234 | 
                        _result = runner.invoke(  | 
                    
| 237 | 235 | 
                        cli.derivepassphrase_vault,  | 
                    
| ... | ... | 
                      @@ -254,7 +252,6 @@ class TestCLI:  | 
                  
| 254 | 252 | 
                        with tests.isolated_config(  | 
                    
| 255 | 253 | 
                        monkeypatch=monkeypatch,  | 
                    
| 256 | 254 | 
                        runner=runner,  | 
                    
| 257 | 
                        -            config={'services': {}},
                       | 
                    |
| 258 | 255 | 
                        ):  | 
                    
| 259 | 256 | 
                        _result = runner.invoke(  | 
                    
| 260 | 257 | 
                        cli.derivepassphrase_vault,  | 
                    
| ... | ... | 
                      @@ -303,7 +300,7 @@ class TestCLI:  | 
                  
| 303 | 300 | 
                        config: _types.VaultConfig,  | 
                    
| 304 | 301 | 
                        ) -> None:  | 
                    
| 305 | 302 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 306 | 
                        - with tests.isolated_config(  | 
                    |
| 303 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 307 | 304 | 
                        monkeypatch=monkeypatch, runner=runner, config=config  | 
                    
| 308 | 305 | 
                        ):  | 
                    
| 309 | 306 | 
                        monkeypatch.setattr(  | 
                    
| ... | ... | 
                      @@ -330,7 +327,7 @@ class TestCLI:  | 
                  
| 330 | 327 | 
                        self, monkeypatch: pytest.MonkeyPatch  | 
                    
| 331 | 328 | 
                        ) -> None:  | 
                    
| 332 | 329 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 333 | 
                        - with tests.isolated_config(  | 
                    |
| 330 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 334 | 331 | 
                        monkeypatch=monkeypatch,  | 
                    
| 335 | 332 | 
                        runner=runner,  | 
                    
| 336 | 333 | 
                                     config={'services': {DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS}},
                       | 
                    
| ... | ... | 
                      @@ -404,7 +401,7 @@ class TestCLI:  | 
                  
| 404 | 401 | 
                        )  | 
                    
| 405 | 402 | 
                        monkeypatch.setattr(ssh_agent.SSHAgentClient, 'sign', sign)  | 
                    
| 406 | 403 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 407 | 
                        - with tests.isolated_config(  | 
                    |
| 404 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 408 | 405 | 
                        monkeypatch=monkeypatch, runner=runner, config=config  | 
                    
| 409 | 406 | 
                        ):  | 
                    
| 410 | 407 | 
                        _result = runner.invoke(  | 
                    
| ... | ... | 
                      @@ -425,7 +422,7 @@ class TestCLI:  | 
                  
| 425 | 422 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 426 | 423 | 
                        ) -> None:  | 
                    
| 427 | 424 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 428 | 
                        - with tests.isolated_config(  | 
                    |
| 425 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 429 | 426 | 
                        monkeypatch=monkeypatch,  | 
                    
| 430 | 427 | 
                        runner=runner,  | 
                    
| 431 | 428 | 
                                     config={
                       | 
                    
| ... | ... | 
                      @@ -474,7 +471,6 @@ class TestCLI:  | 
                  
| 474 | 471 | 
                        with tests.isolated_config(  | 
                    
| 475 | 472 | 
                        monkeypatch=monkeypatch,  | 
                    
| 476 | 473 | 
                        runner=runner,  | 
                    
| 477 | 
                        -            config={'services': {}},
                       | 
                    |
| 478 | 474 | 
                        ):  | 
                    
| 479 | 475 | 
                        for value in '-42', 'invalid':  | 
                    
| 480 | 476 | 
                        _result = runner.invoke(  | 
                    
| ... | ... | 
                      @@ -506,7 +502,7 @@ class TestCLI:  | 
                  
| 506 | 502 | 
                        ) -> None:  | 
                    
| 507 | 503 | 
                        monkeypatch.setattr(cli, '_prompt_for_passphrase', tests.auto_prompt)  | 
                    
| 508 | 504 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 509 | 
                        - with tests.isolated_config(  | 
                    |
| 505 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 510 | 506 | 
                        monkeypatch=monkeypatch,  | 
                    
| 511 | 507 | 
                        runner=runner,  | 
                    
| 512 | 508 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -532,7 +528,7 @@ class TestCLI:  | 
                  
| 532 | 528 | 
                        empty_stderr=True  | 
                    
| 533 | 529 | 
                        ), 'expected clean exit'  | 
                    
| 534 | 530 | 
                        if check_success:  | 
                    
| 535 | 
                        - with tests.isolated_config(  | 
                    |
| 531 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 536 | 532 | 
                        monkeypatch=monkeypatch,  | 
                    
| 537 | 533 | 
                        runner=runner,  | 
                    
| 538 | 534 | 
                                         config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -567,7 +563,6 @@ class TestCLI:  | 
                  
| 567 | 563 | 
                        with tests.isolated_config(  | 
                    
| 568 | 564 | 
                        monkeypatch=monkeypatch,  | 
                    
| 569 | 565 | 
                        runner=runner,  | 
                    
| 570 | 
                        -            config={'services': {}},
                       | 
                    |
| 571 | 566 | 
                        ):  | 
                    
| 572 | 567 | 
                        _result = runner.invoke(  | 
                    
| 573 | 568 | 
                        cli.derivepassphrase_vault,  | 
                    
| ... | ... | 
                      @@ -585,9 +580,7 @@ class TestCLI:  | 
                  
| 585 | 580 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 586 | 581 | 
                        ) -> None:  | 
                    
| 587 | 582 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 588 | 
                        - with tests.isolated_config(  | 
                    |
| 589 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 590 | 
                        - ):  | 
                    |
| 583 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 591 | 584 | 
                        _result = runner.invoke(  | 
                    
| 592 | 585 | 
                        cli.derivepassphrase_vault,  | 
                    
| 593 | 586 | 
                        ['--import', '-'],  | 
                    
| ... | ... | 
                      @@ -604,9 +597,7 @@ class TestCLI:  | 
                  
| 604 | 597 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 605 | 598 | 
                        ) -> None:  | 
                    
| 606 | 599 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 607 | 
                        - with tests.isolated_config(  | 
                    |
| 608 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 609 | 
                        - ):  | 
                    |
| 600 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 610 | 601 | 
                        _result = runner.invoke(  | 
                    
| 611 | 602 | 
                        cli.derivepassphrase_vault,  | 
                    
| 612 | 603 | 
                        ['--import', '-'],  | 
                    
| ... | ... | 
                      @@ -623,12 +614,11 @@ class TestCLI:  | 
                  
| 623 | 614 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 624 | 615 | 
                        ) -> None:  | 
                    
| 625 | 616 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 626 | 
                        - # `isolated_config` validates the configuration. So, to pass an  | 
                    |
| 627 | 
                        - # actual broken configuration, we must open the configuration file  | 
                    |
| 628 | 
                        - # ourselves afterwards, inside the context.  | 
                    |
| 629 | 
                        - with tests.isolated_config(  | 
                    |
| 630 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 631 | 
                        - ):  | 
                    |
| 617 | 
                        + # `isolated_vault_config` validates the configuration. So, to  | 
                    |
| 618 | 
                        + # pass an actual broken configuration, we must open the  | 
                    |
| 619 | 
                        + # configuration file ourselves afterwards, inside the context.  | 
                    |
| 620 | 
                        + # We also might as well use `isolated_config` instead.  | 
                    |
| 621 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 632 | 622 | 
                        with open(  | 
                    
| 633 | 623 | 
                        cli._config_filename(), 'w', encoding='UTF-8'  | 
                    
| 634 | 624 | 
                        ) as outfile:  | 
                    
| ... | ... | 
                      @@ -649,9 +639,7 @@ class TestCLI:  | 
                  
| 649 | 639 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 650 | 640 | 
                        ) -> None:  | 
                    
| 651 | 641 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 652 | 
                        - with tests.isolated_config(  | 
                    |
| 653 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 654 | 
                        - ):  | 
                    |
| 642 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 655 | 643 | 
                        with contextlib.suppress(FileNotFoundError):  | 
                    
| 656 | 644 | 
                        os.remove(cli._config_filename())  | 
                    
| 657 | 645 | 
                        _result = runner.invoke(  | 
                    
| ... | ... | 
                      @@ -667,7 +655,7 @@ class TestCLI:  | 
                  
| 667 | 655 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 668 | 656 | 
                        ) -> None:  | 
                    
| 669 | 657 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 670 | 
                        - with tests.isolated_config(  | 
                    |
| 658 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 671 | 659 | 
                                     monkeypatch=monkeypatch, runner=runner, config={}
                       | 
                    
| 672 | 660 | 
                        ):  | 
                    
| 673 | 661 | 
                        _result = runner.invoke(  | 
                    
| ... | ... | 
                      @@ -686,9 +674,7 @@ class TestCLI:  | 
                  
| 686 | 674 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 687 | 675 | 
                        ) -> None:  | 
                    
| 688 | 676 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 689 | 
                        - with tests.isolated_config(  | 
                    |
| 690 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 691 | 
                        - ):  | 
                    |
| 677 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 692 | 678 | 
                        with contextlib.suppress(FileNotFoundError):  | 
                    
| 693 | 679 | 
                        os.remove(cli._config_filename())  | 
                    
| 694 | 680 | 
                        os.makedirs(cli._config_filename())  | 
                    
| ... | ... | 
                      @@ -708,9 +694,7 @@ class TestCLI:  | 
                  
| 708 | 694 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 709 | 695 | 
                        ) -> None:  | 
                    
| 710 | 696 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 711 | 
                        - with tests.isolated_config(  | 
                    |
| 712 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 713 | 
                        - ):  | 
                    |
| 697 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 714 | 698 | 
                        dname = os.path.dirname(cli._config_filename())  | 
                    
| 715 | 699 | 
                        _result = runner.invoke(  | 
                    
| 716 | 700 | 
                        cli.derivepassphrase_vault,  | 
                    
| ... | ... | 
                      @@ -728,9 +712,7 @@ class TestCLI:  | 
                  
| 728 | 712 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 729 | 713 | 
                        ) -> None:  | 
                    
| 730 | 714 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 731 | 
                        - with tests.isolated_config(  | 
                    |
| 732 | 
                        -            monkeypatch=monkeypatch, runner=runner, config={'services': {}}
                       | 
                    |
| 733 | 
                        - ):  | 
                    |
| 715 | 
                        + with tests.isolated_config(monkeypatch=monkeypatch, runner=runner):  | 
                    |
| 734 | 716 | 
                        with contextlib.suppress(FileNotFoundError):  | 
                    
| 735 | 717 | 
                                         shutil.rmtree('.derivepassphrase')
                       | 
                    
| 736 | 718 | 
                                     with open('.derivepassphrase', 'w', encoding='UTF-8') as outfile:
                       | 
                    
| ... | ... | 
                      @@ -755,7 +737,7 @@ class TestCLI:  | 
                  
| 755 | 737 | 
                        contents go here  | 
                    
| 756 | 738 | 
                        """  | 
                    
| 757 | 739 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 758 | 
                        - with tests.isolated_config(  | 
                    |
| 740 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 759 | 741 | 
                        monkeypatch=monkeypatch,  | 
                    
| 760 | 742 | 
                        runner=runner,  | 
                    
| 761 | 743 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -779,7 +761,7 @@ contents go here  | 
                  
| 779 | 761 | 
                        self, monkeypatch: pytest.MonkeyPatch  | 
                    
| 780 | 762 | 
                        ) -> None:  | 
                    
| 781 | 763 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 782 | 
                        - with tests.isolated_config(  | 
                    |
| 764 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 783 | 765 | 
                        monkeypatch=monkeypatch,  | 
                    
| 784 | 766 | 
                        runner=runner,  | 
                    
| 785 | 767 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -800,7 +782,7 @@ contents go here  | 
                  
| 800 | 782 | 
                        self, monkeypatch: pytest.MonkeyPatch  | 
                    
| 801 | 783 | 
                        ) -> None:  | 
                    
| 802 | 784 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 803 | 
                        - with tests.isolated_config(  | 
                    |
| 785 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 804 | 786 | 
                        monkeypatch=monkeypatch,  | 
                    
| 805 | 787 | 
                        runner=runner,  | 
                    
| 806 | 788 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -824,7 +806,7 @@ contents go here  | 
                  
| 824 | 806 | 
                        self, monkeypatch: pytest.MonkeyPatch  | 
                    
| 825 | 807 | 
                        ) -> None:  | 
                    
| 826 | 808 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 827 | 
                        - with tests.isolated_config(  | 
                    |
| 809 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 828 | 810 | 
                        monkeypatch=monkeypatch,  | 
                    
| 829 | 811 | 
                        runner=runner,  | 
                    
| 830 | 812 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -890,7 +872,7 @@ contents go here  | 
                  
| 890 | 872 | 
                        result_config: Any,  | 
                    
| 891 | 873 | 
                        ) -> None:  | 
                    
| 892 | 874 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 893 | 
                        - with tests.isolated_config(  | 
                    |
| 875 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 894 | 876 | 
                        monkeypatch=monkeypatch,  | 
                    
| 895 | 877 | 
                        runner=runner,  | 
                    
| 896 | 878 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -933,7 +915,7 @@ contents go here  | 
                  
| 933 | 915 | 
                        err_text: str,  | 
                    
| 934 | 916 | 
                        ) -> None:  | 
                    
| 935 | 917 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 936 | 
                        - with tests.isolated_config(  | 
                    |
| 918 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 937 | 919 | 
                        monkeypatch=monkeypatch,  | 
                    
| 938 | 920 | 
                        runner=runner,  | 
                    
| 939 | 921 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -957,7 +939,7 @@ contents go here  | 
                  
| 957 | 939 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 958 | 940 | 
                        ) -> None:  | 
                    
| 959 | 941 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 960 | 
                        - with tests.isolated_config(  | 
                    |
| 942 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 961 | 943 | 
                        monkeypatch=monkeypatch,  | 
                    
| 962 | 944 | 
                        runner=runner,  | 
                    
| 963 | 945 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -983,7 +965,7 @@ contents go here  | 
                  
| 983 | 965 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 984 | 966 | 
                        ) -> None:  | 
                    
| 985 | 967 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 986 | 
                        - with tests.isolated_config(  | 
                    |
| 968 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 987 | 969 | 
                        monkeypatch=monkeypatch,  | 
                    
| 988 | 970 | 
                        runner=runner,  | 
                    
| 989 | 971 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -1004,7 +986,7 @@ contents go here  | 
                  
| 1004 | 986 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 1005 | 987 | 
                        ) -> None:  | 
                    
| 1006 | 988 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 1007 | 
                        - with tests.isolated_config(  | 
                    |
| 989 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 1008 | 990 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1009 | 991 | 
                        runner=runner,  | 
                    
| 1010 | 992 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -1027,7 +1009,7 @@ contents go here  | 
                  
| 1027 | 1009 | 
                        try_race_free_implementation: bool,  | 
                    
| 1028 | 1010 | 
                        ) -> None:  | 
                    
| 1029 | 1011 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 1030 | 
                        - with tests.isolated_config(  | 
                    |
| 1012 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 1031 | 1013 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1032 | 1014 | 
                        runner=runner,  | 
                    
| 1033 | 1015 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -1051,7 +1033,7 @@ contents go here  | 
                  
| 1051 | 1033 | 
                        monkeypatch: pytest.MonkeyPatch,  | 
                    
| 1052 | 1034 | 
                        ) -> None:  | 
                    
| 1053 | 1035 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 1054 | 
                        - with tests.isolated_config(  | 
                    |
| 1036 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 1055 | 1037 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1056 | 1038 | 
                        runner=runner,  | 
                    
| 1057 | 1039 | 
                                     config={'global': {'phrase': 'abc'}, 'services': {}},
                       | 
                    
| ... | ... | 
                      @@ -1078,7 +1060,6 @@ contents go here  | 
                  
| 1078 | 1060 | 
                        with tests.isolated_config(  | 
                    
| 1079 | 1061 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1080 | 1062 | 
                        runner=runner,  | 
                    
| 1081 | 
                        -            config={'services': {}},
                       | 
                    |
| 1082 | 1063 | 
                        ):  | 
                    
| 1083 | 1064 | 
                        _result = runner.invoke(  | 
                    
| 1084 | 1065 | 
                        cli.derivepassphrase_vault, [], catch_exceptions=False  | 
                    
| ... | ... | 
                      @@ -1095,7 +1076,6 @@ contents go here  | 
                  
| 1095 | 1076 | 
                        with tests.isolated_config(  | 
                    
| 1096 | 1077 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1097 | 1078 | 
                        runner=runner,  | 
                    
| 1098 | 
                        -            config={'services': {}},
                       | 
                    |
| 1099 | 1079 | 
                        ):  | 
                    
| 1100 | 1080 | 
                        _result = runner.invoke(  | 
                    
| 1101 | 1081 | 
                        cli.derivepassphrase_vault,  | 
                    
| ... | ... | 
                      @@ -1115,7 +1095,6 @@ contents go here  | 
                  
| 1115 | 1095 | 
                        with tests.isolated_config(  | 
                    
| 1116 | 1096 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1117 | 1097 | 
                        runner=runner,  | 
                    
| 1118 | 
                        -            config={'services': {}},
                       | 
                    |
| 1119 | 1098 | 
                        ):  | 
                    
| 1120 | 1099 | 
                                     os.remove('.derivepassphrase/settings.json')
                       | 
                    
| 1121 | 1100 | 
                                     os.rmdir('.derivepassphrase')
                       | 
                    
| ... | ... | 
                      @@ -1155,7 +1134,6 @@ contents go here  | 
                  
| 1155 | 1134 | 
                        with tests.isolated_config(  | 
                    
| 1156 | 1135 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1157 | 1136 | 
                        runner=runner,  | 
                    
| 1158 | 
                        -            config={'services': {}},
                       | 
                    |
| 1159 | 1137 | 
                        ):  | 
                    
| 1160 | 1138 | 
                        _save_config = cli._save_config  | 
                    
| 1161 | 1139 | 
                         | 
                    
| ... | ... | 
                      @@ -1188,7 +1166,6 @@ contents go here  | 
                  
| 1188 | 1166 | 
                        with tests.isolated_config(  | 
                    
| 1189 | 1167 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1190 | 1168 | 
                        runner=runner,  | 
                    
| 1191 | 
                        -            config={'services': {}},
                       | 
                    |
| 1192 | 1169 | 
                        ):  | 
                    
| 1193 | 1170 | 
                        _save_config = cli._save_config  | 
                    
| 1194 | 1171 | 
                         | 
                    
| ... | ... | 
                      @@ -1294,7 +1271,7 @@ contents go here  | 
                  
| 1294 | 1271 | 
                        warning_message: str,  | 
                    
| 1295 | 1272 | 
                        ) -> None:  | 
                    
| 1296 | 1273 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 1297 | 
                        - with tests.isolated_config(  | 
                    |
| 1274 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 1298 | 1275 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1299 | 1276 | 
                        runner=runner,  | 
                    
| 1300 | 1277 | 
                                     config={'services': {DUMMY_SERVICE: DUMMY_CONFIG_SETTINGS.copy()}},
                       | 
                    
| ... | ... | 
                      @@ -1318,7 +1295,7 @@ class TestCLIUtils:  | 
                  
| 1318 | 1295 | 
                        ) -> None:  | 
                    
| 1319 | 1296 | 
                        runner = click.testing.CliRunner()  | 
                    
| 1320 | 1297 | 
                        with (  | 
                    
| 1321 | 
                        - tests.isolated_config(  | 
                    |
| 1298 | 
                        + tests.isolated_vault_config(  | 
                    |
| 1322 | 1299 | 
                                         monkeypatch=monkeypatch, runner=runner, config={}
                       | 
                    
| 1323 | 1300 | 
                        ),  | 
                    
| 1324 | 1301 | 
                        pytest.raises(ValueError, match='Invalid vault config'),  | 
                    
| ... | ... | 
                      @@ -1498,7 +1475,7 @@ Boo.  | 
                  
| 1498 | 1475 | 
                        ) -> None:  | 
                    
| 1499 | 1476 | 
                        runner = click.testing.CliRunner(mix_stderr=False)  | 
                    
| 1500 | 1477 | 
                        for start_config in [config, result_config]:  | 
                    
| 1501 | 
                        - with tests.isolated_config(  | 
                    |
| 1478 | 
                        + with tests.isolated_vault_config(  | 
                    |
| 1502 | 1479 | 
                        monkeypatch=monkeypatch, runner=runner, config=start_config  | 
                    
| 1503 | 1480 | 
                        ):  | 
                    
| 1504 | 1481 | 
                        _result = runner.invoke(  | 
                    
| ... | ... | 
                      @@ -1575,7 +1552,6 @@ class TestCLITransition:  | 
                  
| 1575 | 1552 | 
                        with tests.isolated_config(  | 
                    
| 1576 | 1553 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1577 | 1554 | 
                        runner=runner,  | 
                    
| 1578 | 
                        -            config={'services': {}},
                       | 
                    |
| 1579 | 1555 | 
                        ):  | 
                    
| 1580 | 1556 | 
                        _result = runner.invoke(  | 
                    
| 1581 | 1557 | 
                        cli.derivepassphrase, ['--help'], catch_exceptions=False  | 
                    
| ... | ... | 
                      @@ -1592,7 +1568,6 @@ class TestCLITransition:  | 
                  
| 1592 | 1568 | 
                        with tests.isolated_config(  | 
                    
| 1593 | 1569 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1594 | 1570 | 
                        runner=runner,  | 
                    
| 1595 | 
                        -            config={'services': {}},
                       | 
                    |
| 1596 | 1571 | 
                        ):  | 
                    
| 1597 | 1572 | 
                        _result = runner.invoke(  | 
                    
| 1598 | 1573 | 
                        cli.derivepassphrase,  | 
                    
| ... | ... | 
                      @@ -1611,7 +1586,6 @@ class TestCLITransition:  | 
                  
| 1611 | 1586 | 
                        with tests.isolated_config(  | 
                    
| 1612 | 1587 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1613 | 1588 | 
                        runner=runner,  | 
                    
| 1614 | 
                        -            config={'services': {}},
                       | 
                    |
| 1615 | 1589 | 
                        ):  | 
                    
| 1616 | 1590 | 
                        _result = runner.invoke(  | 
                    
| 1617 | 1591 | 
                        cli.derivepassphrase,  | 
                    
| ... | ... | 
                      @@ -1630,7 +1604,6 @@ class TestCLITransition:  | 
                  
| 1630 | 1604 | 
                        with tests.isolated_config(  | 
                    
| 1631 | 1605 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1632 | 1606 | 
                        runner=runner,  | 
                    
| 1633 | 
                        -            config={'services': {}},
                       | 
                    |
| 1634 | 1607 | 
                        ):  | 
                    
| 1635 | 1608 | 
                        _result = runner.invoke(  | 
                    
| 1636 | 1609 | 
                        cli.derivepassphrase,  | 
                    
| ... | ... | 
                      @@ -1682,7 +1655,6 @@ class TestCLITransition:  | 
                  
| 1682 | 1655 | 
                        with tests.isolated_config(  | 
                    
| 1683 | 1656 | 
                        monkeypatch=monkeypatch,  | 
                    
| 1684 | 1657 | 
                        runner=runner,  | 
                    
| 1685 | 
                        -            config={'services': {}},
                       | 
                    |
| 1686 | 1658 | 
                        ):  | 
                    
| 1687 | 1659 | 
                        _result = runner.invoke(  | 
                    
| 1688 | 1660 | 
                        cli.derivepassphrase,  | 
                    
| 1689 | 1661 |