コード例 #1
0
    def handle(self, *args, **options):
        """Logic of the command.

        Args:
            *args: Args of command.
            **options: Command options.
        """
        tracker = Tracker()
        tracker.mode = 'ingesting'
        self.stat_view = StatView()
        tracker.add_viewer(self.stat_view)
        if options['display_progress_bar']:
            tracker.add_viewer(
                StatProgressBar('{valid}/{total}', statistics=self.stat_view))
        tracker.start()

        for parser_type in options['types']:
            for school in options['schools']:
                tracker.school = school

                try:
                    parsing = __import__(
                        'parsing.schools.{school}.{parser_type}'.format(
                            school=school, parser_type=parser_type))
                    parser = eval(
                        'parsing.schools.{school}.{parser_type}.Parser'.format(
                            school=school, parser_type=parser_type))
                    self.run(parser, tracker, options, parser_type, school)
                except ImportError:
                    logging.exception('Invalid parser')
                    continue

        tracker.end()
コード例 #2
0
    def run(self, tracker, school, data_type, options):
        """Run the command."""
        tracker.school = school
        tracker.mode = "validating"
        if options["display_progress_bar"]:
            tracker.add_viewer(
                StatProgressBar("{valid}/{total}", statistics=self.stat_view),
                name="progressbar",
            )
        logger = logging.getLogger("parsing.schools." + school)
        logger.debug("Digest command options:" + str(options))

        # Load config file to dictionary.
        if isinstance(options["config"], str):
            with open(options["config"].format(school=school, type=data_type),
                      "r") as file:
                options["config"] = json.load(file)

        try:
            Validator(options["config"],
                      tracker=tracker).validate_self_contained(
                          options["data"].format(school=school,
                                                 type=data_type),
                          break_on_error=True,
                          break_on_warning=options.get("break_on_warning"),
                          display_progress_bar=options["display_progress_bar"],
                      )
        except (ValidationError, ValidationWarning, Exception):
            logging.exception("Failed validation before digestion")
            return  # Skip digestion for this school.

        if options["display_progress_bar"]:
            tracker.remove_viewer("progressbar")
            tracker.add_viewer(ETAProgressBar(), name="progressbar")
        tracker.mode = "digesting"

        with open(options["data"].format(school=school, type=data_type),
                  "r") as file:
            data = json.load(file)

        try:
            Digestor(school, meta=data["$meta"], tracker=tracker).digest(
                data["$data"],
                diff=options["diff"],
                load=options["load"],
                output=options["output_diff"].format(school=school,
                                                     type=data_type),
            )

        except DigestionError:
            logging.exception("Failed digestion")
        except PipelineException:
            logging.expection("Failed digestion w/in pipeline")
        except Exception:
            logging.exception("Failed digestion with uncaught exception")

        logging.info("Digestion overview for " + school + ": " +
                     str(self.stat_view.report()))
コード例 #3
0
ファイル: digest.py プロジェクト: yzhan289/semesterly
    def run(self, tracker, school, data_type, options):
        """Run the command."""
        tracker.school = school
        tracker.mode = 'validating'
        if options['display_progress_bar']:
            tracker.add_viewer(StatProgressBar('{valid}/{total}',
                                               statistics=self.stat_view),
                               name='progressbar')
        logger = logging.getLogger('parsing.schools.' + school)
        logger.debug('Digest command options:' + str(options))

        # Load config file to dictionary.
        if isinstance(options['config'], str):
            with open(options['config'].format(school=school, type=data_type),
                      'r') as file:
                options['config'] = json.load(file)

        try:
            Validator(options['config'],
                      tracker=tracker).validate_self_contained(
                          options['data'].format(school=school,
                                                 type=data_type),
                          break_on_error=True,
                          break_on_warning=options.get('break_on_warning'),
                          display_progress_bar=options['display_progress_bar'])
        except (ValidationError, ValidationWarning, Exception):
            logging.exception('Failed validation before digestion')
            return  # Skip digestion for this school.

        if options['display_progress_bar']:
            tracker.remove_viewer('progressbar')
            tracker.add_viewer(ETAProgressBar(), name='progressbar')
        tracker.mode = 'digesting'

        with open(options['data'].format(school=school, type=data_type),
                  'r') as file:
            data = json.load(file)

        try:
            Digestor(school, meta=data['$meta'], tracker=tracker).digest(
                data['$data'],
                diff=options['diff'],
                load=options['load'],
                output=options['output_diff'].format(school=school,
                                                     type=data_type))

        except DigestionError:
            logging.exception('Failed digestion')
        except PipelineException:
            logging.expection('Failed digestion w/in pipeline')
        except Exception:
            logging.exception('Failed digestion with uncaught exception')

        logging.info('Digestion overview for ' + school + ': ' +
                     str(self.stat_view.report()))
コード例 #4
0
    def handle(self, *args, **options):
        """Logic of the command.

        Args:
            *args: Args of command.
            **options: Command options.
        """
        tracker = Tracker()
        tracker.mode = 'validating'
        if options['display_progress_bar']:
            tracker.add_viewer(StatProgressBar('{valid}/{total}'))
        tracker.start()

        for parser_type in options['types']:
            for school in options['schools']:
                self.run(options, school, parser_type, tracker)
コード例 #5
0
ファイル: ingest.py プロジェクト: rbiz4/semesterly
    def handle(self, *args, **options):
        """Logic of the command.

        Args:
            *args: Args of command.
            **options: Command options.
        """
        tracker = Tracker()
        tracker.mode = 'ingesting'
        self.stat_view = StatView()
        tracker.add_viewer(self.stat_view)
        if options['display_progress_bar']:
            tracker.add_viewer(
                StatProgressBar('{valid}/{total}', statistics=self.stat_view))
        tracker.start()

        for parser_type in options['types']:
            for school in options['schools']:
                tracker.school = school
                self.run(SCHOOLS_MAP[school].parsers[parser_type], tracker,
                         options, parser_type, school)
        tracker.end()