Обеспечение обратной совместимости для компонента zope - PullRequest
1 голос
/ 09 мая 2011

Я работаю над новым выпуском colle.imagetags , в котором все функции, которые были перенесены из представления браузера (imagetags-manage), теперь перенесены в новый адаптер (еще не зафиксирован) который обеспечивает почти такой же интерфейс, как браузер ::

class IManageTags(Interface):
    """
    imagetags-manage view interface
    Tag management browser view
    """

    def get_tag(id, create_on_fail=True):
        """ Gets / creates a specific tag """

    def get_tags():
        """ Gets all the tags for the object """

    def get_sorted_tags():
        """ Sorted list of tags
        """

    def save_tag(data):
        """ Saves a tag with the passed data """

Я действительно не знаю, использует ли кто-либо этот продукт в проекте, однако, я думаю, было бы разумно предложить какой-то механизм обратной совместимости, если кто-то использует методы просмотра браузера вне функциональные возможности.

Что мне делать? Сохранить интерфейс для просмотра в браузере с методами-заглушками, которые передаются на новый адаптер? Любое предложение?

1 Ответ

1 голос
/ 11 мая 2011

Такое изменение довольно сложно!Дело не в API, а в дизайне.

  • Представления браузера - это компонент, в котором вы смешиваете использование / запрос с контекстом.
  • Адаптеры - это компонент, который не заботит пользователя или его запрос.* Утилиты - это компоненты, в которых вам не важен контекст.

Поэтому вам следует сохранять браузер и использовать адаптер, этого должно быть достаточно для обеспечения совместимости.

Обновления используются при внесении изменений в профиль по умолчанию.Сначала версия metadata.xml должна быть целым числом (1000 часто используется в качестве первой стабильной версии). Далее, каждое изменение профиля должно следовать за увеличением номера этой версии, и вы должны добавить шаг обновления:

<gs:upgradeStep
    title="Upgrade collective.myaddon from 1000 to 1010"
    description=""
    source="1000"
    destination="1010"
    handler=".upgrades.upgrade_1000_1010"
    profile="collective.myaddon:default"/> 


 upgrades.py
 def upgrade_1000_1010(context):
    """documentation
    """
    context.runImportStepFromProfile(default_profile, 'viewlets')
    portal_javascripts = getToolByName(context, 'portal_javascripts')
    portal_javascripts.cookResources()
...