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

"""Replacement for google.appengine.api.modules for flexible env."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os


def get_current_instance_id():
  """Gets the current App Engine instance id."""
  return os.environ.get('GAE_INSTANCE', 'no-instance')


def get_current_version_name():
  """Gets the current App Engine version."""
  return os.environ.get('GAE_VERSION', 'no-version')


def get_current_module_name():
  """Gets the current App Engine serviceh

  Note: services were previously called "modules".
  """
  return os.environ.get('GAE_SERVICE', 'no-service')
