Exemplo n.º 1
0
def command(text, verbose, quality):
    """
    """
    # logging
    if verbose:
        kwargs = {'stream': sys.stderr, 'level': logging.DEBUG}
    else:
        kwargs = {
            'level': logging.INFO,
            'format': '%(asctime)s %(levelname)s %(message)s',
            'filename': os.path.join(config.LOG_DIR, 'report.log')
        }
    logging.basicConfig(**kwargs)

    # period
    period = periods.Period(text)
    metas = {t: get_metas(NAMES[t], period) for t in 'fhd'}
    checker = Checker(quality)
    failures = []

    # the checking
    for d in period:
        for t in utils.get_valid_timeframes(d):
            m = checker.check(meta=metas[t].get(d, {}), date=d)
            if m:
                failures.append(
                    TEMPLATE_LOG.format(
                        datetime=d,
                        timeframe=t,
                        message=m,
                    ))

    # communicate
    if failures:
        logger.info('There were {} failures'.format(len(failures)))
        for f in failures:
            logger.info(f)
        report = TEMPLATE_EMAIL.format('\n'.join(failures))
        logger.debug('Email body:\n{}'.format(report))
        send_mail(report)
    else:
        logger.debug('Everything o.k.')
Exemplo n.º 2
0
def command(text, verbose, quality):
    """
    """
    # logging
    if verbose:
        kwargs = {'stream': sys.stderr,
                  'level': logging.DEBUG}
    else:
        kwargs = {'level': logging.INFO,
                  'format': '%(asctime)s %(levelname)s %(message)s',
                  'filename': os.path.join(config.LOG_DIR, 'report.log')}
    logging.basicConfig(**kwargs)

    # period
    period = periods.Period(text)
    metas = {t: get_metas(NAMES[t], period) for t in 'fhd'}
    checker = Checker(quality)
    failures = []

    # the checking
    for d in period:
        for t in utils.get_valid_timeframes(d):
            m = checker.check(meta=metas[t].get(d, {}), date=d)
            if m:
                failures.append(TEMPLATE_LOG.format(
                    datetime=d, timeframe=t, message=m,
                ))

    # communicate
    if failures:
        logger.info('There were {} failures'.format(len(failures)))
        for f in failures:
            logger.info(f)
        report = TEMPLATE_EMAIL.format('\n'.join(failures))
        logger.debug('Email body:\n{}'.format(report))
        send_mail(report)
    else:
        logger.debug('Everything o.k.')
Exemplo n.º 3
0
 def process(self, period):
     """
     Controls flushing and filters according to timeframe.
     on start: init according to datetime
     on edge: init and flush
     on finish: flush
     """
     datetimes = (d for d in period
                  if self.timeframe in utils.get_valid_timeframes(d))
     # grab first datetime if any, reset band index, meta accordingly
     try:
         first = datetimes.next()
     except StopIteration:
         return
     self.reset(first)
     self.consider(first)
     for datetime in datetimes:
         if datetime not in self.bands:
             if self.flush():
                 yield  # makes unlocking possible here
             self.reset(datetime)
         self.consider(datetime)
     self.flush()
Exemplo n.º 4
0
 def process(self, period):
     """
     Controls flushing and filters according to timeframe.
     on start: init according to datetime
     on edge: init and flush
     on finish: flush
     """
     datetimes = (d
                  for d in period
                  if self.timeframe in utils.get_valid_timeframes(d))
     # grab first datetime if any, reset band index, meta accordingly
     try:
         first = datetimes.next()
     except StopIteration:
         return
     self.reset(first)
     self.consider(first)
     for datetime in datetimes:
         if datetime not in self.bands:
             if self.flush():
                 yield  # makes unlocking possible here
             self.reset(datetime)
         self.consider(datetime)
     self.flush()