Ejemplo n.º 1
0
    def sync(self, get_files=None, get_catalog=None, force=False):
        if get_files is None:
            get_files = self.get_files

        if get_catalog is None:
            from rpi_courses import CourseCatalog
            get_catalog = CourseCatalog.from_string

        self.forced = force

        for filename in get_files(self.latest_semester):
            semester = self.semesters.get(filename)
            # if latest semester or newer semester
            if (not semester) or semester == self.latest_semester:
                try:
                    with closing(urllib2.urlopen(filename)) as page:
                        logger.debug("OPEN " + filename)
                        if force or (semester and semester.date_updated is not None):
                            last_mod = dateutil.parser.parse(dict(page.info())['last-modified']).replace(tzinfo=None)
                            if not force and last_mod <= semester.date_updated:
                                logger.debug("Skipping b/c of mod date: %r <= %r" % (last_mod, semester.date_updated))
                                continue
                        catalog = get_catalog(page.read(), filename)
                except urllib2.URLError:
                    logger.debug("Failed to fetch url (%r)" % (filename))
                    continue

                if not force and self.latest_semester and semester == self.latest_semester:
                    continue  # already up-to-date

                logger.debug("Semester: %r => %s-%s" % (
                    filename,
                    catalog.year,
                    catalog.month,
                ))
                semester_obj, created = Semester.objects.get_or_create(
                    year=catalog.year,
                    month=catalog.month,
                    ref=filename,
                    defaults={
                        'visible': False,
                        'name': catalog.name,
                    })
                self.create_courses(catalog, semester_obj)
                # catalog doesn't support this for now.
                #self.create_crosslistings(semester_obj, set(catalog.crosslistings.values()))
                semester_obj.save()  # => update date_updated property
                if created:
                    logger.debug(' CREATE SEMESTER ' + repr(semester_obj))
                    self.notifier.requires_notification()
                else:
                    logger.debug(' EXISTS SEMESTER ' + repr(semester_obj))
                if self.sections_changed:
                    sections_modified.send(sender=self, semester=semester_obj)

                self.clear_unused(semester_obj)
Ejemplo n.º 2
0
Archivo: rpi.py Proyecto: Radzell/YACS
    def sync(self, get_files=None, get_catalog=None):
        "Performs the updating of the database data from RPI's SIS"
        if get_files is None:
            from rpi_courses import list_rocs_xml_files
            get_files = list_rocs_xml_files

        if get_catalog is None:
            from rpi_courses import ROCSCourseCatalog
            get_catalog = ROCSCourseCatalog.from_url

        for filename in get_files():
            name = self.FILE_RE.finditer(filename).next().groups()[0]
            semester = self.semesters.get(name + '.xml')
            # if latest semester or newer semester
            if (not semester) or semester == self.latest_semester:
                catalog = get_catalog(filename)

                if self.latest_semester and semester == self.latest_semester and catalog.datetime <= self.latest_semester.date_updated:
                    continue  # already up-to-date

                logger.debug('found catalog for: %r %r' %
                             (catalog.year, catalog.month))

                semester_obj = None
                try:
                    semester_obj, created = Semester.objects.get_or_create(
                        year=catalog.year,
                        month=catalog.month,
                        defaults={
                            'visible': True,
                            'name': catalog.name,
                            'ref': filename,
                        })
                except IntegrityError as error:
                    logger.debug(' DUPLICATE SEMESTER ' + repr(semester_obj) +
                                 ': ' + repr(error))
                    continue
                self.create_courses(catalog, semester_obj)
                self.create_crosslistings(semester_obj,
                                          set(catalog.crosslistings.values()))
                semester_obj.save()  # => update date_updated property
                if created:
                    logger.debug(' CREATE SEMESTER ' + repr(semester_obj))
                    self.notifier.requires_notification()
                else:
                    logger.debug(' EXISTS SEMESTER ' + repr(semester_obj))
                if self.sections_changed:
                    sections_modified.send(sender=self, semester=semester_obj)

                self.clear_unused(semester_obj)
Ejemplo n.º 3
0
Archivo: rpi.py Proyecto: Radzell/YACS
    def sync(self, get_files=None, get_catalog=None):
        "Performs the updating of the database data from RPI's SIS"
        if get_files is None:
            from rpi_courses import list_rocs_xml_files
            get_files = list_rocs_xml_files

        if get_catalog is None:
            from rpi_courses import ROCSCourseCatalog
            get_catalog = ROCSCourseCatalog.from_url

        for filename in get_files():
            name = self.FILE_RE.finditer(filename).next().groups()[0]
            semester = self.semesters.get(name + '.xml')
            # if latest semester or newer semester
            if (not semester) or semester == self.latest_semester:
                catalog = get_catalog(filename)

                if self.latest_semester and semester == self.latest_semester and catalog.datetime <= self.latest_semester.date_updated:
                    continue  # already up-to-date

                logger.debug('found catalog for: %r %r' % (catalog.year, catalog.month))

                semester_obj = None
                try:
                    semester_obj, created = Semester.objects.get_or_create(
                        year=catalog.year,
                        month=catalog.month,
                        defaults={
                            'visible': True,
                            'name': catalog.name,
                            'ref': filename,
                        })
                except IntegrityError as error:
                    logger.debug(' DUPLICATE SEMESTER ' + repr(semester_obj) + ': ' + repr(error))
                    continue
                self.create_courses(catalog, semester_obj)
                self.create_crosslistings(semester_obj, set(catalog.crosslistings.values()))
                semester_obj.save()  # => update date_updated property
                if created:
                    logger.debug(' CREATE SEMESTER ' + repr(semester_obj))
                    self.notifier.requires_notification()
                else:
                    logger.debug(' EXISTS SEMESTER ' + repr(semester_obj))
                if self.sections_changed:
                    sections_modified.send(sender=self, semester=semester_obj)

                self.clear_unused(semester_obj)
Ejemplo n.º 4
0
Archivo: rpi.py Proyecto: Radzell/YACS
    def sync(self, get_files=None, get_catalog=None, force=False):
        if get_files is None:
            get_files = self.get_files

        if get_catalog is None:
            from rpi_courses import CourseCatalog
            get_catalog = CourseCatalog.from_string

        self.forced = force

        for filename in get_files(self.latest_semester):
            semester = self.semesters.get(filename)
            # if latest semester or newer semester
            if (not semester) or semester == self.latest_semester:
                try:
                    with closing(urllib2.urlopen(filename)) as page:
                        logger.debug("OPEN " + filename)
                        if force or (semester
                                     and semester.date_updated is not None):
                            last_mod = dateutil.parser.parse(
                                dict(page.info())['last-modified']).replace(
                                    tzinfo=None)
                            if not force and last_mod <= semester.date_updated:
                                logger.debug(
                                    "Skipping b/c of mod date: %r <= %r" %
                                    (last_mod, semester.date_updated))
                                continue
                        catalog = get_catalog(page.read(), filename)
                except urllib2.URLError:
                    logger.debug("Failed to fetch url (%r)" % (filename))
                    continue

                if not force and self.latest_semester and semester == self.latest_semester:
                    continue  # already up-to-date

                logger.debug("Semester: %r => %s-%s" % (
                    filename,
                    catalog.year,
                    catalog.month,
                ))
                semester_obj = None
                try:
                    semester_obj, created = Semester.objects.get_or_create(
                        ref=filename,
                        defaults={
                            'year': catalog.year,
                            'month': catalog.month,
                            'visible': False,
                            'name': catalog.name,
                        })
                except IntegrityError as error:
                    logger.debug(' DUPLICATE SEMESTER ' + repr(semester_obj) +
                                 ': ' + repr(error))
                    continue
                self.create_courses(catalog, semester_obj)
                # catalog doesn't support this for now.
                #self.create_crosslistings(semester_obj, set(catalog.crosslistings.values()))
                semester_obj.save()  # => update date_updated property
                if created:
                    logger.debug(' CREATE SEMESTER ' + repr(semester_obj))
                    self.notifier.requires_notification()
                else:
                    logger.debug(' EXISTS SEMESTER ' + repr(semester_obj))
                if self.sections_changed:
                    sections_modified.send(sender=self, semester=semester_obj)

                self.clear_unused(semester_obj)