Определение того, импортирован ли модуль в среду App Engine - PullRequest
4 голосов
/ 02 декабря 2008

Я хочу сделать патч для существующего модуля Python, который использует urllib2 для запуска на App Engine, но я не хочу ломать его, чтобы его можно было использовать в другом месте. Поэтому я ищу быстрое решение для проверки, импортирован ли модуль в среду App Engine или нет. Перехват ImportError на urllib2 может быть не лучшим решением.

Ответы [ 2 ]

11 голосов
/ 03 декабря 2008

Вы можете просто использовать sys.modules, чтобы проверить, был ли импортирован модуль (в качестве примера я использую unicodedata):

>>> import sys
>>> 'unicodedata' in sys.modules
False
>>> import unicodedata
>>> 'unicodedata' in sys.modules
True
0 голосов
/ 20 июня 2013

Вы можете сделать простую проверку по ключевым переменным среды. Хотя точно не могу сказать, насколько надежным это может быть.

import os, logging
try:
  os.environ['APPENGINE_RUNTIME']
except KeyError:
  logging.warn('We are not in App Engine environment')
else:
  logging.info('We are in the App Engine environment')

Вы также можете определить свою собственную переменную среды в файле конфигурации App Engine , и она будет доступна для просмотра из os.environ в любом модуле. Итак, введите что-то вроде этого в вашем файле app.yaml:

env_variables:
  MY_APP_ENGINE_ENVIRONMENT: '982844ed9cbd6ce42318d2804386be29cbc7c35a'

... даст вам однозначный идентификатор для ссылки.

С сервера разработки вот переменные среды, которые я получаю:

{'USER_EMAIL': '',
 'DATACENTER': 'us1',
 'wsgi.version': (1, 0),
 'REQUEST_ID_HASH': 'E2C19D51',
 'SERVER_NAME': 'mydesktop',
 'QUERY_STRING': '',
 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
 'APPENGINE_RUNTIME': 'python27',
 'wsgi.input': <cStringIO.StringI object at 0x2f145d0>,
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'HTTPS': 'off',
 'USER_IS_ADMIN': '0',
 'TZ': 'UTC',
 'REMOTE_ADDR': '192.168.0.2',
 'HTTP_X_APPENGINE_COUNTRY': 'ZZ',
 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36',
 'SERVER_SOFTWARE': 'Development/2.0',
 'HTTP_CACHE_CONTROL': 'max-age=0',
 'DEFAULT_VERSION_HOSTNAME': 'mydesktop:8080',
 'SERVER_PORT': '8080',
 'wsgi.run_once': False,
 'REQUEST_METHOD': 'GET',
 'USER_ID': '',
 'AUTH_DOMAIN': 'gmail.com',
 'USER_NICKNAME': '',
 'USER_ORGANIZATION': '',
 'wsgi.multiprocess': True,
 'INSTANCE_ID': '8a8e02e6efa8d195346ae0c90cfeafce8aa2',
 'PATH_INFO': '/',
 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8',
 'HTTP_HOST': 'mydesktop:8080',
 'wsgi.errors': <google.appengine.api.logservice.logservice.LogsBuffer object at 0x2f09c30>,
 'APPLICATION_ID': 'dev~myapp',
 'wsgi.multithread': True,
 'CURRENT_VERSION_ID': 'version-1',
 'SCRIPT_NAME': '',
 'REQUEST_LOG_ID': '4eafbc91ca4ebd5fee53f19eeab2eb26d243d9ddc92b6b9bc0a063eabdc84cfff',
 'wsgi.url_scheme': 'http'}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...