Improve clarity of the recursive_dict_ helper functions & usage.
This commit is contained in:
		
							parent
							
								
									3b3c690ae3
								
							
						
					
					
						commit
						53c86c30a1
					
				
					 2 changed files with 20 additions and 9 deletions
				
			
		|  | @ -325,7 +325,17 @@ def read_filebytes(filepath, range_min=0, range_max=None, chunk_size=bytestring. | |||
| 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. | ||||
|     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): | ||||
|  | @ -333,7 +343,7 @@ def recursive_dict_update(target, supply): | |||
|             if existing is None: | ||||
|                 target[key] = value | ||||
|             else: | ||||
|                 recursive_dict_update(existing, value) | ||||
|                 recursive_dict_update(target=existing, supply=value) | ||||
|         else: | ||||
|             target[key] = value | ||||
| 
 | ||||
|  | @ -343,11 +353,7 @@ def recursive_dict_keys(d): | |||
|     all other dictionaries that appear as values within. The subkeys will use \\ | ||||
|     to indicate their lineage. | ||||
| 
 | ||||
|     { | ||||
|         'hi': { | ||||
|             'ho': 'neighbor' | ||||
|         } | ||||
|     } | ||||
|     {'hi': {'ho': 'neighbor'}} | ||||
| 
 | ||||
|     returns | ||||
| 
 | ||||
|  |  | |||
|  | @ -1530,9 +1530,14 @@ class PhotoDB( | |||
|         if user_config_exists: | ||||
|             with open(self.config_filepath.absolute_path, 'r', encoding='utf-8') as handle: | ||||
|                 user_config = json.load(handle) | ||||
|             my_keys = helpers.recursive_dict_keys(config) | ||||
| 
 | ||||
|             # 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 = not my_keys.issubset(stored_keys) | ||||
|             needs_dump = default_keys > stored_keys | ||||
| 
 | ||||
|             helpers.recursive_dict_update(target=config, supply=user_config) | ||||
|         else: | ||||
|             needs_dump = True | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue