def build(self, **kwargs):
        root_id = getattr(settings, 'SIS_IMPORT_ROOT_ACCOUNT_ID', None)

        for campus in get_all_campuses():
            campus_id = account_sis_id([root_id, campus.label])
            self.data.add(AccountCSV(campus_id, root_id, campus))

        for college in get_all_colleges():
            college_id = account_sis_id(
                [root_id, college.campus_label, college.name])
            campus_id = account_sis_id([root_id, college.campus_label])
            self.data.add(AccountCSV(college_id, campus_id, college))

            for department in get_departments_by_college(college):
                dept_id = account_sis_id([
                    root_id, college.campus_label, college.name,
                    department.label
                ])

                self.data.add(AccountCSV(dept_id, college_id, department))

                for curriculum in get_curricula_by_department(
                        department, future_terms=2, view_unpublished=True):
                    curr_id = account_sis_id([
                        root_id, college.campus_label, college.name,
                        department.label, curriculum.label
                    ])

                    if self.data.add(AccountCSV(curr_id, dept_id, curriculum)):
                        # Update the Curriculum model for this curriculum
                        try:
                            model = Curriculum.objects.get(
                                curriculum_abbr=curriculum.label)
                        except Curriculum.DoesNotExist:
                            model = Curriculum(
                                curriculum_abbr=curriculum.label)

                        model.full_name = account_name(curriculum)
                        model.subaccount_id = curr_id
                        model.save()

        return self._write()
    def build(self, **kwargs):
        root_id = getattr(settings, 'SIS_IMPORT_ROOT_ACCOUNT_ID', None)

        for campus in get_all_campuses():
            campus_id = account_sis_id([root_id, campus.label])
            self.data.add(AccountCSV(campus_id, root_id, campus))

        for college in get_all_colleges():
            college_id = account_sis_id([root_id, college.campus_label,
                                         college.name])
            campus_id = account_sis_id([root_id, college.campus_label])
            self.data.add(AccountCSV(college_id, campus_id, college))

            for department in get_departments_by_college(college):
                dept_id = account_sis_id([root_id, college.campus_label,
                                          college.name, department.label])

                self.data.add(AccountCSV(dept_id, college_id, department))

                for curriculum in get_curricula_by_department(
                        department, future_terms=2):
                    curr_id = account_sis_id([root_id, college.campus_label,
                                              college.name, department.label,
                                              curriculum.label])

                    if self.data.add(AccountCSV(curr_id, dept_id, curriculum)):
                        # Update the Curriculum model for this curriculum
                        try:
                            model = Curriculum.objects.get(
                                curriculum_abbr=curriculum.label)
                        except Curriculum.DoesNotExist:
                            model = Curriculum(
                                curriculum_abbr=curriculum.label)

                        model.full_name = account_name(curriculum)
                        model.subaccount_id = curr_id
                        model.save()

        return self._write()
Example #3
0
    def _canvas_account_from_academic_soc(soc):
        id_parts = []
        campus = None
        college = None
        for item in soc:
            itype = item._type.lower()
            if itype == 'swscampus':
                id_parts.append(settings.SIS_IMPORT_ROOT_ACCOUNT_ID)
                campus = get_campus_by_label(item._code)
                try:
                    id_parts.append(campus.label)
                except AttributeError:
                    raise ASTRAException('Unknown Campus: {}'.format(item))

            elif itype == 'swscollege':
                if campus is None:
                    raise ASTRAException('Missing Campus, {}'.format(item))
                college = get_college_by_label(campus, item._code)
                try:
                    id_parts.append(college.name)
                except AttributeError:
                    raise ASTRAException('Unknown College: {}'.format(item))

            elif itype == 'swsdepartment':
                if campus is None or college is None:
                    raise ASTRAException('Missing College, {}'.format(item))
                dept = get_department_by_label(college, item._code)
                try:
                    id_parts.append(dept.label)
                except AttributeError:
                    raise ASTRAException('Unknown Department: {}'.format(item))

            else:
                raise ASTRAException('Unknown SoC type, {}'.format(item))

        if not len(id_parts):
            raise ASTRAException('SoC empty list')

        return account_sis_id(id_parts)
                        soc[1]._code))
            else:
                raise ASTRAException('Unknown second level SOC: %s' % (
                    soc[1]._type))

            if len(soc) > 2:
                if soc[2]._type == 'swsdepartment':
                    if campus and college:
                        dept = self._get_department_from_code(college,
                                                              soc[2]._code)
                        id_parts.append(dept.label)
                    else:
                        raise ASTRAException('Unknown third level SOC: %s' % (
                            soc[0]))

        sis_id = account_sis_id(id_parts)

        if sis_id not in self._canvas_ids:
            canvas_account = get_account_by_sis_id(sis_id)
            self._canvas_ids[sis_id] = canvas_account.account_id

        return (sis_id, self._canvas_ids[sis_id])

    def load_all_admins(self, options={}):
        # loader running?
        queued = Admin.objects.queued()
        if len(queued):
            # look for pid matching queue_id, adjust gripe accordingly
            try:
                os.kill(queued[0].queue_id, 0)
                raise ASTRAException('loader already running %s' % (