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 |             yield chunk | ||||||
|             sent_amount += len(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): | 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) | ||||||
|  |  | ||||||
|  | @ -10,6 +10,7 @@ import tempfile | ||||||
| import time | import time | ||||||
| 
 | 
 | ||||||
| from voussoirkit import cacheclass | from voussoirkit import cacheclass | ||||||
|  | from voussoirkit import configlayers | ||||||
| from voussoirkit import expressionmatch | from voussoirkit import expressionmatch | ||||||
| from voussoirkit import pathclass | from voussoirkit import pathclass | ||||||
| from voussoirkit import ratelimiter | from voussoirkit import ratelimiter | ||||||
|  | @ -1621,27 +1622,13 @@ class PhotoDB( | ||||||
|                 yield thing |                 yield thing | ||||||
| 
 | 
 | ||||||
|     def load_config(self): |     def load_config(self): | ||||||
|         config = copy.deepcopy(constants.DEFAULT_CONFIGURATION) |         (config, needs_rewrite) = configlayers.load_file( | ||||||
|         user_config_exists = self.config_filepath.is_file |             filepath=self.config_filepath, | ||||||
|         needs_dump = False |             defaults=constants.DEFAULT_CONFIGURATION, | ||||||
|         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 |  | ||||||
| 
 |  | ||||||
|         self.config = config |         self.config = config | ||||||
| 
 | 
 | ||||||
|         if needs_dump: |         if needs_rewrite: | ||||||
|             self.save_config() |             self.save_config() | ||||||
| 
 | 
 | ||||||
|     def save_config(self): |     def save_config(self): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue