Merge pull request #19093 from cpennington/org-to-site-config
Add a facility for getting the SiteConfiguration that an org belongs to
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user