Динамическая загрузка кода приложения Python из базы данных в Google App Engine

Мне нужно сохранить код python в базе данных и загрузить его в какое-то приложение bootstrap.py для выполнения. Я не могу использовать файловую систему, потому что я использую GAE, поэтому это мой единственный выбор.

Однако я не опытный пользователь python.

Я уже смог загрузить 1 строку кода и запустить ее с помощью eval, однако фрагмент кода с двумя строками или более дал мне ошибку «недопустимый синтаксис».

Я также думаю, что можно расширить загрузчик «import» для реализации загрузки БД.

Благодаря!

4 Solutions collect form web for “Динамическая загрузка кода приложения Python из базы данных в Google App Engine”

Я смог сделать то, что я намерен, после того, как прочитал больше о загрузке динамического кода Python.

Вот пример кода. Я удалил заголовки, чтобы они были светлее:

Спасибо, в любом случае!

=============

 class DynCode(db.Model): name = db.StringProperty() code = db.TextProperty(default=None) 

=============

 class MainHandler(webapp.RequestHandler): def get(self): dyn = DynCode() dyn = "index" dyn.code = """ from google.appengine.ext import webapp class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write("Hello World\\n") self.response.out.write("Hello World 2\\n") """ dyn.put() self.response.out.write("OK.") def main(): application = webapp.WSGIApplication([('/update', MainHandler)], debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main() . class MainHandler(webapp.RequestHandler): def get(self): dyn = DynCode() dyn = "index" dyn.code = """ from google.appengine.ext import webapp class MainHandler(webapp.RequestHandler): def get(self): self.response.out.write("Hello World\\n") self.response.out.write("Hello World 2\\n") """ dyn.put() self.response.out.write("OK.") def main(): application = webapp.WSGIApplication([('/update', MainHandler)], debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main() 

==================================

 def main(): query = DynCode.all() dyncodes = query.fetch(1) module = imp.new_module('mymodule') for dyn in dyncodes: exec dyn.code in module.__dict__ application = webapp.WSGIApplication([('/', module.MainHandler)], debug=True) util.run_wsgi_app(application) if __name__ == '__main__': main() 

=======================

Я несколько согласен с комментаторами выше, это звучит опасно. Однако:

Я немного экспериментировал с консолью App Engine Console ( http://con.appspot.com/console/ ), и eval() действительно имел тенденцию бросать SyntaxError .

Вместо этого оператор exec может быть вашим другом ( http://docs.python.org/release/2.5.2/ref/exec.html ).

Мне удалось запустить это в консоли App Engine:

 >>> exec "def f(x):\nx = x + 1\ny = 10\n return x + y" >>> f(10) 21 

Поэтому попробуйте exec инструкцию exec , но помните о многих, многих (многих!) Опасностях кода, поступающих непосредственно от конечных пользователей.

Если вы хотите создать более надежный механизм, вы, вероятно, захотите прочитать PEP302 , который описывает входные крючки. Вы можете использовать их для импорта кода, а не для его оценки.

Я смог сделать то, что я намерен, после того, как прочитал больше о загрузке динамического кода Python.

Ой, слишком плохо, что он разбит дизайном, потому что вы не понимаете операционную среду:

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

  • Обновить объект движка приложения
  • Как обслуживать изображения Google Cloud Storage?
  • Как расширить регулярное выражение, чтобы исключить все файлы в папке?
  • Загрузка объектов хранилища данных из проекта Python в Go приводит к вложенным structs slices of slices error
  • Группа "Мои контакты" google contacts
  • Экономичное удаление данных из приложения
  • Google App Engine: не будет обслуживать статические активы с ошибкой ниже:
  • Что определяет время запуска динамического экземпляра и может ли оно меняться между неделями, если код такой же
  • Механизм или запрос Google для приложения (python)
  • Как использовать хранилище данных с высокой репликацией
  • Как мой код скажет, работает ли он на сервере Google или на локальном сервере разработки?
  •  
    Interesting Posts for Van-Lav

    подсчитайте количество элементов в массиве numpy в пределах дельта каждого другого элемента

    Преобразование минут в формат HH: MM в Python

    Как ввести регулярное выражение в string.replace?

    Почему создание списка из списка делает его более крупным?

    Как указать, что на самом деле происходит, когда нажата кнопка «Да / Нет» с помощью ctypes MessageBoxW?

    Исходные строки Python и unicode: как использовать веб-вход в качестве шаблонов регулярных выражений?

    Заполните 2D-массив numpy из трех массивов 1D numpy

    Как написать список в xlsx, используя openpyxl

    Как я могу безопасно сохранять секретные ключи и пароль в моей системе управления версиями?

    Не удается перенаправить вывод, когда я запускаю скрипт Python в Windows, используя только имя скрипта

    Numpy, python: автоматически расширяет размеры массивов при трансляции

    Реверсивный словарь для python

    AttributeError: объект 'EditForm' не имеет атрибута 'validate_on_submit'

    Возможны ли несвязанные дескрипторы?

    Mac OS X: _tkinter.TclError: нет отображаемого имени и нет переменной окружения $ DISPLAY

    Python - лучший язык программирования в мире.