Move this config prep code into voussoirkit as configlayers.
This commit is contained in:
		
							parent
							
								
									9c96522cfc
								
							
						
					
					
						commit
						930960e22a
					
				
					 2 changed files with 6 additions and 63 deletions
				
			
		|  | @ -341,50 +341,6 @@ def read_filebytes(filepath, range_min=0, range_max=None, chunk_size=bytestring. | |||
|             yield chunk | ||||
|             sent_amount += len(chunk) | ||||
| 
 | ||||
| def recursive_dict_update(target, supply): | ||||
|     ''' | ||||
|     Update target using supply, but when the value is a dictionary update the | ||||
|     insides instead of replacing the dictionary itself. This prevents keys that | ||||
|     exist in the target but don't exist in the supply from being erased. | ||||
|     Note that we are modifying target in place. | ||||
| 
 | ||||
|     eg: | ||||
|     target = {'hi': 'ho', 'neighbor': {'name': 'Wilson'}} | ||||
|     supply = {'neighbor': {'behind': 'fence'}} | ||||
| 
 | ||||
|     result: {'hi': 'ho', 'neighbor': {'name': 'Wilson', 'behind': 'fence'}} | ||||
|     whereas a regular dict.update would have produced: | ||||
|     {'hi': 'ho', 'neighbor': {'behind': 'fence'}} | ||||
|     ''' | ||||
|     for (key, value) in supply.items(): | ||||
|         if isinstance(value, dict): | ||||
|             existing = target.get(key, None) | ||||
|             if existing is None: | ||||
|                 target[key] = value | ||||
|             else: | ||||
|                 recursive_dict_update(target=existing, supply=value) | ||||
|         else: | ||||
|             target[key] = value | ||||
| 
 | ||||
| def recursive_dict_keys(d): | ||||
|     ''' | ||||
|     Given a dictionary, return a set containing all of its keys and the keys of | ||||
|     all other dictionaries that appear as values within. The subkeys will use \\ | ||||
|     to indicate their lineage. | ||||
| 
 | ||||
|     {'hi': {'ho': 'neighbor'}} | ||||
| 
 | ||||
|     returns | ||||
| 
 | ||||
|     {'hi', 'hi\\ho'} | ||||
|     ''' | ||||
|     keys = set(d.keys()) | ||||
|     for (key, value) in d.items(): | ||||
|         if isinstance(value, dict): | ||||
|             subkeys = {f'{key}\\{subkey}' for subkey in recursive_dict_keys(value)} | ||||
|             keys.update(subkeys) | ||||
|     return keys | ||||
| 
 | ||||
| def remove_characters(text, characters): | ||||
|     translator = {ord(c): None for c in characters} | ||||
|     text = text.translate(translator) | ||||
|  |  | |||
|  | @ -10,6 +10,7 @@ import tempfile | |||
| import time | ||||
| 
 | ||||
| from voussoirkit import cacheclass | ||||
| from voussoirkit import configlayers | ||||
| from voussoirkit import expressionmatch | ||||
| from voussoirkit import pathclass | ||||
| from voussoirkit import ratelimiter | ||||
|  | @ -1621,27 +1622,13 @@ class PhotoDB( | |||
|                 yield thing | ||||
| 
 | ||||
|     def load_config(self): | ||||
|         config = copy.deepcopy(constants.DEFAULT_CONFIGURATION) | ||||
|         user_config_exists = self.config_filepath.is_file | ||||
|         needs_dump = False | ||||
|         if user_config_exists: | ||||
|             with open(self.config_filepath.absolute_path, 'r', encoding='utf-8') as handle: | ||||
|                 user_config = json.load(handle) | ||||
| 
 | ||||
|             # If the default config has been updated and contains new keys, | ||||
|             # then they will not yet exist in the user's config, and we should | ||||
|             # save the file after giving it those default values. | ||||
|             default_keys = helpers.recursive_dict_keys(config) | ||||
|             stored_keys = helpers.recursive_dict_keys(user_config) | ||||
|             needs_dump = default_keys > stored_keys | ||||
| 
 | ||||
|             helpers.recursive_dict_update(target=config, supply=user_config) | ||||
|         else: | ||||
|             needs_dump = True | ||||
| 
 | ||||
|         (config, needs_rewrite) = configlayers.load_file( | ||||
|             filepath=self.config_filepath, | ||||
|             defaults=constants.DEFAULT_CONFIGURATION, | ||||
|         ) | ||||
|         self.config = config | ||||
| 
 | ||||
|         if needs_dump: | ||||
|         if needs_rewrite: | ||||
|             self.save_config() | ||||
| 
 | ||||
|     def save_config(self): | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue