# inherit from a Controller subclass
if path:
+ # if extending in place with same URL, ignore URL
+ if parent_path == path:
+ _logger.warn(
+ "Controller %s extending %s in-place should not "
+ "explicitly specify URL", cls, parent)
+ return
_logger.warn("Re-exposing %s at %s.\n"
"\tThis usage is unsupported.",
parent.__name__,
def __new__(cls, *args, **kwargs):
subclasses = [c for c in cls.__subclasses__()
- if c._cp_path is cls._cp_path]
+ if c._cp_path == cls._cp_path]
if subclasses:
name = "%s (+%s)" % (
cls.__name__,
self.assertEqual('200 OK', status)
self.assertEqual('1 2 3', ''.join(body))
+ def test_extends_same_path(self):
+ """
+ When subclassing an existing Controller and specifying the same
+ _cp_path as the parent, ???
+ """
+ class A(http.Controller):
+ _cp_path = '/foo'
+ @http.httprequest
+ def index(self, req):
+ return '1'
+
+ class B(A):
+ _cp_path = '/foo'
+ @http.httprequest
+ def index(self, req):
+ return '2'
+
+ self.app.load_addons()
+
+ body, status, headers = self.client.get('/foo')
+ self.assertEqual('200 OK', status)
+ self.assertEqual('2', ''.join(body))
+
def test_re_expose(self):
"""
An existing Controller should not be extended with a new cp_path