diff --git a/openedx/core/djangoapps/site_configuration/models.py b/openedx/core/djangoapps/site_configuration/models.py index 295b267aeb..9fce936698 100644 --- a/openedx/core/djangoapps/site_configuration/models.py +++ b/openedx/core/djangoapps/site_configuration/models.py @@ -60,6 +60,25 @@ class SiteConfiguration(models.Model): return default + @classmethod + def get_configuration_for_org(cls, org): + """ + This returns a SiteConfiguration object which has an org_filter that matches + the supplied org + + Args: + org (str): Org to use to filter SiteConfigurations + """ + for configuration in cls.objects.filter(values__contains=org, enabled=True).all(): + course_org_filter = configuration.get_value('course_org_filter', []) + # The value of 'course_org_filter' can be configured as a string representing + # a single organization or a list of strings representing multiple organizations. + if not isinstance(course_org_filter, list): + course_org_filter = [course_org_filter] + if org in course_org_filter: + return configuration + return None + @classmethod def get_value_for_org(cls, org, name, default=None): """ @@ -74,15 +93,11 @@ class SiteConfiguration(models.Model): Returns: Configuration value for the given key. """ - for configuration in cls.objects.filter(values__contains=org, enabled=True).all(): - course_org_filter = configuration.get_value('course_org_filter', []) - # The value of 'course_org_filter' can be configured as a string representing - # a single organization or a list of strings representing multiple organizations. - if not isinstance(course_org_filter, list): - course_org_filter = [course_org_filter] - if org in course_org_filter: - return configuration.get_value(name, default) - return default + configuration = cls.get_configuration_for_org(org) + if configuration is None: + return default + else: + return configuration.get_value(name, default) @classmethod def get_all_orgs(cls): diff --git a/openedx/core/djangoapps/site_configuration/tests/test_models.py b/openedx/core/djangoapps/site_configuration/tests/test_models.py index e05984fb0c..88645a48bd 100644 --- a/openedx/core/djangoapps/site_configuration/tests/test_models.py +++ b/openedx/core/djangoapps/site_configuration/tests/test_models.py @@ -275,6 +275,34 @@ class SiteConfigurationTests(TestCase): "dummy-default-value", ) + def test_get_site_for_org(self): + """ + Test that get_value_for_org returns correct value for any given key. + """ + # add SiteConfiguration to database + config1 = SiteConfigurationFactory.create( + site=self.site, + values=self.test_config1, + ) + config2 = SiteConfigurationFactory.create( + site=self.site2, + values=self.test_config2, + ) + + # Make sure entry is saved and retrieved correctly + self.assertEqual( + SiteConfiguration.get_configuration_for_org(self.test_config1['course_org_filter']), + config1, + ) + self.assertEqual( + SiteConfiguration.get_configuration_for_org(self.test_config2['course_org_filter']), + config2, + ) + self.assertEqual( + SiteConfiguration.get_configuration_for_org('something else'), + None, + ) + def test_get_all_orgs(self): """ Test that get_all_orgs returns all orgs from site configuration.