HEX
Server: Apache/2
System: Linux nexus-01 4.18.0-553.120.1.el8_10.x86_64 #1 SMP Mon Apr 20 18:04:27 EDT 2026 x86_64
User: aglcoke (1118)
PHP: 8.2.31
Disabled: mail,exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //proc/1/task/1/root/usr/share/doc/python3-zope-interface/docs/foodforthought.rst
================================
Food-based subscription examples
================================


This file gives more subscription examples using a cooking-based example:

.. doctest::

    >>> from zope.interface.adapter import AdapterRegistry
    >>> registry = AdapterRegistry()

    >>> import zope.interface
    >>> class IAnimal(zope.interface.Interface):
    ...     pass
    >>> class IPoultry(IAnimal):
    ...     pass
    >>> class IChicken(IPoultry):
    ...     pass
    >>> class ISeafood(IAnimal):
    ...     pass

Adapting to some other interface for which there is no
subscription adapter returns an empty sequence:

.. doctest::

    >>> class IRecipe(zope.interface.Interface):
    ...     pass
    >>> class ISausages(IRecipe):
    ...     pass
    >>> class INoodles(IRecipe):
    ...     pass
    >>> class IKFC(IRecipe):
    ...     pass

    >>> list(registry.subscriptions([IPoultry], IRecipe))
    []

unless we define a subscription:

.. doctest::

    >>> registry.subscribe([IAnimal], ISausages, 'sausages')
    >>> list(registry.subscriptions([IPoultry], ISausages))
    ['sausages']

And define another subscription adapter:

.. doctest::

    >>> registry.subscribe([IPoultry], INoodles, 'noodles')
    >>> meals = list(registry.subscriptions([IPoultry], IRecipe))
    >>> meals.sort()
    >>> meals
    ['noodles', 'sausages']

    >>> registry.subscribe([IChicken], IKFC, 'kfc')
    >>> meals = list(registry.subscriptions([IChicken], IRecipe))
    >>> meals.sort()
    >>> meals
    ['kfc', 'noodles', 'sausages']

And the answer for poultry hasn't changed:

.. doctest::

    >>> meals = list(registry.subscriptions([IPoultry], IRecipe))
    >>> meals.sort()
    >>> meals
    ['noodles', 'sausages']