Как сохранить импорт в верхней части файла при загрузке переменных env в импортированные библиотеки? - PullRequest
0 голосов
/ 27 марта 2020

Вот очень простая облачная функция:

lib.py

import os
TOKEN = os.environ['TOKEN']

some_func(token=TOKEN):
    return token

main.py - запускается, когда вызывается функция и main () является точкой входа.

import os
from lib import some_func

# This is a simplification of KMS secret injection
def inject_secrets():
    os.environ['TOKEN'] = 'SOMETOKEN'

inject_secrets()

def main():
   ...

При развертывании это приводит к ошибке: ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Function failed on loading user code. Error message: 'TOKEN'

Ошибка возникает из-за того, что TOKEN = os.environ['TOKEN'] вызывается, когда some_func импортируется из lib.

Одним из решений является двигаться, когда импорт происходит следующим образом:

import os

def inject_secrets():
    os.environ['TOKEN'] = 'SOMETOKEN'

inject_secrets()
# Import moved after secret injection
from lib import some_func

Это развертывает и работает, но не следует PEP8, потому что весь импорт должен быть в верхней части файла.

Какое лучшее решение для эта проблема?

...