Можем ли мы получить расположение файловой системы по имени каталога ресурсов браузера в Zope? - PullRequest
0 голосов
/ 30 октября 2019

В Zope 2.12 мы можем объявить «каталог ресурсов браузера», как это, используя configure.zcml:

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser"
    xmlns:five="http://namespaces.zope.org/five"
    xmlns:i18n="http://namespaces.zope.org/i18n"
    i18n_domain="company"
    >
    <browser:resourceDirectory
            directory="./"
            name="static"
    />
</configure>

Чистый эффект - это URL-адрес типа http://localhost:8000/++resource++static/main.js на папку в файловой системе, скажем site/eggs/module.egg/static.

Есть ли программный способ доступа к этой информации? Например, учитывая static, я должен зарегистрировать реальное местоположение с именем static, т. Е. /site/eggs/module.egg/static.

. Я проверил документацию и некоторые сценарии тестирования, которые заставили меня прийтис помощью скрипта ниже - но он не работает;и я не знаю, что такое Zope!

from zope.publisher.browser import TestRequest

from zope.browserresource.directory import \
     DirectoryResourceFactory, DirectoryResource

def getPathFromBRD():

    # I am supposed to send 'context' object as the first param, but I
    # don't know how to create that - so I am sending the URL! My intuition
    # says that I should be able to get this without 'context' or 'request'
    # since it is about the Zope installation and not specific to a single
    # request, but that doesn't seem to be the case.

    context = 'http://localhost:4547'
    request = TestRequest()

    directory_resource = DirectoryResource(context, request)
    directory_resource.get('static')

Обновление

Работает нормально, если в моем веб-приложении есть метод, подобный этому:

def method(self, name)
    # typical request object
    request = self.REQUEST
    # name is like '++resource++static'
    request.traverseName(self.cms, name).context.path

Здесь cms как корневая папка в нашем веб-приложении. Однако я пытаюсь сделать это с помощью простого сценария без запуска веб-приложения.

...