← Back to team overview

lazr-developers team mailing list archive

[Bug 319716] [NEW] Cannot delegate multiple interfaces on a given class

 

Public bug reported:

If delegates is used twice in a class definition, things explode:
$ ./test.py -v test_branchmergeproposal -t ReviewDiffJob
Traceback (most recent call last):
  File "./test.py", line 175, in ?
    from canonical.testing import profiled
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/testing/__init__.py", line 67, in ?
    from canonical.testing.layers import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/testing/layers.py", line 87, in ?
    from canonical.launchpad.testing.tests.googleserviceharness import (
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/testing/__init__.py", line 16, in ?
    from canonical.launchpad.testing.factory import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/testing/factory.py", line 31, in ?
    from canonical.launchpad.database.message import Message, MessageChunk
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/__init__.py", line 17, in ?
    from canonical.launchpad.database.product import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/product.py", line 32, in ?
    from canonical.launchpad.database.branch import BranchSet
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/branch.py", line 70, in ?
    from canonical.launchpad.database.branchmergeproposal import (
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/branchmergeproposal.py", line 799, in ?
    class ReviewDiffJob(object):
  File "/home/abentley/launchpad/trunk/lib/zope/interface/advice.py", line 132, in advise
    return callback(newClass)
  File "/usr/lib/python2.4/site-packages/PIL/__init__.py", line 77, in _delegates_advice
    
KeyError: '__delegates_advice_data__'

There should be a way to delegate multiple interfaces.  Ideally, by
invoking delegates twice in a class definition, so that varying contexts
can be used.

It would also be nice to be able to delegate all interfaces provided by
a context object, also.  This would help when using delegates as a form
of pseudo-inheritance.

** Affects: lazr.delegates
     Importance: Undecided
         Status: New

-- 
Cannot delegate multiple interfaces on a given class
https://bugs.launchpad.net/bugs/319716
You received this bug notification because you are a member of LAZR
Developers, which is the registrant for lazr.delegates.

Status in lazr.delegates: New

Bug description:
If delegates is used twice in a class definition, things explode:
$ ./test.py -v test_branchmergeproposal -t ReviewDiffJob
Traceback (most recent call last):
  File "./test.py", line 175, in ?
    from canonical.testing import profiled
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/testing/__init__.py", line 67, in ?
    from canonical.testing.layers import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/testing/layers.py", line 87, in ?
    from canonical.launchpad.testing.tests.googleserviceharness import (
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/testing/__init__.py", line 16, in ?
    from canonical.launchpad.testing.factory import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/testing/factory.py", line 31, in ?
    from canonical.launchpad.database.message import Message, MessageChunk
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/__init__.py", line 17, in ?
    from canonical.launchpad.database.product import *
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/product.py", line 32, in ?
    from canonical.launchpad.database.branch import BranchSet
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/branch.py", line 70, in ?
    from canonical.launchpad.database.branchmergeproposal import (
  File "/home/abentley/launchpad/web-bmp-diffs/importfascist.py", line 155, in import_fascist
    module = original_import(name, globals, locals, fromlist)
  File "/home/abentley/launchpad/web-bmp-diffs/lib/canonical/launchpad/database/branchmergeproposal.py", line 799, in ?
    class ReviewDiffJob(object):
  File "/home/abentley/launchpad/trunk/lib/zope/interface/advice.py", line 132, in advise
    return callback(newClass)
  File "/usr/lib/python2.4/site-packages/PIL/__init__.py", line 77, in _delegates_advice
    
KeyError: '__delegates_advice_data__'

There should be a way to delegate multiple interfaces.  Ideally, by invoking delegates twice in a class definition, so that varying contexts can be used.

It would also be nice to be able to delegate all interfaces provided by a context object, also.  This would help when using delegates as a form of pseudo-inheritance.



Follow ups

References