Python - Использование внешнего XSLT-файла в Google App Engine - PullRequest
1 голос
/ 15 января 2012

Я использую MathJax для веб-приложения CRUD на Python / Google App Engine.Я хотел бы, чтобы люди создавали уравнения с использованием Content MathML (чтобы веб-приложение могло использовать семантическую информацию в другом месте).

Затем я хочу использовать этот MML XSLT для представления материалов.так что я могу использовать MathJax в результирующем Presentation MathML.

Обычно я бы сделал что-то вроде этого для предоставления услуги преобразования:

import lxml.etree as etree

class MathMLTranslator(object):
    def __init__(self):
        with open('ctop.xsl') as f:
            self.xslt = etree.XSLT(etree.XML(f.read()))

    def translate(self, xml_string):
            return self.xslt(etree.XML(xml_string))

Но я не могу сделать open('ctop.xsl') в Google App Engine я также не могу просто вставить содержимое ctop.xsl как строковый литерал в MathMLTranslator (он слишком большой и содержит кавычки обоих типов).

Как мне справиться с этим?

Ответы [ 3 ]

1 голос
/ 16 января 2012

Вы можете нормально открывать файлы, которые были загружены как часть вашего приложения в App Engine - вам просто нужно убедиться, что путь относительно приложения. Например, если ctop.xsl находится в том же каталоге, что и ваш модуль Python, вы можете сделать это:

fh = open(os.path.join(os.path.dirname(__file__), 'ctop.xsl')
0 голосов
/ 15 января 2012

Я не знаком с GAE, но если вы можете загружать файлы Python произвольного размера, вы можете просто записать ctop.xsl содержимое в файл .py. например ctop_data.py

ctop_xsl = """<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
... SKIPPED
"""

Тогда в коде вы можете:

from ctop_data import ctop_xsl
...
self.xslt = etree.XSLT(etree.XML(ctop_xsl))
0 голосов
/ 15 января 2012

Вы можете поместить файл в Dropbox и использовать API Dropbox:

https://www.dropbox.com/developers/reference/api#files-GET

Я бы предложил Python-запросы для этой цели:

https://github.com/kennethreitz/requests

Я не сделал этого из движка приложения Google, хотя у меня есть код, работающий на heroku, выполняющий аналогичные действия.

...