<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def Process(cls, host_data, os_name=None, cpe=None, labels=None, exclude_checks=None, restrict_checks=None):
 """Runs checks over all host data. Args: host_data: The data collected from a host, mapped to artifact name. os_name: 0+ OS names. cpe: 0+ CPE identifiers. labels: 0+ GRR labels. exclude_checks: A list of check ids not to run. A check id in this list will not get run even if included in restrict_checks. restrict_checks: A list of check ids that may be run, if appropriate. Yields: A CheckResult message for each check that was performed. """

    # All the conditions that apply to this host.
    artifacts = list(iterkeys(host_data))
    check_ids = cls.FindChecks(artifacts, os_name, cpe, labels)
    conditions = list(cls.Conditions(artifacts, os_name, cpe, labels))
    for check_id in check_ids:
      # skip if check in list of excluded checks
      if exclude_checks and check_id in exclude_checks:
        continue
      if restrict_checks and check_id not in restrict_checks:
        continue
      try:
        chk = cls.checks[check_id]
        yield chk.Parse(conditions, host_data)
      except ProcessingError as e:
        logging.warning("Check ID %s raised: %s", check_id, e)