Что нового в Bluebream 1.0

Вопросы миграции

zope.app.keyreference -> zope.keyreference

Этот пакет был переименован в zope.keyreference и туда переехала вся функциональная часть. Новый пакет содержит небольшой обходной путь (workaround) для поддержки загружаемости старых персистентных keyrerefences без установки пакета zope.app.keyreference, так что последний теперь не нужен вообще. И все-таки мы настоятельно рекомендуем пересмотреть свой программный код на наличие импортов из zope.app.keyreference и поменять их на импорты из zope.keyreference.

zope.app.intid -> zope.intid

Вся функциональная часть этих пакетов, не связання с интерфейсом пользователя, была перенесена в zope.intid с сохранением обратной совместимости импортов. Пересмотрите все ваши импорты из zope.app.intid, чтобы узнать, нельзя ли их заменить на прямые импорты из zope.intid.

zope.app.catalog -> zope.catalog

Вся функциональная часть этих пакетов, не связання с интерфейсом пользователя, была перенесена в zope.catalog. Пересмотрите все ваши импорты из zope.app.catalog, чтобы узнать, нельзя ли их заменить на прямые импорты из zope.catalog.

zope.app.container -> zope.container

Вся функциональная часть этих пакетов, не связання с интерфейсом пользователя, была перенесена в zope.container. Пересмотрите все ваши импорты из zope.app.container, чтобы узнать, нельзя ли их заменить на прямые импорты из zope.container.

Вдобавок, исключения, которые импользуются в zope.container были изменены, так что если ваш код их отлавливает, вам нужно их пересмотреть:

zope.app.component -> zope.security, zope.site

Реализация ZCML директивы <class> перенесена из этого пакета в zope.security. Пакеты, которые получали эту директиву из zope.app.component должны объявить прямую зависимость от zope.security, тем самым получив возможность полностью избавится зависимости от zope.app.component.

Вся функциональная часть этих пакетов, не связання с интерфейсом пользователя, перенесена в пакет zope.site с сохранением обратной совместимости импортов. Пересмотрите все ваши импорты из zope.app.component, чтобы узнать, нельзя ли заменить их на прямые импорты из zope.site.

zope.app.folder -> zope.site, zope.container

Реализация класса zope.app.folder.Folder перенесена в zope.site.folder с сохранением обратной совместимости по импортам. Пересмотрите все ваши импорты из zope.app.folder, чтобы узнать, нельзя ли заменить их на прямые импорты из zope.site.

Вдобавок, Folder становится реализацией интерфейса IContainer, который также является частью примеси функционала управления сайтом. В некоторых случаях, когда поддержка функционала управления сайтом не нужна, вы можете обойтись без класса Folder, используя вместо него "чистую" реализацию этого интерфейса - Container из пакета zope.container.

Базовый класс с реализацией контейнерного поведения класса Folder перенесен в zope.containerzope.site ипользует его для реализации Folder). Мы не считаем это изменение таковым, для которого необходимо сохранять обратную совместимость.

zc.copy -> zope.copy, zope.copypastemove, zope.location

Подключаемый механизм копирования, изначально разрабонанный как zc.copy был объединен с zope.location, zope.copypastemove и новым пакетом zope.copy. Пакет zope.copy теперь обеспечивает подключаемый механизм копирования объектов из zc.copy и не зависит ни от чего, кроме zope.interface. Пакет zope.copypastemove использует функцию копирования из zope.copy в своем классе ObjectCopier.

Пакет zope.location теперь предоставляет адаптер ICopyHook, который реализует механизм условного копирования, основанного на местоположениях (locations) объекта, который раньше обеспечивался с помощью zope.location.pickling.CopyPersistent. Заметьте, если вы не используете ZCML конфигурацию zope.location, вам придется зарегистрировать zope.location.pickling.LocationCopyHook вручную.

Хотя zope.location.pickling.locationCopy и zope.location.pickling.CopyPersistent и устарели в связи с появлением zope.copy, была добавлена обратная совместимость импортов. Обратитесь к документации по пакету zope.copy для получения информации об использовании нового механизма.

Новая версия пакета zc.copy теперь содержит только импорты для поддержки обратной совместимости и является устаревшей (deprecated). Для новых разработок используйте zope.copy.

Рефакторинг zope.app.security

Пакет zope.app.security был полностью отрефакторен и разбит на несколько мелких частей с целью уменьшения зависимостей и прояснения целей использования.

Реализация ZCML директивы <module> перенесена в пакет zope.security. Пакеты, в которых присутствовали зависимости от zope.app.security c целью доступа к использованию этой директивы, должны объявить прямую зависимость от zope.security, что также даст возможность полностью избавится зависимости от zope.app.security.

Модуль protectclass этого пакета перенесен в zope.security с сохранением импотов для обратной совместимости. Пересмотрите ваши импорты из zope.app.security, чтобы узнать, нельзя ли заменить их на прямые импорты из zope.security.

Все интерфейсы (IAuthentication, IUnauthenticatedPrincipal, ILoginPassword и т.д.) перенесены в новый пакет zope.authentication наряду с несколькими вспомагательными вещами, такими как PrincipalSource и функцией checkPrincipal. Новый пакет имеет намного меньше зависимостей и определяет вбстрактные соглашения для реализации аутентификации внутри фреймворка Zope. Хотя импорты, обеспечивающие обратную совместимость, оставлены, настоятельно рекоммендуется обновить ваши импорты с целью использования пакета zope.authentication.

Глобальный реестр пользователей (principal) и их ZCML директивы перенесены в новый пакет zope.principalregistry с сохранением обратной совместимости импортов. Если ваше приложение использует глобальных пользователей (principals), пересмотрите свой код и ZCML конфигурацию, на предмет обновления путей.

Функциональность локальной системы прав перенесена в пакет zope.app.localpermission. Эта функциональность является частью шаблона разработки Through-The-Web, которая больше не используется и не поддерживается в Zope Toolkit и Application, так что может считаться устаревшей. Как бы там ни было, она может служить прекрасным примером TTW компонента.

Словари прав и стандартные методы защиты для объектов Message и аттрибутов name, parent, наряду с основными общими правами, такими как zope.View и zope.ManageContent слиты в пакет zope.security.

Адаптеры из пакета zope.publisher: интерфейсов IHTTPCredentials и IFTPCredentials к интерфейсу ILoginPassword перемещены в zope.publisher, вместе с тем создавая зависимость zope.publisher от zope.authentication.

Ихначальный пакет zope.app.security содержит только несколько устаревших или специфичных для приложения прав, методов защиты модулей python, которые в общем случае нужны только для внедрение устаревшего шаблона разработки Through-The-Web, а также для поддержки ZMI видов обозревателя (login.html, вид для PrincipalSource из zope.app.form и т.д.). Также сохранены импорты, обспечивающие обратную совместимость. Соответственно, если вы не используете TTW и/или стандартные браузерные виды ZMI, пересмотрите и обновите импорты для подхвата функциональности из новых мест и лишитесь зависимостей от zope.app.security с целью уменьшения общего их количества.

Другие пакеты, которые использовали zope.app.security, как zope.securitypolicy или уже адаптированы к вышеописаным изменениям или будут в скором времени.

Рефакторинг zope.app.publisher

Пакет zope.app.publisher был также отрефакторен и разбит на более мелкие части с целью уменьшения зависимостей и прояснения его целей.

Механизм браузерных ресурсов (в большинстве случаев используемый для обслуживания статических файлов и папок) был вынесен в новый пакет zope.browserresource. Он также был сделан более гибким, так что теперь при необходимости можно создавать и регистрировать специфические классы ресурсов для особой обработки отдельных файловых расширений. В качестве примера можно привести пакет zope.ptresource, куда был перемещен клас PageTemplateResource. Другой пример - пакет z3c.zrtresource, который был адаптирован для автоматического использования класса-обработчика ZRT-ресурсов при наличии файлов с расширением .zrt.

Механизм браузерных меню был перемещен в пакет zope.browsermenu без изменений.

ZCML директивы для простого создания браузерных видов (директива browser:page и т.д.) перемещені в новый маленький пакет zope.browserpage. Также эти директивы теперь не зависят от механизма меню и параметры “menu” и “title”, в случае отсутствия пакета zope.browsermenu, просто проигнорируются.

Адаптер IModifiableBrowserLanguages был перенесен в zope.publisher вместе с несколькими ZCML директивами, связанными с безопасностью классов пакета zope.publisher, которые раньше размещались в zope.app.publisher.

ZCML регистрации адаптера к !IXMLRPCPublisher для контейнеров перенесены в zope.container, в связи с тем, что на самом деле реализация этих адаптеров уже находилась в zope.container и была зарегистрирована там в качестве адаптеров к !IBrowserPublisher. Наряду с этим, оба адаптера и их ZCML регистрации, возможно, будут перемещены еще куда-нибудь, когда мы отрефакторим zope.container.

Следующие части пакета zope.app.publisher остались нетронутыми:

Директива xmlrpc:view, в основном, является полезной, так что в будущем может быть перемещена в отдельный пакет. На данный момент нет ясного представления о том, куда и как перемещать функционал, связанный с XML-RPC FTP.

Менеджеры паролей вынесены из ''zope.app.authentication''

Интерфейс IPasswordManager и его реализации были вынесены из пакета zope.app.authentication в новый пакет zope.password для использования с другими системами аутентификации, такими как z3c.authenticator, zope.principalregistry и любыми другими.

Новый пакет зависит только от zope.interface, так что может быть полезным даже в окружениях не связанных с Zope, например, в Pylons.

Словарь имен менеджеров паролей также был перенесен в пакет zope.password, но, по факту, является полезным только при использовании вместе с zope.schema и zope.component, так что вам придется их установить. Это требование размещено в дополнительной спецификации требований, раздел “vocabulary”.

ZODB 3.9 FileStorage native blob support

Компонент FileStorage ZODB 3.9, который используется в Zope Toolkit 1.0, теперь имеет родную поддержку blob-полей, так что больше не придется использовать BlobStorage прокси.

Таким образом, вы можете указать директорию для хранения blob-полей прямо в конфигурации FileStorage. Если вы используете !ZConfig, то это будет выглядеть следующим образом:

   1 <filestorage>
   2   path var/Data.fs
   3   blob-dir var/blobs
   4 </filestorage>

вместо:

   1 <blobstorage>
   2   blob-dir var/blobs
   3   <filestorage>
   4     path var/Data.fs
   5   </filestorage>
   6 </blobstorage>

Если вы создаете хранилище данных из python, это будет выглядеть следующим образом:

   1 storage = FileStorage('var/Data.fs', blob_dir='var/blobs')

вместо:

   1 storage = BlobStorage('var/blobs', FileStorage('var/Data.fs'))

Сравнительная таблица версий пакетов

Название пакета

Zope 3.4.0

BlueBream 1.0.0

bluebream

1.0a2

clientform

0.2.9

0.2.10

distribute

0.6.10

docutils

0.4

0.6

jinja2

2.2.1

lxml

1.3.6

2.2.4

martian

0.12

mechanize

0.1.7b

0.1.11

py

1.0.0

pygments

1.2.2

python-gettext

1.0

pytz

2007k

2010b

restrictedpython

3.4.2

3.5.1

roman

1.4.0

setuptools

0.6c9

0.6c11

sphinx

0.6.4

transaction

1.0.0

z3c.recipe.sphinxdoc

0.0.8

z3c.testsetup

0.6.1

zc.buildout

1.1.1

1.4.3

zc.lockfile

1.0.0

zc.recipe.egg

1.0.0

1.2.2

zc.recipe.testrunner

1.0.0

1.2.0

zc.resourcelibrary

1.0.1

1.3.1

zc.sourcefactory

0.6.0

zconfig

2.5.1

2.7.1

zdaemon

2.0.2

2.0.4

zodb3

3.8.1

3.9.4

zodbcode

3.4.0

3.4.0

zope.annotation

3.4.1

3.5.0

zope.app.apidoc

3.4.3

3.7.2

zope.app.applicationcontrol

3.4.3

3.5.5

zope.app.appsetup

3.4.1

3.13.0

zope.app.authentication

3.4.4

3.7.1

zope.app.basicskin

3.4.0

3.5.0

zope.app.broken

3.4.0

3.5.0

zope.app.cache

3.4.1

3.7.0

zope.app.catalog

3.5.1

3.8.1

zope.app.component

3.4.1

3.8.4

zope.app.container

3.5.6

3.8.2

zope.app.content

3.4.0

3.4.0

zope.app.dav

3.4.1

3.5.3

zope.app.debug

3.4.1

3.4.1

zope.app.dependable

3.4.0

3.5.1

zope.app.error

3.5.1

3.5.2

zope.app.exception

3.4.1

3.6.1

zope.app.file

3.4.4

3.5.1

zope.app.folder

3.4.0

3.5.1

zope.app.form

3.4.1

4.0.2

zope.app.ftp

3.4.0

3.5.0

zope.app.generations

3.4.1

3.5.1

zope.app.http

3.4.1

3.6.1

zope.app.i18n

3.4.4

3.6.2

zope.app.interface

3.4.0

3.5.0

zope.app.interpreter

3.4.0

3.4.0

zope.app.intid

3.4.1

3.7.1

zope.app.keyreference

3.4.1

3.6.1

zope.app.locales

3.4.5

3.6.0

zope.app.localpermission

3.7.2

zope.app.locking

3.4.0

3.5.0

zope.app.onlinehelp

3.4.1

3.5.2

zope.app.pagetemplate

3.4.1

3.10.1

zope.app.preference

3.4.1

3.6.0

zope.app.preview

3.4.0

3.4.0

zope.app.principalannotation

3.4.0

3.7.0

zope.app.publication

3.4.3

3.10.2

zope.app.publisher

3.4.1

3.10.1

zope.app.renderer

3.4.0

3.5.1

zope.app.rotterdam

3.4.1

3.5.1

zope.app.schema

3.4.0

3.5.0

zope.app.security

3.5.2

3.7.5

zope.app.securitypolicy

3.4.6

3.5.2

zope.app.server

3.4.2

3.5.0

zope.app.session

3.5.1

3.6.1

zope.app.skins

3.4.0

3.4.0

zope.app.testing

3.4.3

3.7.4

zope.app.tree

3.4.0

3.6.0

zope.app.twisted

3.4.1

3.5.0

zope.app.undo

3.4.0

3.5.0

zope.app.wsgi

3.4.1

3.6.1

zope.app.xmlrpcintrospection

3.4.0

3.5.1

zope.app.zcmlfiles

3.4.3

3.7.0

zope.app.zopeappgenerations

3.4.0

3.5.0

zope.app.zptpage

3.4.1

3.5.1

zope.applicationcontrol

3.5.5

zope.authentication

3.7.0

zope.broken

3.6.0

zope.browser

1.2

zope.browsermenu

3.9.0

zope.browserpage

3.11.0

zope.browserresource

3.10.2

zope.cachedescriptors

3.4.1

3.5.0

zope.catalog

3.8.1

zope.component

3.4.0

3.9.3

zope.componentvocabulary

1.0

zope.configuration

3.4.0

3.7.1

zope.container

3.11.0

zope.contentprovider

3.4.0

3.6.1

zope.contenttype

3.4.0

3.5.1

zope.copy

3.5.0

zope.copypastemove

3.4.0

3.6.0

zope.datetime

3.4.0

3.4.0

zope.deferredimport

3.4.0

3.5.0

zope.deprecation

3.4.0

3.4.0

zope.documenttemplate

3.4.0

3.4.2

zope.dottedname

3.4.2

3.4.6

zope.dublincore

3.4.0

3.6.0

zope.error

3.5.1

3.7.0

zope.event

3.4.0

3.4.1

zope.exceptions

3.4.0

3.5.2

zope.file

0.3.0

0.5.0

zope.filerepresentation

3.4.0

3.6.0

zope.formlib

3.4.0

4.0.2

zope.hookable

3.4.0

3.4.1

zope.html

1.0.1

2.0.0

zope.i18n

3.4.0

3.7.2

zope.i18nmessageid

3.4.3

3.5.1

zope.index

3.4.1

3.6.0

zope.interface

3.4.1

3.5.3

zope.intid

3.7.2

zope.keyreference

3.6.2

zope.kgs

1.2.0

zope.lifecycleevent

3.4.0

3.6.0

zope.location

3.4.0

3.9.0

zope.login

1.0.0

zope.mimetype

0.3.0

1.2.0

zope.minmax

1.1.0

1.1.2

zope.modulealias

3.4.0

3.4.0

zope.pagetemplate

3.4.0

3.5.0

zope.password

3.5.1

zope.pluggableauth

1.0.1

zope.principalannotation

3.6.0

zope.principalregistry

3.7.0

zope.processlifetime

1.0

zope.proxy

3.4.2

3.5.0

zope.ptresource

3.9.0

zope.publisher

3.4.6

3.12.2

zope.ramcache

1.0

zope.rdb

3.4.0

3.5.0

zope.schema

3.4.0

3.6.1

zope.security

3.4.1

3.7.2

zope.securitypolicy

3.4.1

3.6.1

zope.sendmail

3.4.0

3.7.1

zope.sequencesort

3.4.0

3.4.0

zope.server

3.4.3

3.6.1

zope.session

3.4.1

3.9.2

zope.site

3.9.0

zope.size

3.4.0

3.4.1

zope.structuredtext

3.4.0

3.4.0

zope.tal

3.4.1

3.5.2

zope.tales

3.4.0

3.5.0

zope.testbrowser

3.4.2

3.7.0

zope.testing

3.5.6

3.8.7

zope.thread

3.4

3.4

zope.traversing

3.4.1

3.12.0

zope.viewlet

3.4.2

3.7.0

zope.xmlpickle

3.4.0

3.4.0

Возможные ошибки и пути их исправления

В работе buildout, возможны ошибки импорта модулей

Если вы получили ошибку, как показано ниже:

ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global authentication')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global broken')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global error')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global i18n')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global session')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global schema')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global zopeappgenerations')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global keyreference')
ConfigurationError: ('Invalid value for', 'package', 'ImportError: Module zope.app has no global principalannotation')

Добавьте имя яйца (egg) (например, zope.app.principalannotation) в install_requires внутри скрипта setup.py, как показано ниже. После добавления, запустите команду ./bin/buildout еще раз.

   1 install_requires=['setuptools',
   2                   ...
   3                   'zope.app.authentication',
   4                   'zope.app.broken',
   5                   'zope.app.error',
   6                   'zope.app.i18n',
   7                   'zope.app.session',
   8                   'zope.app.schema',
   9                   'zope.app.zopeappgenerations',
  10                   'zope.app.keyreference',
  11                   'zope.app.principalannotation',
  12                   ...
  13                   ],

Другое решение - включить имя яйца (egg) (например, zope.app.principalannotation) в ту часть Buildout, где находится список других яиц, используя рецепт zc.recipe.egg как показано ниже:

[app]
recipe = zc.recipe.egg
eggs = samplproject
       ...
       zope.app.authentication
       zope.app.broken
       zope.app.error
       zope.app.i18n
       zope.app.session
       zope.app.schema
       zope.app.zopeappgenerations
       zope.app.keyreference
       zope.app.principalannotation
interpreter = breampy

Import error: zope.app.folder.interfaces.IFolder

Если вы получили следующую или похожую ошибку:

ZopeXMLConfigurationError: File "/home/baiju/myapp/src/myapp/browser.zcml", line 21.2-27.8
ConfigurationError: ('Invalid value for', 'for', "ImportError: Couldn't import zope.app.folder.interfaces, No module named folder.interfaces")

Откройте файл browser.zcml и посмотрите на строчку с номером 21, и поменяйте внутри ZCML декларации zope.app.folder.interfaces.IFolder на zope.site.interfaces.IFolder.

Если вы получили следующую или похожую ошибку:

raise ValueError("Undefined permission id", permission_id)
zope.configuration.config.ConfigurationExecutionError: <type 'exceptions.ValueError'>: ('Undefined permission id', 'zope.ManageApplication')

Вам нужно включить пакет zope.applicationcontrol в конфигурационный ZCML файл (site.zcml), так как оттуда доступно описание права дотупа (permission).

Ошибка при доступе к виду ''login.html''

.../eggs/zope.principalregistry-3.7.0-py2.5.egg/zope/principalregistry/principalregistry.py",
line 82, in unauthorized
   a = ILoginPassword(request)
TypeError: ('Could not adapt', <zope.publisher.browser.BrowserRequest
instance URL=http://localhost:9060/@@login.html>, <InterfaceClass
zope.authentication.interfaces.ILoginPassword>)

Необходимо включить пакет zope.login в конфигурационный файл ZCML (site.zcml) поскольку в этом модуле осуществляется регистрация адаптера:

   1 <include package="zope.login" />

Перевод: Ростислав Дзинько

Документации/Bluebream/Bluebream-Что-Нового (последним исправлял пользователь RostislavDzinko 2010-06-06 16:23:39)