def ParseLine(self, line):
    chkcrontab_cmd = re.compile('##*\s*chkcrontab:\s*(.*)=(.*)')
    assignment_line_re = re.compile('[a-zA-Z_][a-zA-Z0-9_]*\s*=(.*)')
    at_line_re = re.compile('@(\S+)\s+(\S+)\s+(.*)')
    cron_time_field_re = '[\*0-9a-zA-Z,/-]+'
    time_field_job_line_re = re.compile(
        '^\s*(%s)\s+(%s)\s+(%s)\s+(%s)\s+(%s)\s+(\S+)\s+(.*)' %
        (cron_time_field_re, cron_time_field_re, cron_time_field_re,
         cron_time_field_re, cron_time_field_re))

    if not line:
      return CronLineEmpty()

    if line.startswith('#'):
      match = chkcrontab_cmd.match(line)
      if match:
        return CronLineChkCrontabCmd(match.groups()[0], match.groups()[1])
      else:
        return CronLineComment()

    match = assignment_line_re.match(line)
    if match:
      return CronLineAssignment(match.groups()[0])

    match = at_line_re.match(line)
    if match:
      return CronLineAt(match.groups()[0], match.groups()[1],
                        match.groups()[2])

    # Is this line a cron job specifier?
    match = time_field_job_line_re.match(line)
    if match:
      field = {
          'minute': match.groups()[0],
          'hour': match.groups()[1],
          'day of month': match.groups()[2],
          'month': match.groups()[3],
          'day of week': match.groups()[4],
          }
      return CronLineTime(field, match.groups()[5], match.groups()[6])

    return CronLineUnknown()
Parameters will be sent to signal, if fired.
dataset/ETHPy150Open lyda/chkcrontab/chkcrontab_lib.py/CronLineFactory.ParseLine--crossover with--dataset/ETHPy150Open omergertel/pyformance/pyformance/meters/timer.py/Timer.time