view roundup/cgi/PageTemplates/PathIterator.py @ 7441:e7df82ae137d

Cleanup docker before 2.3.0b1 release scripts/Docker/Dockerfile Document/implement pip_sdist source mode for testing the source distribution. Change from multiple if's to case statement. Disable verbose tracing of shells script. Use --build-arg="VERBOSE=1" to enable set -xv. scripts/Docker/roundup_start Report error if demo mode is used with 2.2.0. This catches the easiest case where build is done using pypi before 2.3.0 final is released. Indent demo mode PORT_8080 doc block so it's not lost in a wall of text. doc/installation.txt Document all source --build-args including how to build from pypi using a version specifier. Break out other uses of --build-arg into code blocks. Reference docker compose section rather than referencing docker-compose.yml. Clarify docker hub tagging for devel releases. Minor formatting fixes.
author John Rouillard <rouilj@ieee.org>
date Wed, 31 May 2023 19:14:56 -0400
parents 99667a0cbd2d
children
line wrap: on
line source

##############################################################################
#
# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE
#
##############################################################################

"""Path Iterator

A TALES Iterator with the ability to use first() and last() on
subpaths of elements.
"""

from . import TALES
from .Expressions import restrictedTraverse, Undefs, getSecurityManager

class Iterator(TALES.Iterator):
    def __bobo_traverse__(self, REQUEST, name):
        if name in ('first', 'last'):
            path = REQUEST['TraversalRequestNameStack']
            names = list(path)
            names.reverse()
            path[:] = [tuple(names)]
        return getattr(self, name)

    def same_part(self, name, ob1, ob2):
        if name is None:
            return ob1 == ob2
        if isinstance(name, type('')):
            name = name.split('/')
        name = list(filter(None, name))
        securityManager = getSecurityManager()
        try:
            ob1 = restrictedTraverse(ob1, name, securityManager)
            ob2 = restrictedTraverse(ob2, name, securityManager)
        except Undefs:
            return 0
        return ob1 == ob2

Roundup Issue Tracker: http://roundup-tracker.org/