Можно ли получить доступ к загрузке файлов в RestrictedPython из сценариев PloneFormGen? - PullRequest
1 голос
/ 12 января 2012

В настоящее время я пытаюсь настроить форму для создания новости. Скрипт работает отлично до сих пор. Проблемы возникают с полем файла: как только я пытаюсь получить доступ к файлу через request.form ['pub-core-cover'], я получаю "Module AccessControl.ZopeGuards, строка 67, в guarded_getitem".

Мне посоветовали использовать HelperView для обхода RestrictedPython, что, похоже, является проблемой здесь. Это довольно сложно для меня, потому что я до сих пор не разработал дополнительный продукт. Почему-то мне тоже интересно, есть ли еще одна возможность заставить функцию File-Field в PFG снова работать в RestrictedPython. В противном случае файл-поле становится каким-то устаревшим.

CustomScript-Adapter (не обращайте внимания на немецкие комментарии):

form = request.form

# ID des Zielverzeichnisses ist publikationen
target = context.publikationen

# Einmalige ID für das neu zu erstellende Objekt erstellen anhand des Datums + Uhrzeit
from DateTime import DateTime
uid = str(DateTime().millis())

# Titel und ID festlegen und damit News-Objekt erzeugen (Titel + Beschreibung)
title = form['author-prename'] + " " + form['author-surname']
desc = form['pub-core-title'] + " " + form['pub-core-subtitle']

target.invokeFactory("News Item", id = uid, title = title.upper(), description = desc, image = form['pub-core-cover'])

# Objekt aufspüren und ContentType festlegen
obj = target[uid]
obj.setContentType('text/html')

# Inhalt des News-Items setzen
obj.setText("<p>"+ form['pub-core-description'] +"<br /><br />Veröffentlicht: "+ form['pub-tech-year'] +"<br />ISBN: "+ form['pub-tech-isbn'] +"<br />Preis: "+ form['pub-tech-price'] +"<br />" + form['pub-tech-pages'] + " Seiten, " + form['pub-tech-binding'] + "</p>")

# Objekt veröffentlichen ohne den Initial-State im Workflow zu verändern
obj.portal_workflow.doActionFor(obj, 'publish', comment='Dieser Inhalt wurde über den PythonScriptAdapter von PloneFormGen automatisch publiziert.')

# Content reindexieren, um das neue Objekt anzuzeigen
obj.reindexObject()

Traceback:

Traceback (innermost last):
  Module ZPublisher.Publish, line 127, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 47, in call_object
  Module Products.CMFFormController.FSControllerPageTemplate, line 91, in __call__
  Module Products.CMFFormController.BaseControllerPageTemplate, line 26, in _call
  Module Products.CMFFormController.FormController, line 384, in validate
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 47, in call_object
  Module Products.CMFFormController.FSControllerValidator, line 58, in __call__
  Module Products.CMFFormController.Script, line 145, in __call__
  Module Products.CMFCore.FSPythonScript, line 130, in __call__
  Module Shared.DC.Scripts.Bindings, line 324, in __call__
  Module Shared.DC.Scripts.Bindings, line 361, in _bindAndExec
  Module Products.PythonScripts.PythonScript, line 344, in _exec
  Module script, line 20, in fgvalidate_base
   - <FSControllerValidator at /breyer_verlag/fgvalidate_base used for /breyer_verlag/publikationen/publikation-hinzufuegen>
   - Line 20
  Module Products.PloneFormGen.content.form, line 566, in fgvalidate
  Module Products.PloneFormGen.content.form, line 607, in fgProcessActionAdapters
  Module Products.PloneFormGen.content.customScriptAdapter, line 187, in onSuccess
  Module Products.PloneFormGen.content.customScriptAdapter, line 218, in executeCustomScript
  Module Shared.DC.Scripts.Bindings, line 324, in __call__
  Module Shared.DC.Scripts.Bindings, line 361, in _bindAndExec
  Module Products.PythonScripts.PythonScript, line 344, in _exec
  Module script, line 27, in create-publication
   - <PythonScript at /breyer_verlag/publikationen/publikation-hinzufuegen/create-publication/create-publication>
   - Line 27
  Module AccessControl.ZopeGuards, line 67, in guarded_getitem
KeyError: 'pub-core-cover'

У меня не было трудностей с использованием довольно похожего кода в Plone3. Буду признателен за любую помощь, которая избавит меня от страданий.

Edit: Кстати: Plone 4.05 ПФГ 1.72а

1 Ответ

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

Как сказал ванхим, это не проблема RestrictedPython-Problem, которая должна выполнять то, как PloneFormGen обрабатывает поле данных.Важно добавить _file к имени переменной.

...