Обеспечение обратной совместимости для компонента zope

Я работаю над новым выпуском 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 ответ

Такое изменение довольно сложно! Дело не в 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()
Другие вопросы по тегам