Python 2 모듈 구성

appengine_config.py 파일은 구성 파일이며, 여기에 라이브러리용 설치 폴더를 지정하고 google.appengine 패키지에 있는 일부 Python 모듈의 상수 및 '후크 함수' 값을 원하는 대로 제공할 수 있습니다. 고유한 값을 지정하면 애플리케이션의 요구에 따라 관련 App Engine 서비스의 기본 동작이 변경될 수 있습니다. 이 파일을 app.yaml 구성 파일과 함께 정의하고 나머지 앱 코드와 함께 배포합니다.

appengine_config.py로 Python 모듈 구성

appengine_config.py를 사용하면 App Engine의 Python 모듈을 여러 개 구성할 수 있습니다.

서비스의 Python 모듈을 맞춤설정하려면 새 appengine_config.py 파일을 서비스의 루트 디렉터리에 만듭니다. 이 파일을 사용하려면 재정의하려는 상수나 후크 함수만 정의해야 합니다. 그런 다음 app.yaml 파일이 있는 디렉터리에서 gcloud app deploy를 실행하여 새 appengine_config.py 파일과 함께 앱을 다시 배포합니다. 그러면 정의한 상수와 후크 함수가 해당 App Engine 서비스에서 내부적으로 사용됩니다.

상수를 재정의하려면 상수 이름 앞에 Python 모듈 이름과 밑줄을 붙이고 값을 할당합니다. 예를 들어 KEY_PREFIX의 값을 정의하여 appstats에서 재정의를 편집할 수 있습니다.

appstats_KEY_PREFIX = '__my_custom_prefix__'

재정의된 후크 함수의 명명 방식은 다른 Python 모듈에서도 비슷합니다. 예를 들어 namespace_manager에서 다음과 같이 appengine_config.py의 후크 함수 default_namespace_for_request를 재정의할 수 있습니다.

import os
def namespace_manager_default_namespace_for_request():
    return os.environ.get('HTTP_HOST', '')

App Engine에서 구성 가능한 Python 모듈

appengine_config.py를 사용하여 아래에 나와 있는 Python 모듈을 구성할 수 있습니다. 규칙에 따라 후크 함수는 소문자이고 상수는 대문자입니다.

namespace_manager
  • default_namespace_for_request()(기본값은 None 반환)

appstats

datastore_admin

  • BASE_PATH(기본값 '/_ah/datastore_admin')
  • MAPREDUCE_PATH(기본값 '/_ah/mapreduce')
  • CLEANUP_MAPREDUCE_STATE(기본값 True)

remoteapi

lib_config로 고유한 Python 모듈 구성

또한 App Engine에서는 appengine_config.py에서 정의된 상수와 후크 함수로 고유한 Python 모듈을 구성할 수 있습니다. lib_config.register() 함수를 사용하면 사용자가 재정의할 수 있는 상수와 후크의 이름을 모두 등록하고 사용자가 재정의하지 않으려는 경우 적절한 기본값을 정의할 수 있습니다. 내부적으로 lib_config.register()appengine_config를 가져오려고 시도합니다. 가져오기에 성공하면 지정한 Python 모듈의 기본값이 appengine_config.py에서 정의된 모듈로 바뀝니다.

my_module.py에서의 사용 예시는 다음과 같습니다.

from google.appengine.api import lib_config

def _hook_function1_default():
   return 'baz'

_config = lib_config.register('my_module', {'CONSTANT1': 'foo',
                                            'CONSTANT2': 'bar',
                                            'hook_function1': _hook_function1_default})

이제 다음과 같이 사용자 상수에 액세스할 수 있습니다.

_config.CONSTANT1
_config.CONSTANT2

그리고 다음과 같이 후크 함수를 호출할 수 있습니다.

_config.hook_function1()

일부 프로그래머는 기본값을 클래스에서 그룹화하려 합니다.

class _ConfigDefaults(object):
  CONSTANT1 = 'foo'
  CONSTANT2 = 'bar'
  def hook_function1():
      return 'baz'

_config = lib_config.register('my_module',  _ConfigDefaults.__dict__)

기본값을 재정의하기 위해 사용자는 appengine_config.py에서 정의할 수 있습니다.

my_module_CONSTANT1 = 'foofoo'
my_module_hook_function1 = lambda: 'bazbaz'

따라서 my_module.py에서는 다음 사항이 적용됩니다.

  • _config.CONSTANT1에서 'foofoo'으로 변경됨
  • _config.CONSTANT2'bar'로 남아 있음
  • _config.hook_function1()'bazbaz'를 반환함

lib_config.register() 반환 직후 사용자 재정의를 my_module.py에서 사용할 수 있습니다.