docs: def any_hook(*hook_patterns):
      """
      Assert that the currently executing hook matches one of the given patterns.
  
      Each pattern will match one or more hooks, and can use the following
      special syntax:
  
        * ``db-relation-{joined,changed}`` can be used to match multiple hooks
          (in this case, ``db-relation-joined`` and ``db-relation-changed``).
        * ``{provides:mysql}-relation-joined`` can be used to match a relation
          hook by the role and interface instead of the relation name.  The role
          must be one of ``provides``, ``requires``, or ``peer``.
        * The previous two can be combined, of course: ``{provides:mysql}-relation-{joined,changed}``
      """
      current_hook = hookenv.hook_name()
  
      # expand {role:interface} patterns
      i_pat = re.compile(r'{([^:}]+):([^}]+)}')
      hook_patterns = _expand_replacements(i_pat, hookenv.role_and_interface_to_relations, hook_patterns)
  
      # expand {A,B,C,...} patterns
      c_pat = re.compile(r'{((?:[^:,}]+,?)+)}')
      hook_patterns = _expand_replacements(c_pat, lambda v: v.split(','), hook_patterns)
  
      return current_hook in hook_patterns