Esempio n. 1
0
    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,
        )
Esempio n. 2
0
    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,
        )
Esempio n. 3
0
def get_lms_link_for_item(location, preview=False):
    """
    Returns an LMS link to the course with a jump_to to the provided location.

    :param location: the location to jump to
    :param preview: True if the preview version of LMS should be returned. Default value is false.
    """
    assert isinstance(location, UsageKey)

    # checks LMS_BASE value in site configuration for the given course_org_filter(org)
    # if not found returns settings.LMS_BASE
    lms_base = SiteConfiguration.get_value_for_org(
        location.org,
        "LMS_BASE",
        settings.LMS_BASE
    )

    if lms_base is None:
        return None

    if preview:
        # checks PREVIEW_LMS_BASE value in site configuration for the given course_org_filter(org)
        # if not found returns settings.FEATURES.get('PREVIEW_LMS_BASE')
        lms_base = SiteConfiguration.get_value_for_org(
            location.org,
            "PREVIEW_LMS_BASE",
            settings.FEATURES.get('PREVIEW_LMS_BASE')
        )

    return u"//{lms_base}/courses/{course_key}/jump_to/{location}".format(
        lms_base=lms_base,
        course_key=location.course_key.to_deprecated_string(),
        location=location.to_deprecated_string(),
    )
Esempio n. 4
0
def get_lms_link_for_item(location, preview=False):
    """
    Returns an LMS link to the course with a jump_to to the provided location.

    :param location: the location to jump to
    :param preview: True if the preview version of LMS should be returned. Default value is false.
    """
    assert isinstance(location, UsageKey)

    # checks LMS_BASE value in site configuration for the given course_org_filter(org)
    # if not found returns settings.LMS_BASE
    lms_base = SiteConfiguration.get_value_for_org(location.org, "LMS_BASE",
                                                   settings.LMS_BASE)

    if lms_base is None:
        return None

    if preview:
        # checks PREVIEW_LMS_BASE value in site configuration for the given course_org_filter(org)
        # if not found returns settings.FEATURES.get('PREVIEW_LMS_BASE')
        lms_base = SiteConfiguration.get_value_for_org(
            location.org, "PREVIEW_LMS_BASE",
            settings.FEATURES.get('PREVIEW_LMS_BASE'))

    return u"//{lms_base}/courses/{course_key}/jump_to/{location}".format(
        lms_base=lms_base,
        course_key=text_type(location.course_key),
        location=text_type(location),
    )
    def handle_noargs(self, **options):
        s = Site.objects.get(id=settings.SITE_ID)

        try:
            if SiteConfiguration.objects.filter(site=s).exists():
                print("Default SiteConfiguration already exists. Doing nothing.")
            else:
                sc = SiteConfiguration(
                    site=s,
                    enabled=True)
                sc.save()
                print("Created default SiteConfiguration.")
        except Exception as e:
            print("Failed to create default configuration. Error: {0}".format(str(e)))
            sys.exit(-1)
Esempio n. 6
0
    def test_get_all_orgs(self):
        """
        Test that get_all_orgs returns all orgs from site configuration.
        """
        expected_orgs = [
            self.test_config1['course_org_filter'],
            self.test_config2['course_org_filter']
        ]
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(
            site=self.site,
            site_values=self.test_config1,
            # TODO: Remove this deprecated value eventually.
            values=self.test_config1,
        )
        SiteConfigurationFactory.create(
            site=self.site2,
            site_values=self.test_config2,
            # TODO: Remove this deprecated value eventually.
            values=self.test_config2,
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        six.assertCountEqual(self, SiteConfiguration.get_all_orgs(),
                             expected_orgs)
Esempio n. 7
0
def generate_ics_files_for_user_course(course, user,
                                       user_calendar_sync_config_instance):
    """
    Generates ics-formatted bytestrings of all assignments for a given course and user.

    To pretty-print each bytestring, do: `ics.decode('utf8').replace('\r\n', '\n')`

    Returns a dictionary of ics files, each one representing an assignment.
    """
    assignments = get_course_assignments(course.id, user)
    platform_name = get_value('platform_name', settings.PLATFORM_NAME)
    platform_email = get_value('email_from_address',
                               settings.DEFAULT_FROM_EMAIL)
    now = datetime.now(pytz.utc)
    site_config = SiteConfiguration.get_configuration_for_org(course.org)

    ics_files = {}
    for assignment in assignments:
        ics_files[assignment.title] = generate_ics_for_event(
            now=now,
            organizer_name=platform_name,
            organizer_email=platform_email,
            start=assignment.date,
            title=assignment.title,
            course_name=course.display_name_with_default,
            uid=get_calendar_event_id(user, str(assignment.block_key), 'due',
                                      site_config.site.domain),
            config=user_calendar_sync_config_instance,
        )

    return ics_files
    def test_get_value_for_org(self):
        """
        Test that get_value_for_org returns correct value for any given key.
        """
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(
            site=self.site,
            site_values=self.test_config1
        )
        SiteConfigurationFactory.create(
            site=self.site2,
            site_values=self.test_config2
        )

        # Make sure entry is saved and retrieved correctly
        assert SiteConfiguration.get_value_for_org(self.test_config1['course_org_filter'], 'university') ==\
               self.test_config1['university']
        assert SiteConfiguration.get_value_for_org(self.test_config1['course_org_filter'], 'platform_name') ==\
               self.test_config1['platform_name']
        assert SiteConfiguration.get_value_for_org(self.test_config1['course_org_filter'], 'SITE_NAME') ==\
               self.test_config1['SITE_NAME']
        assert SiteConfiguration.get_value_for_org(self.test_config1['course_org_filter'], 'css_overrides_file') ==\
               self.test_config1['css_overrides_file']
        assert SiteConfiguration.get_value_for_org(self.test_config1['course_org_filter'], 'ENABLE_MKTG_SITE') ==\
               self.test_config1['ENABLE_MKTG_SITE']

        # Make sure entry is saved and retrieved correctly
        assert SiteConfiguration.get_value_for_org(self.test_config2['course_org_filter'], 'university') ==\
               self.test_config2['university']

        assert SiteConfiguration.get_value_for_org(self.test_config2['course_org_filter'], 'platform_name') ==\
               self.test_config2['platform_name']
        assert SiteConfiguration\
            .get_value_for_org(self.test_config2['course_org_filter'], 'SITE_NAME') == \
               self.test_config2['SITE_NAME']

        assert SiteConfiguration\
            .get_value_for_org(self.test_config2['course_org_filter'],
                               'css_overrides_file') == self.test_config2['css_overrides_file']

        assert SiteConfiguration\
            .get_value_for_org(self.test_config2['course_org_filter'],
                               'ENABLE_MKTG_SITE') == self.test_config2['ENABLE_MKTG_SITE']

        # Test that the default value is returned if the value for the given key is not found in the configuration
        assert SiteConfiguration\
            .get_value_for_org(self.test_config1['course_org_filter'],
                               'non-existent', 'dummy-default-value') == 'dummy-default-value'

        # Test that the default value is returned if the value for the given key is not found in the configuration
        assert SiteConfiguration\
            .get_value_for_org(self.test_config2['course_org_filter'],
                               'non-existent', 'dummy-default-value') == 'dummy-default-value'

        # Test that the default value is returned if org is not found in the configuration
        assert SiteConfiguration.get_value_for_org('non-existent-org', 'platform_name', 'dummy-default-value') ==\
               'dummy-default-value'
Esempio n. 9
0
 def _site_from_org(cls, org):
     configuration = SiteConfiguration.get_configuration_for_org(org, select_related=['site'])
     if configuration is None:
         try:
             return Site.objects.get(id=settings.SITE_ID)
         except Site.DoesNotExist:
             return RequestSite(crum.get_current_request())
     else:
         return configuration.site
Esempio n. 10
0
 def _site_from_org(cls, org):
     configuration = SiteConfiguration.get_configuration_for_org(org)
     if configuration is None:
         try:
             return Site.objects.get(id=settings.SITE_ID)
         except Site.DoesNotExist:
             return RequestSite(crum.get_current_request())
     else:
         return configuration.site
Esempio n. 11
0
    def _site_from_org(cls, org):  # lint-amnesty, pylint: disable=missing-function-docstring

        configuration = SiteConfiguration.get_configuration_for_org(org, select_related=['site'])
        if configuration is None:
            try:
                return Site.objects.get(id=settings.SITE_ID)
            except Site.DoesNotExist:
                return RequestSite(crum.get_current_request())
        else:
            return configuration.site
Esempio n. 12
0
def get_value_for_org(org, val_name, default=None):
    """
    This returns a configuration value for a site configuration or microsite configuration
    which has an org_filter that matches with the argument.

    Args:
        org (str): Course org filter, this value will be used to filter out the correct site configuration.
        name (str): Name of the key for which to return configuration value.
        default: default value to return if key is not present in the configuration

    Returns:
        Configuration value for the given key.

    """
    # Here we first look for the asked org inside site configuration, and if org is not present in site configuration
    # then we go ahead and look it inside microsite configuration.
    if SiteConfiguration.has_org(org):
        return SiteConfiguration.get_value_for_org(org, val_name, default)
    else:
        return microsite.get_value_for_org(org, val_name, default)
Esempio n. 13
0
def get_value_for_org(org, val_name, default=None):
    """
    This returns a configuration value for a site configuration or microsite configuration
    which has an org_filter that matches with the argument.

    Args:
        org (str): Course org filter, this value will be used to filter out the correct site configuration.
        name (str): Name of the key for which to return configuration value.
        default: default value to return if key is not present in the configuration

    Returns:
        Configuration value for the given key.

    """
    # Here we first look for the asked org inside site configuration, and if org is not present in site configuration
    # then we go ahead and look it inside microsite configuration.
    if SiteConfiguration.has_org(org):
        return SiteConfiguration.get_value_for_org(org, val_name, default)
    else:
        return microsite.get_value_for_org(org, val_name, default)
Esempio n. 14
0
    def test_get_all_orgs_returns_only_enabled(self):
        """
        Test that get_all_orgs returns only those orgs whose configurations are enabled.
        """
        expected_orgs = [self.test_config2["course_org_filter"]]
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(site=self.site, values=self.test_config1, enabled=False)
        SiteConfigurationFactory.create(site=self.site2, values=self.test_config2)

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertListEqual(list(SiteConfiguration.get_all_orgs()), expected_orgs)
Esempio n. 15
0
    def test_get_all_orgs(self):
        """
        Test that get_all_orgs returns all orgs from site configuration.
        """
        expected_orgs = [self.test_config1["course_org_filter"], self.test_config2["course_org_filter"]]
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(site=self.site, values=self.test_config1)
        SiteConfigurationFactory.create(site=self.site2, values=self.test_config2)

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertListEqual(list(SiteConfiguration.get_all_orgs()), expected_orgs)
Esempio n. 16
0
def get_value_for_org(org, val_name, default=None):
    """
    This returns a configuration value for a site configuration
    which has an org_filter that matches with the argument.

    Args:
        org (str): Course org filter, this value will be used to filter out the correct site configuration.
        val_name (str): Name of the key for which to return configuration value.
        default: default value to return if key is not present in the configuration

    Returns:
        Configuration value for the given key.

    """
    # Import is placed here to avoid model import at project startup.
    from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
    if SiteConfiguration.has_org(org):
        return SiteConfiguration.get_value_for_org(org, val_name, default)
    else:
        return default
Esempio n. 17
0
def get_all_orgs():
    """
    This returns all of the orgs that are considered in site configurations.
    This can be used, for example, to do filtering.

    Returns:
        A set of all organizations present in the site configuration.
    """
    # Import is placed here to avoid model import at project startup.
    from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
    return SiteConfiguration.get_all_orgs()
Esempio n. 18
0
def get_all_orgs():
    """
    This returns all of the orgs that are considered in site configurations or microsite configuration,
    This can be used, for example, to do filtering.

    Returns:
        A list of all organizations present in either microsite configuration or site configuration.
    """
    site_configuration_orgs = SiteConfiguration.get_all_orgs()
    microsite_orgs = microsite.get_all_orgs()

    return site_configuration_orgs.union(microsite_orgs)
Esempio n. 19
0
def get_all_orgs():
    """
    This returns all of the orgs that are considered in site configurations or microsite configuration,
    This can be used, for example, to do filtering.

    Returns:
        A list of all organizations present in either microsite configuration or site configuration.
    """
    site_configuration_orgs = SiteConfiguration.get_all_orgs()
    microsite_orgs = microsite.get_all_orgs()

    return site_configuration_orgs.union(microsite_orgs)
Esempio n. 20
0
def get_all_orgs():
    """
    This returns all of the orgs that are considered in site configurations or microsite configuration,
    This can be used, for example, to do filtering.

    Returns:
        A list of all organizations present in either microsite configuration or site configuration.
    """
    # Import is placed here to avoid model import at project startup.
    from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
    site_configuration_orgs = SiteConfiguration.get_all_orgs()
    microsite_orgs = microsite.get_all_orgs()

    return site_configuration_orgs.union(microsite_orgs)
Esempio n. 21
0
def get_all_orgs():
    """
    This returns all of the orgs that are considered in site configurations or microsite configuration,
    This can be used, for example, to do filtering.

    Returns:
        A list of all organizations present in either microsite configuration or site configuration.
    """
    # Import is placed here to avoid model import at project startup.
    from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
    site_configuration_orgs = SiteConfiguration.get_all_orgs()
    microsite_orgs = microsite.get_all_orgs()

    return site_configuration_orgs.union(microsite_orgs)
Esempio n. 22
0
def get_lms_link_for_item(location, preview=False):
    """
    Returns an LMS link to the course with a jump_to to the provided location.

    :param location: the location to jump to
    :param preview: True if the preview version of LMS should be returned. Default value is false.
    """
    assert isinstance(location, UsageKey)

    # checks LMS_BASE value in site configuration for the given course_org_filter(org)
    # if not found returns settings.LMS_BASE
    lms_base = SiteConfiguration.get_value_for_org(
        location.org,
        "LMS_BASE",
        microsite.get_value_for_org(location.org, 'SITE_NAME', settings.LMS_BASE),
    )

    if lms_base is None:
        return None

    # eduNEXT Disable preview for now (not microsite aware), it will redirect to a normal course.
    preview = False

    if preview:
        # checks PREVIEW_LMS_BASE value in site configuration for the given course_org_filter(org)
        # if not found returns settings.FEATURES.get('PREVIEW_LMS_BASE')
        lms_base = SiteConfiguration.get_value_for_org(
            location.org,
            "PREVIEW_LMS_BASE",
            settings.FEATURES.get('PREVIEW_LMS_BASE')
        )

    return u"//{lms_base}/courses/{course_key}/jump_to/{location}".format(
        lms_base=lms_base,
        course_key=text_type(location.course_key),
        location=text_type(location),
    )
Esempio n. 23
0
def get_lms_link_for_certificate_web_view(course_key, mode):
    """
    Returns the url to the certificate web view.
    """
    assert isinstance(course_key, CourseKey)

    # checks LMS_BASE value in SiteConfiguration against course_org_filter if not found returns settings.LMS_BASE
    lms_base = SiteConfiguration.get_value_for_org(course_key.org, "LMS_BASE",
                                                   settings.LMS_BASE)

    if lms_base is None:
        return None

    return "//{certificate_web_base}/certificates/course/{course_id}?preview={mode}".format(
        certificate_web_base=lms_base, course_id=str(course_key), mode=mode)
Esempio n. 24
0
def get_lms_link_for_item(location, preview=False):
    """
    Returns an LMS link to the course with a jump_to to the provided location.

    :param location: the location to jump to
    :param preview: True if the preview version of LMS should be returned. Default value is false.
    """
    assert isinstance(location, UsageKey)

    # checks LMS_BASE value in site configuration for the given course_org_filter(org)
    # if not found returns settings.LMS_BASE
    # eduNEXT 19.11.2015 make the link microsite aware, based on the org of the course
    lms_base = microsite.get_value_for_org(location.org, 'SITE_NAME')

    if not lms_base:
        lms_base = SiteConfiguration.get_value_for_org(location.org,
                                                       "LMS_BASE",
                                                       settings.LMS_BASE)

    if lms_base is None:
        return None

    # eduNEXT 19.11.2015 Disable preview for now (not microsite aware), it will redirect to a normal course.
    preview = False
    if preview:
        # checks PREVIEW_LMS_BASE value in site configuration for the given course_org_filter(org)
        # if not found returns settings.FEATURES.get('PREVIEW_LMS_BASE')
        lms_base = SiteConfiguration.get_value_for_org(
            location.org, "PREVIEW_LMS_BASE",
            settings.FEATURES.get('PREVIEW_LMS_BASE'))

    return u"//{lms_base}/courses/{course_key}/jump_to/{location}".format(
        lms_base=lms_base,
        course_key=location.course_key.to_deprecated_string(),
        location=location.to_deprecated_string(),
    )
    def get_handler_url(self, handler_name):
        base = SiteConfiguration.get_value_for_org(
            self.course_id.org,
            "LMS_ROOT_URL",
            settings.LMS_ROOT_URL,
        )

        if base.endswith("/"):
            base = base[:-1]

        return "{base}/courses/{course_key}/xblock/{usage_key}/handler/{handler_name}".format(
            base=base,
            course_key=self.course_id,
            usage_key=self.location,
            handler_name=handler_name,
        )
Esempio n. 26
0
    def test_get_all_orgs_returns_only_enabled(self):
        """
        Test that get_all_orgs returns only those orgs whose configurations are enabled.
        """
        expected_orgs = [self.test_config2['course_org_filter']]
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(
            site=self.site,
            site_values=self.test_config1,
            enabled=False,
        )
        SiteConfigurationFactory.create(site=self.site2,
                                        site_values=self.test_config2)

        # Test that the default value is returned if the value for the given key is not found in the configuration
        six.assertCountEqual(self, SiteConfiguration.get_all_orgs(),
                             expected_orgs)
Esempio n. 27
0
def get_lms_link_for_certificate_web_view(user_id, course_key, mode):
    """
    Returns the url to the certificate web view.
    """
    assert isinstance(course_key, CourseKey)

    # checks LMS_BASE value in SiteConfiguration against course_org_filter if not found returns settings.LMS_BASE
    lms_base = SiteConfiguration.get_value_for_org(course_key.org, "LMS_BASE", settings.LMS_BASE)

    if lms_base is None:
        return None

    return u"//{certificate_web_base}/certificates/user/{user_id}/course/{course_id}?preview={mode}".format(
        certificate_web_base=lms_base,
        user_id=user_id,
        course_id=unicode(course_key),
        mode=mode
    )
Esempio n. 28
0
    def test_get_all_orgs(self):
        """
        Test that get_all_orgs returns all orgs from site configuration.
        """
        expected_orgs = [
            self.test_config1['course_org_filter'],
            self.test_config2['course_org_filter']
        ]
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(
            site=self.site,
            values=self.test_config1,
        )
        SiteConfigurationFactory.create(
            site=self.site2,
            values=self.test_config2,
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertListEqual(
            list(SiteConfiguration.get_all_orgs()),
            expected_orgs,
        )
Esempio n. 29
0
def retrieve_last_sitewide_block_completed(username):
    """
    Completion utility
    From a string 'username' or object User retrieve
    the last course block marked as 'completed' and construct a URL

    :param username: str(username) or obj(User)
    :return: block_lms_url

    """
    if not completion_waffle.waffle().is_enabled(
            completion_waffle.ENABLE_COMPLETION_TRACKING):
        return

    if not isinstance(username, User):
        userobj = User.objects.get(username=username)
    else:
        userobj = username
    latest_completions_by_course = BlockCompletion.latest_blocks_completed_all_courses(
        userobj)

    known_site_configs = [
        other_site_config.get_value('course_org_filter')
        for other_site_config in SiteConfiguration.objects.all()
        if other_site_config.get_value('course_org_filter')
    ]

    current_site_configuration = get_config_value_from_site_or_settings(
        name='course_org_filter', site=get_current_site())

    # courses.edx.org has no 'course_org_filter'
    # however the courses within DO, but those entries are not found in
    # known_site_configs, which are White Label sites
    # This is necessary because the WL sites and courses.edx.org
    # have the same AWS RDS mySQL instance
    candidate_course = None
    candidate_block_key = None
    latest_date = None
    # Go through dict, find latest
    for course, [modified_date,
                 block_key] in latest_completions_by_course.items():
        if not current_site_configuration:
            # This is a edx.org
            if course.org in known_site_configs:
                continue
            if not latest_date or modified_date > latest_date:
                candidate_course = course
                candidate_block_key = block_key
                latest_date = modified_date

        else:
            # This is a White Label site, and we should find candidates from the same site
            if course.org not in current_site_configuration:
                # Not the same White Label, or a edx.org course
                continue
            if not latest_date or modified_date > latest_date:
                candidate_course = course
                candidate_block_key = block_key
                latest_date = modified_date

    if not candidate_course:
        return

    lms_root = SiteConfiguration.get_value_for_org(candidate_course.org,
                                                   "LMS_ROOT_URL",
                                                   settings.LMS_ROOT_URL)

    try:
        item = modulestore().get_item(candidate_block_key, depth=1)
    except ItemNotFoundError:
        item = None

    if not (lms_root and item):
        return

    return u"{lms_root}/courses/{course_key}/jump_to/{location}".format(
        lms_root=lms_root,
        course_key=text_type(item.location.course_key),
        location=text_type(item.location),
    )
Esempio n. 30
0
    def test_get_value_for_org(self):
        """
        Test that get_value_for_org returns correct value for any given key.
        """
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(site=self.site, values=self.test_config1)
        SiteConfigurationFactory.create(site=self.site2, values=self.test_config2)

        # Make sure entry is saved and retrieved correctly
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config1["course_org_filter"], "university"),
            self.test_config1["university"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config1["course_org_filter"], "platform_name"),
            self.test_config1["platform_name"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config1["course_org_filter"], "SITE_NAME"),
            self.test_config1["SITE_NAME"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config1["course_org_filter"], "css_overrides_file"),
            self.test_config1["css_overrides_file"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config1["course_org_filter"], "ENABLE_MKTG_SITE"),
            self.test_config1["ENABLE_MKTG_SITE"],
        )

        # Make sure entry is saved and retrieved correctly
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config2["course_org_filter"], "university"),
            self.test_config2["university"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config2["course_org_filter"], "platform_name"),
            self.test_config2["platform_name"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config2["course_org_filter"], "SITE_NAME"),
            self.test_config2["SITE_NAME"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config2["course_org_filter"], "css_overrides_file"),
            self.test_config2["css_overrides_file"],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(self.test_config2["course_org_filter"], "ENABLE_MKTG_SITE"),
            self.test_config2["ENABLE_MKTG_SITE"],
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1["course_org_filter"], "non-existent", "dummy-default-value"
            ),
            "dummy-default-value",
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2["course_org_filter"], "non-existent", "dummy-default-value"
            ),
            "dummy-default-value",
        )

        # Test that the default value is returned if org is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org("non-existent-org", "platform_name", "dummy-default-value"),
            "dummy-default-value",
        )
Esempio n. 31
0
def retrieve_last_sitewide_block_completed(user):
    """
    Completion utility
    From a string 'username' or object User retrieve
    the last course block marked as 'completed' and construct a URL

    :param user: obj(User)
    :return: block_lms_url

    """
    if not completion_waffle.waffle().is_enabled(completion_waffle.ENABLE_COMPLETION_TRACKING):
        return

    latest_completions_by_course = BlockCompletion.latest_blocks_completed_all_courses(user)

    known_site_configs = [
        other_site_config.get_value('course_org_filter') for other_site_config in SiteConfiguration.objects.all()
        if other_site_config.get_value('course_org_filter')
    ]

    current_site_configuration = get_config_value_from_site_or_settings(
        name='course_org_filter',
        site=get_current_site()
    )

    # courses.edx.org has no 'course_org_filter'
    # however the courses within DO, but those entries are not found in
    # known_site_configs, which are White Label sites
    # This is necessary because the WL sites and courses.edx.org
    # have the same AWS RDS mySQL instance
    candidate_course = None
    candidate_block_key = None
    latest_date = None
    # Go through dict, find latest
    for course, [modified_date, block_key] in latest_completions_by_course.items():
        if not current_site_configuration:
            # This is a edx.org
            if course.org in known_site_configs:
                continue
            if not latest_date or modified_date > latest_date:
                candidate_course = course
                candidate_block_key = block_key
                latest_date = modified_date

        else:
            # This is a White Label site, and we should find candidates from the same site
            if course.org not in current_site_configuration:
                # Not the same White Label, or a edx.org course
                continue
            if not latest_date or modified_date > latest_date:
                candidate_course = course
                candidate_block_key = block_key
                latest_date = modified_date

    if not candidate_course:
        return

    lms_root = SiteConfiguration.get_value_for_org(candidate_course.org, "LMS_ROOT_URL", settings.LMS_ROOT_URL)

    try:
        item = modulestore().get_item(candidate_block_key, depth=1)
    except ItemNotFoundError:
        item = None

    if not (lms_root and item):
        return

    return u"{lms_root}/courses/{course_key}/jump_to/{location}".format(
        lms_root=lms_root,
        course_key=text_type(item.location.course_key),
        location=text_type(item.location),
    )
Esempio n. 32
0
    def test_get_value_for_org(self):
        """
        Test that get_value_for_org returns correct value for any given key.
        """
        # add SiteConfiguration to database
        SiteConfigurationFactory.create(
            site=self.site,
            values=self.test_config1,
        )
        SiteConfigurationFactory.create(
            site=self.site2,
            values=self.test_config2,
        )

        # Make sure entry is saved and retrieved correctly
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "university"),
            self.test_config1['university'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "platform_name"),
            self.test_config1['platform_name'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "SITE_NAME"),
            self.test_config1['SITE_NAME'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "css_overrides_file"),
            self.test_config1['css_overrides_file'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "ENABLE_MKTG_SITE"),
            self.test_config1['ENABLE_MKTG_SITE'],
        )

        # Make sure entry is saved and retrieved correctly
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "university"),
            self.test_config2['university'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "platform_name"),
            self.test_config2['platform_name'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "SITE_NAME"),
            self.test_config2['SITE_NAME'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "css_overrides_file"),
            self.test_config2['css_overrides_file'],
        )
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "ENABLE_MKTG_SITE"),
            self.test_config2['ENABLE_MKTG_SITE'],
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config1['course_org_filter'], "non-existent",
                "dummy-default-value"),
            "dummy-default-value",
        )

        # Test that the default value is returned if the value for the given key is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org(
                self.test_config2['course_org_filter'], "non-existent",
                "dummy-default-value"),
            "dummy-default-value",
        )

        # Test that the default value is returned if org is not found in the configuration
        self.assertEqual(
            SiteConfiguration.get_value_for_org("non-existent-org",
                                                "platform_name",
                                                "dummy-default-value"),
            "dummy-default-value",
        )