Marco Ricci commited on 2025-01-28 00:15:01
Zeige 1 geänderte Dateien mit 48 Einfügungen und 36 Löschungen.
Make these helpers public in the sense that they get picked up by the API documentation generator.
... | ... |
@@ -2907,7 +2907,7 @@ Boo. |
2907 | 2907 |
assert f'FutureWarning: {THE_FUTURE}' in record_tuples[1][2] |
2908 | 2908 |
assert f'UserWarning: {JUST_TESTING}' in record_tuples[2][2] |
2909 | 2909 |
|
2910 |
- def _export_as_sh_helper( |
|
2910 |
+ def export_as_sh_helper( |
|
2911 | 2911 |
self, |
2912 | 2912 |
config: Any, |
2913 | 2913 |
) -> None: |
... | ... |
@@ -2982,7 +2982,7 @@ Boo. |
2982 | 2982 |
settings settable via `--config` and settings requiring |
2983 | 2983 |
`--import`. |
2984 | 2984 |
|
2985 |
- The actual verification is done by [`_export_as_sh_helper`][]. |
|
2985 |
+ The actual verification is done by [`export_as_sh_helper`][]. |
|
2986 | 2986 |
|
2987 | 2987 |
""" |
2988 | 2988 |
config: _types.VaultConfig = { |
... | ... |
@@ -2991,7 +2991,7 @@ Boo. |
2991 | 2991 |
} |
2992 | 2992 |
assert _types.clean_up_falsy_vault_config_values(config) is not None |
2993 | 2993 |
assert _types.is_vault_config(config) |
2994 |
- return self._export_as_sh_helper(config) |
|
2994 |
+ return self.export_as_sh_helper(config) |
|
2995 | 2995 |
|
2996 | 2996 |
@hypothesis.given( |
2997 | 2997 |
global_config_importable=strategies.fixed_dictionaries( |
... | ... |
@@ -3023,7 +3023,7 @@ Boo. |
3023 | 3023 |
Here, we check global-only configurations which only use |
3024 | 3024 |
settings requiring `--import`. |
3025 | 3025 |
|
3026 |
- The actual verification is done by [`_export_as_sh_helper`][]. |
|
3026 |
+ The actual verification is done by [`export_as_sh_helper`][]. |
|
3027 | 3027 |
|
3028 | 3028 |
""" |
3029 | 3029 |
config: _types.VaultConfig = { |
... | ... |
@@ -3034,7 +3034,7 @@ Boo. |
3034 | 3034 |
assert _types.is_vault_config(config) |
3035 | 3035 |
if not config['global']: |
3036 | 3036 |
config.pop('global') |
3037 |
- return self._export_as_sh_helper(config) |
|
3037 |
+ return self.export_as_sh_helper(config) |
|
3038 | 3038 |
|
3039 | 3039 |
@hypothesis.given( |
3040 | 3040 |
service_name=strategies.text( |
... | ... |
@@ -3086,7 +3086,7 @@ Boo. |
3086 | 3086 |
settings settable via `--config` and settings requiring |
3087 | 3087 |
`--import`. |
3088 | 3088 |
|
3089 |
- The actual verification is done by [`_export_as_sh_helper`][]. |
|
3089 |
+ The actual verification is done by [`export_as_sh_helper`][]. |
|
3090 | 3090 |
|
3091 | 3091 |
""" |
3092 | 3092 |
config: _types.VaultConfig = { |
... | ... |
@@ -3098,7 +3098,7 @@ Boo. |
3098 | 3098 |
} |
3099 | 3099 |
assert _types.clean_up_falsy_vault_config_values(config) is not None |
3100 | 3100 |
assert _types.is_vault_config(config) |
3101 |
- return self._export_as_sh_helper(config) |
|
3101 |
+ return self.export_as_sh_helper(config) |
|
3102 | 3102 |
|
3103 | 3103 |
@hypothesis.given( |
3104 | 3104 |
service_name=strategies.text( |
... | ... |
@@ -3147,7 +3147,7 @@ Boo. |
3147 | 3147 |
Here, we check service-only configurations which only use |
3148 | 3148 |
settings requiring `--import`. |
3149 | 3149 |
|
3150 |
- The actual verification is done by [`_export_as_sh_helper`][]. |
|
3150 |
+ The actual verification is done by [`export_as_sh_helper`][]. |
|
3151 | 3151 |
|
3152 | 3152 |
""" |
3153 | 3153 |
config: _types.VaultConfig = { |
... | ... |
@@ -3157,7 +3157,7 @@ Boo. |
3157 | 3157 |
} |
3158 | 3158 |
assert _types.clean_up_falsy_vault_config_values(config) is not None |
3159 | 3159 |
assert _types.is_vault_config(config) |
3160 |
- return self._export_as_sh_helper(config) |
|
3160 |
+ return self.export_as_sh_helper(config) |
|
3161 | 3161 |
|
3162 | 3162 |
@pytest.mark.parametrize( |
3163 | 3163 |
['command_line', 'config', 'result_config'], |
... | ... |
@@ -3920,9 +3920,9 @@ class TestCLITransition: |
3920 | 3920 |
) == [DUMMY_SERVICE] |
3921 | 3921 |
|
3922 | 3922 |
|
3923 |
-_known_services = (DUMMY_SERVICE, 'email', 'bank', 'work') |
|
3923 |
+KNOWN_SERVICES = (DUMMY_SERVICE, 'email', 'bank', 'work') |
|
3924 | 3924 |
"""Known service names. Used for the [`ConfigManagementStateMachine`][].""" |
3925 |
-_valid_properties = ( |
|
3925 |
+VALID_PROPERTIES = ( |
|
3926 | 3926 |
'length', |
3927 | 3927 |
'repeat', |
3928 | 3928 |
'upper', |
... | ... |
@@ -3935,37 +3935,44 @@ _valid_properties = ( |
3935 | 3935 |
"""Known vault properties. Used for the [`ConfigManagementStateMachine`][].""" |
3936 | 3936 |
|
3937 | 3937 |
|
3938 |
-def _build_reduced_vault_config_settings( |
|
3938 |
+def build_reduced_vault_config_settings( |
|
3939 | 3939 |
config: _types.VaultConfigServicesSettings, |
3940 |
- keys_to_purge: frozenset[str], |
|
3940 |
+ keys_to_prune: frozenset[str], |
|
3941 | 3941 |
) -> _types.VaultConfigServicesSettings: |
3942 | 3942 |
"""Return a service settings object with certain keys pruned. |
3943 | 3943 |
|
3944 | 3944 |
Args: |
3945 | 3945 |
config: |
3946 | 3946 |
The original service settings object. |
3947 |
- keys_to_purge: |
|
3948 |
- The keys to purge from the settings object. |
|
3947 |
+ keys_to_prune: |
|
3948 |
+ The keys to prune from the settings object. |
|
3949 | 3949 |
|
3950 | 3950 |
""" |
3951 | 3951 |
config2 = copy.deepcopy(config) |
3952 |
- for key in keys_to_purge: |
|
3952 |
+ for key in keys_to_prune: |
|
3953 | 3953 |
config2.pop(key, None) # type: ignore[misc] |
3954 | 3954 |
return config2 |
3955 | 3955 |
|
3956 | 3956 |
|
3957 |
-_services_strategy = strategies.builds( |
|
3958 |
- _build_reduced_vault_config_settings, |
|
3957 |
+SERVICES_STRATEGY = strategies.builds( |
|
3958 |
+ build_reduced_vault_config_settings, |
|
3959 | 3959 |
tests.vault_full_service_config(), |
3960 | 3960 |
strategies.sets( |
3961 |
- strategies.sampled_from(_valid_properties), |
|
3961 |
+ strategies.sampled_from(VALID_PROPERTIES), |
|
3962 | 3962 |
max_size=7, |
3963 | 3963 |
), |
3964 | 3964 |
) |
3965 | 3965 |
"""A hypothesis strategy to build incomplete service configurations.""" |
3966 | 3966 |
|
3967 | 3967 |
|
3968 |
-def _assemble_config( |
|
3968 |
+def services_strategy() -> strategies.SearchStrategy[ |
|
3969 |
+ _types.VaultConfigServicesSettings |
|
3970 |
+]: |
|
3971 |
+ """Return a strategy to build incomplete service configurations.""" |
|
3972 |
+ return SERVICES_STRATEGY |
|
3973 |
+ |
|
3974 |
+ |
|
3975 |
+def assemble_config( |
|
3969 | 3976 |
global_data: _types.VaultConfigGlobalSettings, |
3970 | 3977 |
service_data: list[tuple[str, _types.VaultConfigServicesSettings]], |
3971 | 3978 |
) -> _types.VaultConfig: |
... | ... |
@@ -3979,14 +3986,14 @@ def _assemble_config( |
3979 | 3986 |
|
3980 | 3987 |
|
3981 | 3988 |
@strategies.composite |
3982 |
-def _draw_service_name_and_data( |
|
3989 |
+def draw_service_name_and_data( |
|
3983 | 3990 |
draw: hypothesis.strategies.DrawFn, |
3984 | 3991 |
num_entries: int, |
3985 | 3992 |
) -> tuple[tuple[str, _types.VaultConfigServicesSettings], ...]: |
3986 | 3993 |
"""Draw a service name and settings, as a hypothesis strategy. |
3987 | 3994 |
|
3988 |
- Will draw service names from [`_known_services`][] and service |
|
3989 |
- settings via [`_services_strategy`][]. |
|
3995 |
+ Will draw service names from [`KNOWN_SERVICES`][] and service |
|
3996 |
+ settings via [`services_strategy`][]. |
|
3990 | 3997 |
|
3991 | 3998 |
Args: |
3992 | 3999 |
draw: |
... | ... |
@@ -3998,7 +4005,7 @@ def _draw_service_name_and_data( |
3998 | 4005 |
A sequence of pairs of service names and service settings. |
3999 | 4006 |
|
4000 | 4007 |
""" |
4001 |
- possible_services = list(_known_services) |
|
4008 |
+ possible_services = list(KNOWN_SERVICES) |
|
4002 | 4009 |
selected_services: list[str] = [] |
4003 | 4010 |
for _ in range(num_entries): |
4004 | 4011 |
selected_services.append( |
... | ... |
@@ -4006,21 +4013,26 @@ def _draw_service_name_and_data( |
4006 | 4013 |
) |
4007 | 4014 |
possible_services.remove(selected_services[-1]) |
4008 | 4015 |
return tuple( |
4009 |
- (service, draw(_services_strategy)) for service in selected_services |
|
4016 |
+ (service, draw(services_strategy())) for service in selected_services |
|
4010 | 4017 |
) |
4011 | 4018 |
|
4012 | 4019 |
|
4013 |
-_vault_full_config = strategies.builds( |
|
4014 |
- _assemble_config, |
|
4015 |
- _services_strategy, |
|
4020 |
+VAULT_FULL_CONFIG = strategies.builds( |
|
4021 |
+ assemble_config, |
|
4022 |
+ services_strategy(), |
|
4016 | 4023 |
strategies.integers( |
4017 | 4024 |
min_value=2, |
4018 | 4025 |
max_value=4, |
4019 |
- ).flatmap(_draw_service_name_and_data), |
|
4026 |
+ ).flatmap(draw_service_name_and_data), |
|
4020 | 4027 |
) |
4021 | 4028 |
"""A hypothesis strategy to build full vault configurations.""" |
4022 | 4029 |
|
4023 | 4030 |
|
4031 |
+def vault_full_config() -> strategies.SearchStrategy[_types.VaultConfig]: |
|
4032 |
+ """Return a strategy to build full vault configurations.""" |
|
4033 |
+ return VAULT_FULL_CONFIG |
|
4034 |
+ |
|
4035 |
+ |
|
4024 | 4036 |
@tests.hypothesis_settings_coverage_compatible |
4025 | 4037 |
class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4026 | 4038 |
"""A state machine recording changes in the vault configuration. |
... | ... |
@@ -4064,7 +4076,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4064 | 4076 |
@stateful.initialize( |
4065 | 4077 |
target=configuration, |
4066 | 4078 |
configs=strategies.lists( |
4067 |
- _vault_full_config, |
|
4079 |
+ vault_full_config(), |
|
4068 | 4080 |
min_size=8, |
4069 | 4081 |
max_size=8, |
4070 | 4082 |
), |
... | ... |
@@ -4079,7 +4091,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4079 | 4091 |
@stateful.initialize( |
4080 | 4092 |
target=setting, |
4081 | 4093 |
configs=strategies.lists( |
4082 |
- _vault_full_config, |
|
4094 |
+ vault_full_config(), |
|
4083 | 4095 |
min_size=4, |
4084 | 4096 |
max_size=4, |
4085 | 4097 |
), |
... | ... |
@@ -4114,7 +4126,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4114 | 4126 |
config=configuration, |
4115 | 4127 |
setting=setting.filter(bool), |
4116 | 4128 |
maybe_unset=strategies.sets( |
4117 |
- strategies.sampled_from(_valid_properties), |
|
4129 |
+ strategies.sampled_from(VALID_PROPERTIES), |
|
4118 | 4130 |
max_size=3, |
4119 | 4131 |
), |
4120 | 4132 |
overwrite=strategies.booleans(), |
... | ... |
@@ -4169,7 +4181,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4169 | 4181 |
+ [ |
4170 | 4182 |
f'--{key}={value}' |
4171 | 4183 |
for key, value in setting.items() |
4172 |
- if key in _valid_properties |
|
4184 |
+ if key in VALID_PROPERTIES |
|
4173 | 4185 |
], |
4174 | 4186 |
catch_exceptions=False, |
4175 | 4187 |
) |
... | ... |
@@ -4181,10 +4193,10 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4181 | 4193 |
@stateful.rule( |
4182 | 4194 |
target=configuration, |
4183 | 4195 |
config=configuration, |
4184 |
- service=strategies.sampled_from(_known_services), |
|
4196 |
+ service=strategies.sampled_from(KNOWN_SERVICES), |
|
4185 | 4197 |
setting=setting.filter(bool), |
4186 | 4198 |
maybe_unset=strategies.sets( |
4187 |
- strategies.sampled_from(_valid_properties), |
|
4199 |
+ strategies.sampled_from(VALID_PROPERTIES), |
|
4188 | 4200 |
max_size=3, |
4189 | 4201 |
), |
4190 | 4202 |
overwrite=strategies.booleans(), |
... | ... |
@@ -4242,7 +4254,7 @@ class ConfigManagementStateMachine(stateful.RuleBasedStateMachine): |
4242 | 4254 |
+ [ |
4243 | 4255 |
f'--{key}={value}' |
4244 | 4256 |
for key, value in setting.items() |
4245 |
- if key in _valid_properties |
|
4257 |
+ if key in VALID_PROPERTIES |
|
4246 | 4258 |
] |
4247 | 4259 |
+ ['--', service], |
4248 | 4260 |
catch_exceptions=False, |
4249 | 4261 |