Использование импорта со спецификацией уровня не поддерживается AccessControl: _warnings - PullRequest
0 голосов
/ 02 марта 2012

У меня проблема с шаблоном страницы контроллера FS.У меня был этот базовый продукт Plone2, который я зародил в процессе миграции Plone 4.2.Я вставил трассировку ниже.

Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, 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 46, 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 322, in __call__
  Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
  Module Products.PythonScripts.PythonScript, line 344, in _exec
  Module script, line 32, in exams_list
   - <FSControllerValidator at /dev/exam/online/booking/validators/exams_list>
   - Line 32
  Module AccessControl.ZopeGuards, line 299, in guarded_import
Unauthorized: Using import with a level specification isn't supported by AccessControl: _warnings

строка 32 в валидаторах exams_list обернута астриком

if event and not state.getErrors():
  try:
     context.script.validateEvent()
  except ValueError,exc: 
     state.setError('SIMSError',str(exc))
  **except 'dryrun':**
     state.setStatus('dryrun')

Любая помощь или указатель всегда полезны.

1 Ответ

1 голос
/ 04 марта 2012

Поддержка исключений строк была удалена из Python 2.6; вместо этого вам нужно будет использовать правильный класс исключений для 'dryrun'.

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

Вот пример определения такого исключения:

from AccessControl.SecurityInfo import ModuleSecurityInfo

security = ModuleSecurityInfo('My.Product.exceptions')

security.declarePublic('DryRunException')
class DryRunException(Exception):
    '''The process was not committed, this was only a dry run'''

Имея информацию ModuleSecurityInfo, вы можете импортировать это исключение в ваш скрипт:

from My.Product.exceptions import DryRunException

и поймайте это вместо этого в своем блоке except; конечно, код, который вызывает это исключение, тоже нужно будет обновить.

...