Нет, вы не можете получить доступ к метаданным (GCE-специфическим) из стандартного экземпляра GAE, поскольку он не является экземпляром GCE VM /. Из Получение метаданных (выделено мной):
Вы можете запросить содержимое сервера метаданных, сделав запрос на следующие корневые URL-адреса из экземпляра виртуальной машины. Используйте URL
blockquote>http://metadata.google.internal/computeMetadata/v1/
для выполнения запросов на сервер метаданных.Ошибка DNS, которую вы видите для
metadata.google.internal
, является вероятным индикатором того, что это специальная запись DNS хоста, доступная только внутри GCE сети или компьютера.Но в общем случае можно обмениваться файлами через службы / модули GAE, символизируя один и тот же файл (идеально расположенный в каталоге приложения) внутри каждого из них, требуя его. См. Примеры здесь: Совместное использование сущностей между модулями App Engine и здесь: https://stackoverflow.com/a/34111170/4495081
Пока модуль / модуль flex использует один и тот же файл (ы) файла (ов) таким же образом, как и стандартный, этот метод должен работать и для них, то есть вы можете делиться конфигурациями, например, используя файл
appengine_config.py
.
Я понял!
Мне пришлось динамически определять побочный эффект, но, похоже, он работает нормально. Вот что я сделал:
def setUp(self):
# Setup the content of the config files for the tests
json.load = MagicMock(side_effect=file_content)
# Opening a file returns the name of the file
def get_mock_context(filename):
mock_context = MagicMock()
mock_context.__enter__.return_value = filename
mock_context.__exit__.return_value = False
return mock_context
builtins.open = MagicMock(side_effect=get_mock_context)
Таким образом, возвращаемое значение представляет собой макет, в котором есть методы __enter__
и __exit__
, возвращающие именно то имя файла, которое я передал вызову open. [115 ]