Fix config file not being updated when the default updates.
The len check was incorrect ever since I started nesting keys. Now we measure all of the keys recursively.
This commit is contained in:
		
							parent
							
								
									a0f68fa858
								
							
						
					
					
						commit
						a4b875b9ff
					
				
					 2 changed files with 42 additions and 2 deletions
				
			
		|  | @ -267,6 +267,44 @@ def read_filebytes(filepath, range_min, range_max, chunk_size=2 ** 20): | ||||||
|             yield chunk |             yield chunk | ||||||
|             sent_amount += len(chunk) |             sent_amount += len(chunk) | ||||||
| 
 | 
 | ||||||
|  | def recursive_dict_update(d1, d2): | ||||||
|  |     ''' | ||||||
|  |     Update d1 using d2, but when the value is a dictionary update the insides | ||||||
|  |     instead of replacing the dictionary itself. | ||||||
|  |     ''' | ||||||
|  |     for (key, value) in d2.items(): | ||||||
|  |         if isinstance(value, dict): | ||||||
|  |             existing = d1.get(key, None) | ||||||
|  |             if existing is None: | ||||||
|  |                 d1[key] = value | ||||||
|  |             else: | ||||||
|  |                 recursive_dict_update(existing, value) | ||||||
|  |         else: | ||||||
|  |             d1[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 = {'%s\\%s' % (key, subkey) for subkey in recursive_dict_keys(value)} | ||||||
|  |             keys.update(subkeys) | ||||||
|  |     return keys | ||||||
|  | 
 | ||||||
| def remove_characters(text, characters): | def remove_characters(text, characters): | ||||||
|     translator = {ord(c): None for c in characters} |     translator = {ord(c): None for c in characters} | ||||||
|     text = text.translate(translator) |     text = text.translate(translator) | ||||||
|  |  | ||||||
|  | @ -1124,8 +1124,10 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs | ||||||
|         if user_config_exists: |         if user_config_exists: | ||||||
|             with open(self.config_filepath.absolute_path, 'r') as handle: |             with open(self.config_filepath.absolute_path, 'r') as handle: | ||||||
|                 user_config = json.load(handle) |                 user_config = json.load(handle) | ||||||
|             needs_dump = len(user_config) < len(self.config) |             my_keys = helpers.recursive_dict_keys(self.config) | ||||||
|             self.config.update(user_config) |             stored_keys = helpers.recursive_dict_keys(user_config) | ||||||
|  |             needs_dump = not my_keys.issubset(stored_keys) | ||||||
|  |             helpers.recursive_dict_update(self.config, user_config) | ||||||
|         else: |         else: | ||||||
|             needs_dump = True |             needs_dump = True | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue