コード例 #1
0
ファイル: config.py プロジェクト: molodiuc/luci-py
def _fetch_configs(paths):
    """Fetches a bunch of config files in parallel and validates them.

  Returns:
    dict {path -> (Revision tuple, <config>)}.

  Raises:
    CannotLoadConfigError if some config is missing or invalid.
  """
    paths = sorted(paths)
    futures = [
        config.get_self_config_async(
            p,
            dest_type=_CONFIG_SCHEMAS[p]['proto_class'],
            store_last_good=False) for p in paths
    ]
    configs_url = _get_configs_url()
    ndb.Future.wait_all(futures)
    out = {}
    for path, future in zip(paths, futures):
        rev, conf = future.get_result()
        if conf is None:
            raise CannotLoadConfigError('Config %s is missing' % path)
        try:
            validation.validate(config.self_config_set(), path, conf)
        except ValueError as exc:
            raise CannotLoadConfigError(
                'Config %s at rev %s failed to pass validation: %s' %
                (path, rev, exc))
        out[path] = (Revision(rev, _gitiles_url(configs_url, rev, path)), conf)
    return out
コード例 #2
0
ファイル: config.py プロジェクト: amymariaparker2401/luci-py
def _fetch_configs(paths):
    """Fetches a bunch of config files in parallel and validates them.

  Returns:
    dict {path -> (Revision tuple, <config>)}.

  Raises:
    CannotLoadConfigError if some config is missing or invalid.
  """
    paths = sorted(paths)
    configs_url = _get_configs_url()
    out = {}
    configs = utils.async_apply(
        paths, lambda p: config.get_self_config_async(
            p,
            dest_type=_CONFIG_SCHEMAS[p]['proto_class'],
            store_last_good=False))
    for path, (rev, conf) in configs:
        if conf is None:
            default = _CONFIG_SCHEMAS[path].get('default')
            if default is None:
                raise CannotLoadConfigError('Config %s is missing' % path)
            rev, conf = '0' * 40, default
        try:
            validation.validate(config.self_config_set(), path, conf)
        except ValueError as exc:
            raise CannotLoadConfigError(
                'Config %s at rev %s failed to pass validation: %s' %
                (path, rev, exc))
        out[path] = (Revision(rev, _gitiles_url(configs_url, rev, path)), conf)
    return out
コード例 #3
0
ファイル: config.py プロジェクト: rmistry/luci-py
def _fetch_configs(paths):
  """Fetches a bunch of config files in parallel and validates them.

  Returns:
    dict {path -> (Revision tuple, <config>)}.

  Raises:
    CannotLoadConfigError if some config is missing or invalid.
  """
  paths = sorted(paths)
  futures = [
    config.get_self_config_async(
        p, dest_type=_CONFIG_SCHEMAS[p]['proto_class'], store_last_good=False)
    for p in paths
  ]
  configs_url = _get_configs_url()
  out = {}
  for path, future in zip(paths, futures):
    rev, conf = future.get_result()
    try:
      validation.validate(config.self_config_set(), path, conf)
    except ValueError as exc:
      raise config.CannotLoadConfigError(
          'Config %s at rev %s failed to pass validation: %s' %
          (path, rev, exc))
    out[path] = (Revision(rev, _gitiles_url(configs_url, rev, path)), conf)
  return out
コード例 #4
0
ファイル: validation.py プロジェクト: rmistry/luci-py
def validate_config_async(config_set, path, content, ctx=None):
    """Validates a config against built-in and external validators.

  External validators are defined in validation.cfg,
  see proto/service_config.proto.

  Returns:
    components.config.validation_context.Result.
  """
    ctx = ctx or validation.Context()

    # Check the config against built-in validators,
    # defined using validation.self_rule.
    validation.validate(config_set, path, content, ctx=ctx)

    all_services = yield services.get_services_async()
    futures = []
    for service in all_services:
        futures.append(_validate_by_service_async(service, config_set, path, content, ctx))
    yield futures
    raise ndb.Return(ctx.result())
コード例 #5
0
def validate_config_async(config_set, path, content, ctx=None):
  """Validates a config against built-in and external validators.

  External validators are defined in validation.cfg,
  see proto/service_config.proto.

  Returns:
    components.config.validation_context.Result.
  """
  ctx = ctx or validation.Context()

  # Check the config against built-in validators,
  # defined using validation.self_rule.
  validation.validate(config_set, path, content, ctx=ctx)

  all_services = yield services.get_services_async()
  futures = []
  for service in all_services:
    futures.append(
        _validate_by_service_async(service, config_set, path, content, ctx))
  yield futures
  raise ndb.Return(ctx.result())