# Copyright 2019 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

from recipe_engine import recipe_api


class ExperimentalApi(recipe_api.RecipeApi):
  """Experimental Fuchsia flags.

  This module is a collection of read-only flags that builders may set to opt-in to
  specific experimental features.  It is a standalone module so that other modules can
  depend on feature flags without creating circular dependencies, and so that different
  recipes can opt-in to the same experiments.

  Using explicit property flags prevents accidental breakages that arise from making
  assumptions about whether a specific feature should be enabled based on some other
  recipe-specific properties.

  New experiments should only be added to this module with an attached Bug.  When an
  experiment is "launched", meaning all existing builders are stable using the experiment
  in production, it should be deleted from this module.
  """

  def __init__(self, resultstore, partial_checkout, *args, **kwargs):
    super(ExperimentalApi, self).__init__(*args, **kwargs)
    self._resultstore = resultstore
    self._partial_checkout = partial_checkout

  # IN-888
  @property
  def resultstore(self):
    return self._resultstore

  # fxb/34965
  @property
  def partial_checkout(self):
    return self._partial_checkout
