Changeset 578:c249d8fce092


Ignore:
Timestamp:
30/04/12 14:23:25 (13 months ago)
Author:
Santiago Piccinini (SAn) <piccinini.santiago@…>
Branch:
multisite
Message:

Refactored out replace_settings function of multisite middleware and added tests

Location:
cyclope
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cyclope/core/multisite/middleware.py

    r575 r578  
    5959 
    6060        admin.autodiscover() 
    61         for setting_name in dir(site_settings): 
    62             if setting_name == setting_name.upper(): 
    63                 old_value = getattr(settings, setting_name, None) 
    64                 new_value = getattr(site_settings, setting_name) 
    6561 
    66                 # this is a dynamic setting 
    67                 if issubclass(type(old_value), DynamicSetting): 
    68                     # the current site did not override the default 
    69                     if issubclass(type(new_value), DynamicSetting): 
    70                         old_value.set(getattr(default_settings, setting_name)) 
    71                     else: 
    72                         old_value.set(new_value) 
    73                 else: 
    74                     setattr(settings, setting_name, new_value) 
    75  
     62        replace_settings(settings, site_settings) 
    7663        cyc_settings.reload_settings() 
    7764 
     
    8673            patch_vary_headers(response, ('Host',)) 
    8774        return response 
     75 
     76def replace_settings(old_settings, new_settings): 
     77    """ 
     78    Updates old_settings values with new_settings's using DynamicSettings. 
     79    """ 
     80    for setting_name in dir(new_settings): 
     81        if setting_name == setting_name.upper(): 
     82            old_value = getattr(old_settings, setting_name, None) 
     83            new_value = getattr(new_settings, setting_name) 
     84 
     85            # this is a dynamic setting 
     86            if issubclass(type(old_value), DynamicSetting): 
     87                # the current site did not override the default 
     88                if issubclass(type(new_value), DynamicSetting): 
     89                    old_value.set(getattr(default_settings, setting_name)) 
     90                else: 
     91                    old_value.set(new_value) 
     92            else: 
     93                setattr(old_settings, setting_name, new_value) 
     94 
  • cyclope/tests.py

    r573 r578  
    4444from cyclope.sitemaps import CollectionSitemap, CategorySitemap, MenuSitemap 
    4545from cyclope.core.multisite.threadlocals import DynamicSetting 
     46from cyclope.core.multisite.middleware import replace_settings 
    4647 
    4748 
     
    533534        self.assertEqual(float(self.ds), 1.0) 
    534535 
     536class DynamicSettingsMiddlewareTestCase(TestCase): 
     537 
     538    def test_replace_settings(self): 
     539 
     540        class Setting(object): pass 
     541        settings_a = Setting() 
     542        settings_a.FOO = 3 
     543 
     544        settings_new = Setting() 
     545        settings_new.FOO = 5 
     546 
     547        replace_settings(settings_a, settings_new) 
     548        self.assertTrue(isinstance(settings_a.FOO, int)) 
     549        self.assertEqual(int(settings_a.FOO), 5) 
     550 
     551        settings_a.FOO = DynamicSetting("FOO") 
     552        settings_a.FOO.set(3) 
     553        settings_new.FOO = 5 
     554        replace_settings(settings_a, settings_new) 
     555        self.assertTrue(isinstance(settings_a.FOO, DynamicSetting)) 
     556        self.assertEqual(int(settings_a.FOO), 5) 
     557 
     558 
     559 
     560 
    535561 
    536562 
Note: See TracChangeset for help on using the changeset viewer.