def test_remove_keys(self):
        dict_of_dicts = {
            'foo': {
                'bar': {
                    'baz': 1,
                    'fizz': 2
                }
            },
            'flat': 0
        }
        flat_dict = {
            'foo': 1,
            'bar': 2,
            'baz': 3
        }

        flat_dict_no_foo = flat_dict.copy()
        del flat_dict_no_foo['foo']
        self.assertDictEqual(remove_keys(flat_dict, ('foo',)), flat_dict_no_foo)

        dict_of_dicts_no_fizz = deepcopy(dict_of_dicts)
        del dict_of_dicts_no_fizz['foo']['bar']['fizz']
        self.assertDictEqual(remove_keys(dict_of_dicts, {'foo': {'bar': ('fizz',)}}), dict_of_dicts_no_fizz)

        del dict_of_dicts_no_fizz['flat']
        self.assertDictEqual(remove_keys(dict_of_dicts, {'foo': {'bar': ('fizz',)}, '': ('flat',)}),
                             dict_of_dicts_no_fizz)
Esempio n. 2
0
    def test_remove_keys(self):
        dict_of_dicts = {
            'foo': {
                'bar': {
                    'baz': 1,
                    'fizz': 2
                }
            },
            'burp': {
                'baz': 1,
            },
            'flat': 0
        }
        flat_dict = {'foo': 1, 'bar': 2, 'baz': 3}

        flat_dict_no_foo = flat_dict.copy()
        del flat_dict_no_foo['foo']
        self.assertDictEqual(remove_keys(flat_dict, ('foo', )),
                             flat_dict_no_foo)

        dict_of_dicts_no_fizz = deepcopy(dict_of_dicts)
        del dict_of_dicts_no_fizz['foo']['bar']['fizz']
        self.assertDictEqual(
            remove_keys(dict_of_dicts, {'foo': {
                'bar': ('fizz', )
            }}), dict_of_dicts_no_fizz)

        del dict_of_dicts_no_fizz['flat']
        self.assertDictEqual(
            remove_keys(dict_of_dicts, {
                'foo': {
                    'bar': ('fizz', )
                },
                '': ('flat', )
            }), dict_of_dicts_no_fizz)
    def get_data(self):
        courses = permissions.get_user_course_permissions(self.request.user)
        if not courses:
            # The user is probably not a course administrator and should not be using this application.
            raise PermissionDenied

        enable_course_filters = switch_is_active('enable_course_filters')

        presenter = CourseSummariesPresenter()
        summaries, _ = presenter.get_course_summaries(courses)

        if not summaries:
            # Instead of returning a useless blank CSV, return a 404 error
            raise Http404

        # Exclude specified fields from each summary entry
        summaries = [remove_keys(summary, self.exclude_fields) for summary in summaries]

        if enable_course_filters:
            # Add list of associated program IDs to each summary entry
            programs_presenter = ProgramsPresenter()
            programs = programs_presenter.get_programs(course_ids=courses)
            for summary in summaries:
                summary_programs = [program for program in programs if summary['course_id'] in program['course_ids']]
                summary['program_ids'] = ' | '.join([program['program_id'] for program in summary_programs])
                summary['program_titles'] = ' | '.join([program['program_title'] for program in summary_programs])

        summaries_csv = self.renderer.render(summaries)
        return summaries_csv
    def get_data(self):
        courses = permissions.get_user_course_permissions(self.request.user)
        if not courses:
            # The user is probably not a course administrator and should not be using this application.
            raise PermissionDenied

        presenter = CourseSummariesPresenter()
        summaries, _ = presenter.get_course_summaries(courses)
        if not summaries:
            # Instead of returning a useless blank CSV, return a 404 error
            raise Http404

        # Exclude specified fields from each summary entry and render them to a CSV
        summaries = [
            remove_keys(summary, self.exclude_fields) for summary in summaries
        ]
        summaries_csv = self.renderer.render(summaries)
        return summaries_csv