• 
      

    Enable extensions to provide a default settings dictionary

    Review Request #2907 — Created Feb. 20, 2012 and submitted

    Information

    Djblets

    Reviewers

    When an extension is loaded for the first time it is initialized with an empty settings dictionary. All extension authors must either initialize the settings dictionary and save it, or check at use if the setting exists.
    
    This modification allows an extension author to specify a default settings dictionary, which will be used if a key is not present in extension.settings. Instead of copying all defaults, I only reference them when a missing key is accessed. Another option would be to initialize the settings when the extension is loaded. Feel free to suggest other ideas.
    Tested in local dev with dummy extensions. Ran djblets unit tests.
    Description From Last Updated

    This chunk of code could probably be refactored. Usually you don't want to explicitly return a boolean, but rather do …

    ME medanat

    I'd prefer "" instead of []. To make it more readable code-wise with "", you can use '' for the …

    chipx86chipx86

    Each dict key should be on its own line: "" % { 'key': key, 'ext': self.extension.id, }

    chipx86chipx86

    If you make the default for default_settings be {} instead, this can just be: return key in self.extension.default_settings You can …

    chipx86chipx86
    ME
    1. Looking good, just two minor issues (for me at least).
    2. djblets/extensions/base.py (Diff revision 1)
       
       
      I feel this is the wrong place for this import, I may be wrong.
      1. KeyError should always be in the global namespace
    3. djblets/extensions/base.py (Diff revision 1)
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
      Show all issues
      This chunk of code could probably be refactored. Usually you don't want to explicitly return a boolean, but rather do something similar to this:
      
      return super(Settings, self).__contains__(key)
      
      (I know this isn't a solution in your case, but you should try something similar) 
      1. I thought about this for a while and I can't come up with anything which doesn't explicitly return a boolean. Anyone else have an idea?
      2. You can combine them all:
        
        return (super(Settings, self).__contains__(key) or
                (self.extension.default_settings is not None and
                 key in self.extension.default_settings))
        
        Although I'm not sure it's any clearer.
      3. Yeah, that isn't the most readable. Although combining the second set of conditions may work:
        
        if super(Settings, self).__contatins__(key):
            return True
        
        return (self.extension.default_settings is not None and
                key in self.extension.default_settings)
      4. That seems like a good compromise.
    4. 
        
    SM
    chipx86
    1. 
        
    2. djblets/extensions/base.py (Diff revision 2)
       
       
      Show all issues
      I'd prefer "" instead of [].
      
      To make it more readable code-wise with "", you can use '' for the string itself.
    3. djblets/extensions/base.py (Diff revision 2)
       
       
      Show all issues
      Each dict key should be on its own line:
      
      "" % {
          'key': key,
          'ext': self.extension.id,
      }
    4. djblets/extensions/base.py (Diff revision 2)
       
       
       
      Show all issues
      If you make the default for default_settings be {} instead, this can just be:
      
          return key in self.extension.default_settings
      
      You can also simplify the logic in __getitem__.
    5. 
        
    SM
    chipx86
    1. Ship It!
    2. 
        
    SM
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to master (21192d0)