Skip to content

Conversation

@jaraco
Copy link
Contributor

@jaraco jaraco commented Oct 4, 2020

Fixes #75

I'm unsure about this implementation, so am very interested in feedback.

@codecov-commenter
Copy link

codecov-commenter commented Oct 4, 2020

Codecov Report

Merging #76 into master will decrease coverage by 0.03%.
The diff coverage is 83.33%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #76      +/-   ##
==========================================
- Coverage   84.41%   84.38%   -0.04%     
==========================================
  Files          58       58              
  Lines        8817     8819       +2     
  Branches     1383     1383              
==========================================
- Hits         7443     7442       -1     
- Misses        991      993       +2     
- Partials      383      384       +1     
Impacted Files Coverage Δ
src/foolscap/remoteinterface.py 85.20% <83.33%> (-1.23%) ⬇️

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 845bea5...4100bdf. Read the comment docs.

@codecov-io
Copy link

codecov-io commented Oct 13, 2020

Codecov Report

Merging #76 (a57be96) into master (845bea5) will decrease coverage by 0.06%.
The diff coverage is 83.33%.

Impacted file tree graph

@@            Coverage Diff             @@
##           master      #76      +/-   ##
==========================================
- Coverage   84.41%   84.35%   -0.07%     
==========================================
  Files          58       58              
  Lines        8817     8807      -10     
  Branches     1383     1383              
==========================================
- Hits         7443     7429      -14     
- Misses        991      994       +3     
- Partials      383      384       +1     
Impacted Files Coverage Δ
src/foolscap/remoteinterface.py 85.20% <83.33%> (-1.23%) ⬇️
src/foolscap/copyable.py 80.00% <0.00%> (-0.18%) ⬇️
src/foolscap/banana.py 73.90% <0.00%> (-0.16%) ⬇️
src/foolscap/slicers/root.py 81.12% <0.00%> (-0.10%) ⬇️
src/foolscap/logging/web.py 80.48% <0.00%> (-0.06%) ⬇️
src/foolscap/pb.py 89.07% <0.00%> (-0.04%) ⬇️
src/foolscap/connections/tor.py 99.27% <0.00%> (-0.03%) ⬇️
src/foolscap/logging/incident.py 97.41% <0.00%> (-0.02%) ⬇️
src/foolscap/connections/tcp.py 100.00% <0.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 845bea5...682def4. Read the comment docs.

@jaraco
Copy link
Contributor Author

jaraco commented Oct 13, 2020

Note this PR is based on #71.

@jaraco jaraco marked this pull request as ready for review October 13, 2020 23:21
Even though it's not fully type-annotated, many of the types derive from zope.interface and are typed, so declare the status to allow mypy to perform checks where possible. Without this change, Tahoe-LAFS continues to report failures on RemoteInterface, and with it, those errors are satisfied.
@jaraco
Copy link
Contributor Author

jaraco commented Dec 26, 2020

This implementation has proven successful in enabling typechecks in tahoe-lafs/tahoe-lafs#915 and blocking that PR, so I propose to merge. @itamarst or @exarkun Are you able to merge?

Copy link
Collaborator

@exarkun exarkun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. Some comments inline.

setup_args.update(
include_package_data=True,
)

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The motivation for this change, the change to MANIFEST.in, and the addition of the empty py.typed file is not clear from the ticket or the PR description.

Maybe these changes belong with some other issue?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The motivation is indicated in d70d8ec. The core of the change is adding a py.typed file to the package, which is what communicates to mypy that this package is typed and thus it (and its dependencies) may be used for static type checking. To see the failures on Tahoe, make this change:

diff --git a/tox.ini b/tox.ini
index 706899ebe..a48165da4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -118,7 +118,7 @@ skip_install = True
 deps =
     mypy
     git+https://github.com/Shoobx/mypy-zope
-    git+https://github.com/jaraco/foolscap@bugfix/75-use-metaclass
+    git+https://github.com/jaraco/foolscap@ff3b9e8c1e4fa13701273a2143ba80b1e58f47cf
 commands = mypy src
 

And then run the typechecks. Here are the errors:

typechecks installed: attrs==20.3.0,Automat==20.2.0,cffi==1.14.4,constantly==15.1.0,cryptography==3.3.1,foolscap @ git+https://github.com/jaraco/foolscap@ff3b9e8c1e4fa13701273a2143ba80b1e58f47cf,hyperlink==20.0.1,idna==2.10,incremental==17.5.0,mypy==0.790,mypy-extensions==0.4.3,mypy-zope @ git+https://github.com/Shoobx/mypy-zope@1fa03a7eccfebaa74f57e9288203c6e9adbb465a,pyasn1==0.4.8,pyasn1-modules==0.2.8,pycparser==2.20,PyHamcrest==2.0.2,pyOpenSSL==20.0.1,service-identity==18.1.0,six==1.15.0,Twisted==20.3.0,typed-ast==1.4.1,typing-extensions==3.7.4.3,zope.event==4.5.0,zope.interface==5.2.0,zope.schema==6.0.0
typechecks run-test-pre: PYTHONHASHSEED='4199503661'
typechecks run-test: commands[0] | mypy src
src/allmydata/interfaces.py:61: error: Method must have at least one argument
src/allmydata/interfaces.py:69: error: Method must have at least one argument
src/allmydata/interfaces.py:112: error: Method must have at least one argument
src/allmydata/interfaces.py:2835: error: Method must have at least one argument
src/allmydata/interfaces.py:2853: error: Method must have at least one argument
src/allmydata/interfaces.py:2870: error: Method must have at least one argument
src/allmydata/interfaces.py:2873: error: Method must have at least one argument
src/allmydata/interfaces.py:2879: error: Method must have at least one argument
src/allmydata/interfaces.py:2886: error: Method must have at least one argument
src/allmydata/interfaces.py:2899: error: Method must have at least one argument
src/allmydata/introducer/interfaces.py:58: error: Method must have at least one argument
src/allmydata/storage/immutable.py:204: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIBucketWriter.
src/allmydata/storage/immutable.py:204: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIBucketWriter class hierarchy.
src/allmydata/storage/immutable.py:303: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIBucketReader.
src/allmydata/storage/immutable.py:303: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIBucketReader class hierarchy.
src/allmydata/introducer/client.py:35: error: zope.interface.implementer accepts interface, not allmydata.introducer.interfaces.RIIntroducerSubscriberClient_v2.
src/allmydata/introducer/client.py:35: error: Make sure you have stubs for all packages that provide interfaces for allmydata.introducer.interfaces.RIIntroducerSubscriberClient_v2 class hierarchy.
src/allmydata/storage/server.py:53: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIStorageServer.
src/allmydata/storage/server.py:53: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIStorageServer class hierarchy.
src/allmydata/immutable/upload.py:1429: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIEncryptedUploadable.
src/allmydata/immutable/upload.py:1429: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIEncryptedUploadable class hierarchy.
src/allmydata/control.py:58: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIControlClient.
src/allmydata/control.py:58: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIControlClient class hierarchy.
src/allmydata/immutable/offloaded.py:143: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RICHKUploadHelper.
src/allmydata/immutable/offloaded.py:143: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RICHKUploadHelper class hierarchy.
src/allmydata/immutable/offloaded.py:507: error: zope.interface.implementer accepts interface, not allmydata.interfaces.RIHelper.
src/allmydata/immutable/offloaded.py:507: error: Make sure you have stubs for all packages that provide interfaces for allmydata.interfaces.RIHelper class hierarchy.
src/allmydata/introducer/server.py:151: error: zope.interface.implementer accepts interface, not allmydata.introducer.interfaces.RIIntroducerPublisherAndSubscriberService_v2.
src/allmydata/introducer/server.py:151: error: Make sure you have stubs for all packages that provide interfaces for allmydata.introducer.interfaces.RIIntroducerPublisherAndSubscriberService_v2 class hierarchy.
src/allmydata/test/storage_plugin.py:43: error: Method must have at least one argument
src/allmydata/test/storage_plugin.py:109: error: zope.interface.implementer accepts interface, not allmydata.test.storage_plugin.RIDummy.
src/allmydata/test/storage_plugin.py:109: error: Make sure you have stubs for all packages that provide interfaces for allmydata.test.storage_plugin.RIDummy class hierarchy.
Found 32 errors in 10 files (checked 287 source files)
ERROR: InvocationError for command /Users/jaraco/code/public/tahoe-lafs/.tox/typechecks/bin/mypy src (exited with code 1)
___________________________________ summary ____________________________________
ERROR:   typechecks: commands failed

interface.InterfaceClass.__init__(self, iname, bases, attrs)
return

attrs.pop('__metaclass__', None)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I couldn't figure out why this is necessary or desirable. I couldn't even find the case where __metaclass__ is present in attrs. If there's some case where this matters, I suppose a new test demonstrating it would be valuable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to this comment and the one before it, I had to remove it from attrs to allow tests to pass on Python 2.

On further review, it seems that the subsequent commit obviated the need for this workaround and I've removed it in a57be96.



class RemoteInterface(six.with_metaclass(RemoteInterfaceClass, interface.Interface)):
pass
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good to me, as far as I understand it. I don't really understand the difference between six.with_metaclass and six.add_metaclass except it looks like add_metaclass might involve an intermediate class object on the way to the desired class object, which seems bad (therefore with_metaclass is preferable). However, the add_metaclass documentation is more explicit about what it does and what it does sounds pretty good (cross python 2/3 metaclass declaration). I'm not sure why with_metaclass doesn't have similar docs.

If you have some insight into why one or the other of these methods is preferable, putting it in a comment here might be useful in the long run.

Copy link
Contributor Author

@jaraco jaraco Dec 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I honestly don't fully understand the nuances, and I was the seminal author for add_metaclass.

I attempted to use six.add_metaclass first, but doing so resulted in errors.

diff --git a/src/foolscap/remoteinterface.py b/src/foolscap/remoteinterface.py
index 04ffd06..d8ef365 100644
--- a/src/foolscap/remoteinterface.py
+++ b/src/foolscap/remoteinterface.py
@@ -409,5 +409,6 @@ def _makeConstraint(t):
 addToConstraintTypeMap(interface.InterfaceClass, _makeConstraint)
 
 
-class RemoteInterface(six.with_metaclass(RemoteInterfaceClass, interface.Interface)):
+@six.add_metaclass(RemoteInterfaceClass)
+class RemoteInterface(interface.Interface):
     pass
Details
python develop-inst-noop: /Users/jaraco/code/public/foolscap
python installed: attrs==20.3.0,Automat==20.2.0,cffi==1.14.4,constantly==15.1.0,cryptography==3.3.1,-e git+gh://warner/foolscap@a57be96e8245b41975982100a4661e231e8a8834#egg=foolscap,hyperlink==20.0.1,idna==2.10,incremental==17.5.0,mock==4.0.3,pyasn1==0.4.8,pyasn1-modules==0.2.8,pycparser==2.20,pyflakes==2.2.0,PyHamcrest==2.0.2,pyOpenSSL==20.0.1,service-identity==18.1.0,six==1.15.0,Twisted==20.3.0,txtorcon==20.0.0,zope.interface==5.2.0
python run-test-pre: PYTHONHASHSEED='2533493863'
python run-test: commands[0] | pyflakes setup.py src
python run-test: commands[1] | trial foolscap
foolscap
  test
    test__versions ...                                                  [ERROR]
    test_appserver ...                                                  [ERROR]
foolscap.test.test_banana
  ByteStream
    test_list ...                                                          [OK]
    test_ref6 ...                                                          [OK]
  DecodeFailureTest
    testCheckToken1 ...                                                    [OK]
    testCheckToken2 ...                                                    [OK]
    testCheckToken3 ...                                                    [OK]
    testCheckToken4 ...                                                    [OK]
    testCheckToken5 ...                                                    [OK]
    testDoOpen1 ...                                                        [OK]
    testDoOpen2 ...                                                        [OK]
    testFinish1 ...                                                        [OK]
    testFinish2 ...                                                        [OK]
    testLongHeader ...                                                     [OK]
    testLongHeader2 ...                                                    [OK]
    testReceiveChild1 ...                                                  [OK]
    testReceiveChild2 ...                                                  [OK]
    testReceiveChild3 ...                                                  [OK]
    testReceiveClose1 ...                                                  [OK]
    testReceiveClose2 ...                                                  [OK]
    testStart1 ...                                                         [OK]
    testStart2 ...                                                         [OK]
    testSuccess1 ...                                                       [OK]
  DecodeTest
    test_aborted_list ...                                                  [OK]
    test_aborted_list2 ...                                                 [OK]
    test_aborted_list3 ...                                                 [OK]
    test_dict ...                                                          [OK]
    test_dict_with_duplicate_keys ...                                      [OK]
    test_dict_with_list ...                                                [OK]
    test_dict_with_mutable_key ...                                         [OK]
    test_dict_with_tuple_as_key ...                                        [OK]
    test_failed_dict1 ...                                                  [OK]
    test_failed_dict2 ...                                                  [OK]
    test_failed_dict3 ...                                                  [OK]
    test_failed_dict4 ...                                                  [OK]
    test_failed_dict5 ...                                                  [OK]
    test_list_with_tuple ...                                               [OK]
    test_nested_list ...                                                   [OK]
    test_ref1 ...                                                          [OK]
    test_ref2 ...                                                          [OK]
    test_ref3 ...                                                          [OK]
    test_ref4 ...                                                          [OK]
    test_ref5 ...                                                          [OK]
    test_ref6 ...                                                          [OK]
    test_simple_list ...                                                   [OK]
  EncodeFailureTest
    test1 ...                                                              [OK]
    test2 ...                                                              [OK]
    test3 ...                                                              [OK]
    test4 ...                                                              [OK]
    test5 ...                                                              [OK]
    testSuccess1 ...                                                       [OK]
    testSuccessStreaming ...                                               [OK]
  EncodeTest
    testDict ...                                                           [OK]
    testList ...                                                           [OK]
    testNestedList ...                                                     [OK]
    testNestedList2 ...                                                    [OK]
    testTuple ...                                                          [OK]
    test_ref1 ...                                                          [OK]
    test_ref2 ...                                                          [OK]
    test_ref3 ...                                                          [OK]
    test_ref4 ...                                                          [OK]
    test_ref6 ...                                                          [OK]
    test_refdict1 ...                                                      [OK]
  InboundByteStream
    testBool ...                                                           [OK]
    testDict ...                                                           [OK]
    testInt ...                                                            [OK]
    testList ...                                                           [OK]
    testLong ...                                                           [OK]
    testString ...                                                         [OK]
    testTuple ...                                                          [OK]
  InboundByteStream2
    testConstrainedBool ...                                                [OK]
    testConstrainedDict ...                                                [OK]
    testConstrainedInt ...                                                 [OK]
    testConstrainedList ...                                                [OK]
    testConstrainedString ...                                              [OK]
    testConstrainedTuple ...                                               [OK]
  Sliceable
    testAdapter ...                                                        [OK]
    testDirect ...                                                         [OK]
  ThereAndBackAgain
    testIdentity ...                                                       [OK]
    testStressReferences ...                                               [OK]
    testUnicode ...                                                        [OK]
    test_bigint ...                                                        [OK]
    test_bool ...                                                          [OK]
    test_cycles_1 ...                                                      [OK]
    test_cycles_2 ...                                                      [OK]
    test_decimal ...                                                       [OK]
    test_dict ...                                                          [OK]
    test_float ...                                                         [OK]
    test_int ...                                                           [OK]
    test_list ...                                                          [OK]
    test_none ...                                                          [OK]
    test_set ...                                                           [OK]
    test_string ...                                                        [OK]
    test_tuple ...                                                         [OK]
    test_unicode ...                                                       [OK]
  VocabTest1
    test_incoming1 ...                                                     [OK]
    test_outgoing ...                                                      [OK]
    test_table_hashes ...                                                  [OK]
  VocabTest2
    test_loop ...                                                          [OK]
foolscap
  test
    test_call ...                                                       [ERROR]
    test_connection ...                                                 [ERROR]
    test_copyable ...                                                   [ERROR]
    test_crypto ...                                                     [ERROR]
foolscap.test.test_eventual
  TestEventual
    testFire ...                                                           [OK]
    testFlush ...                                                          [OK]
    testSend ...                                                           [OK]
foolscap
  test
    test_gifts ...                                                      [ERROR]
    test_info ...                                                       [ERROR]
    test_interfaces ...                                                 [ERROR]
    test_keepalive ...                                                  [ERROR]
    test_listener ...                                                   [ERROR]
    test_logging ...                                                    [ERROR]
    test_loopback ...                                                   [ERROR]
    test_negotiate ...                                                  [ERROR]
foolscap.test.test_observer
  Observer
    test_oneshot ...                                                       [OK]
foolscap
  test
    test_pb ...                                                         [ERROR]
foolscap.test.test_promise
  Call
    testResolveAfter ...                                                   [OK]
    testResolveBefore ...                                                  [OK]
    testResolveFailure ...                                                 [OK]
  Chained
    testChained1 ...                                                       [OK]
    testChained2 ...                                                       [OK]
    testResolveToABrokenPromise ...                                        [OK]
    testResolveToAPromise ...                                              [OK]
  Send
    testBadName ...                                                        [OK]
    testBasic ...                                                          [OK]
    testBasicFailure ...                                                   [OK]
    testDisableDataflowStyle ...                                           [OK]
    testFailure ...                                                        [OK]
    testNoMultipleResolution ...                                           [OK]
    testOrdering ...                                                       [OK]
    testResolveAfter ...                                                   [OK]
    testResolveBefore ...                                                  [OK]
    testResolveFailure ...                                                 [OK]
    testSend ...                                                           [OK]
  SendOnly
    testNear ...                                                           [OK]
    testResolveAfter ...                                                   [OK]
    testResolveBefore ...                                                  [OK]
foolscap
  test
    test_reconnector ...                                                [ERROR]
    test_reference ...                                                  [ERROR]
    test_registration ...                                               [ERROR]
    test_schema ...                                                     [ERROR]
    test_serialize ...                                                  [ERROR]
foolscap.test.test_stringchain
  T
    test_al ...                                                            [OK]
    test_appendleft ...                                                    [OK]
    test_clear ...                                                         [OK]
    test_popleft ...                                                       [OK]
    test_popleft_new_stringchain ...                                       [OK]
    test_str ...                                                           [OK]
    test_tailignored ...                                                   [OK]
    test_trim ...                                                          [OK]
foolscap
  test
    test_sturdyref ...                                                  [ERROR]
    test_tub ...                                                        [ERROR]
    test_unreachable ...                                                [ERROR]
foolscap.test.test_util
  AllocatePort
    test_allocate ...                                                      [OK]
  AsyncAND
    test_empty ...                                                         [OK]
    test_one_failure_1 ...                                                 [OK]
    test_one_failure_2 ...                                                 [OK]
    test_simple ...                                                        [OK]
    test_two ...                                                           [OK]
    test_two_failure ...                                                   [OK]
  Base32
    test_digest32 ...                                                      [OK]
    test_is_base32 ...                                                     [OK]
  Time
    test_format ...                                                        [OK]

===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test__versions.py", line 9, in <module>
    from foolscap.api import __version__
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test__versions
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_appserver.py", line 8, in <module>
    from foolscap.api import Tub, eventually
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_appserver
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_call.py", line 18, in <module>
    from foolscap.test.common import HelperTarget, TargetMixin, ShouldFailMixin
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/common.py", line 11, in <module>
    from foolscap import broker, eventual, negotiate
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_call
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_connection.py", line 11, in <module>
    from foolscap.api import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_connection
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_copyable.py", line 5, in <module>
    from foolscap.test.common import TargetMixin, HelperTarget
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/common.py", line 11, in <module>
    from foolscap import broker, eventual, negotiate
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_copyable
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_crypto.py", line 7, in <module>
    from foolscap import pb
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_crypto
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_gifts.py", line 6, in <module>
    from foolscap.api import RemoteInterface, Referenceable, flushEventualQueue, \
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_gifts
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_info.py", line 6, in <module>
    from foolscap.api import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_info
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_interfaces.py", line 7, in <module>
    from foolscap import schema, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_interfaces
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_keepalive.py", line 7, in <module>
    from foolscap.api import DeadReferenceError, flushEventualQueue
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_keepalive
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_listener.py", line 5, in <module>
    from foolscap.api import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_listener
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_logging.py", line 19, in <module>
    from foolscap.logging import gatherer, log, tail, incident, cli, web, \
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/gatherer.py", line 12, in <module>
    from foolscap.api import Tub, Referenceable
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_logging
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_loopback.py", line 4, in <module>
    from foolscap.test.common import HelperTarget, MakeTubsMixin
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/common.py", line 11, in <module>
    from foolscap import broker, eventual, negotiate
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_loopback
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_negotiate.py", line 8, in <module>
    from foolscap import negotiate, tokens
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_negotiate
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_pb.py", line 16, in <module>
    from foolscap import referenceable
  File "/Users/jaraco/code/public/foolscap/src/foolscap/referenceable.py", line 18, in <module>
    from foolscap import ipb, slicer, tokens, call
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_pb
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_reconnector.py", line 5, in <module>
    from foolscap.api import Tub, eventually, flushEventualQueue
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_reconnector
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_reference.py", line 5, in <module>
    from foolscap.test.common import HelperTarget, Target, ShouldFailMixin
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/common.py", line 11, in <module>
    from foolscap import broker, eventual, negotiate
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_reference
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_registration.py", line 6, in <module>
    from foolscap.api import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_registration
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_schema.py", line 4, in <module>
    from foolscap import schema, copyable, broker
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_schema
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_serialize.py", line 8, in <module>
    from foolscap.api import Referenceable, Copyable, RemoteCopy, \
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_serialize
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_sturdyref.py", line 3, in <module>
    from foolscap.referenceable import SturdyRef
  File "/Users/jaraco/code/public/foolscap/src/foolscap/referenceable.py", line 18, in <module>
    from foolscap import ipb, slicer, tokens, call
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_sturdyref
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_tub.py", line 11, in <module>
    from foolscap.api import Tub, SturdyRef, Referenceable
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_tub
===============================================================================
[ERROR]
Traceback (most recent call last):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/trial/runner.py", line 531, in loadPackage
    module = modinfo.load()
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/modules.py", line 392, in load
    return self.pathEntry.pythonPath.moduleLoader(self.name)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 308, in namedAny
    topLevelPackage = _importAndCheckStack(trialname)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/twisted/python/reflect.py", line 247, in _importAndCheckStack
    return __import__(importName)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/test/test_unreachable.py", line 4, in <module>
    from foolscap.api import Tub, Referenceable
  File "/Users/jaraco/code/public/foolscap/src/foolscap/api.py", line 16, in <module>
    from foolscap.pb import Tub
  File "/Users/jaraco/code/public/foolscap/src/foolscap/pb.py", line 14, in <module>
    from foolscap import ipb, base32, negotiate, broker, eventual, storage
  File "/Users/jaraco/code/public/foolscap/src/foolscap/negotiate.py", line 10, in <module>
    from foolscap import broker, referenceable, vocab
  File "/Users/jaraco/code/public/foolscap/src/foolscap/broker.py", line 17, in <module>
    from foolscap import call, slicer, referenceable, copyable, remoteinterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/call.py", line 11, in <module>
    from foolscap.logging import log
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/log.py", line 9, in <module>
    from foolscap.logging.interfaces import IIncidentReporter
  File "/Users/jaraco/code/public/foolscap/src/foolscap/logging/interfaces.py", line 3, in <module>
    from foolscap.remoteinterface import RemoteInterface
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 413, in <module>
    class RemoteInterface(interface.Interface):
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/six.py", line 878, in wrapper
    return metaclass(cls.__name__, cls.__bases__, orig_vars)
  File "/Users/jaraco/code/public/foolscap/src/foolscap/remoteinterface.py", line 44, in __init__
    interface.InterfaceClass.__init__(self, iname, bases, attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 787, in __init__
    self.__attrs = self.__compute_attrs(attrs)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 805, in __compute_attrs
    return {
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 806, in <dictcomp>
    aname: update_value(aname, aval)
  File "/Users/jaraco/code/public/foolscap/.tox/python/lib/python3.9/site-packages/zope/interface/interface.py", line 802, in update_value
    raise InvalidInterface("Concrete attribute, " + aname)
zope.interface.exceptions.InvalidInterface: Concrete attribute, _Element__tagged_values

foolscap.test.test_unreachable
-------------------------------------------------------------------------------
Ran 163 tests in 0.120s

FAILED (errors=23, successes=140)
ERROR: InvocationError for command /Users/jaraco/code/public/foolscap/.tox/python/bin/trial foolscap (exited with code 1)
___________________________________ summary ____________________________________
ERROR:   python: commands failed

The way I read that error message, the Interface class already was instrumented in such a way that the intermediate class that gets created when using add_metaclass is invalid. It's similar, though subtly different from the limitation with draft documentation in benjaminp/six#168.

Unfortunately, the history behind the addition of add_metaclass over with_metaclass seems to have been lost in the retirement of Bitbucket.

My instinct here is that this code works well enough and attempting the alternate approach causes the tests to fail, so there's not a whole lot more to say. I'll add a comment linking to this discussion for those interested in more background.

(682def4)

Copy link
Collaborator

@exarkun exarkun left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks. This looks good now. I can confirm that it fixes the remaining mypy errors on the Tahoe branch that introduces mypy usage and I can also confirm that Tahoe nodes can still interact via Foolscap using this branch.

@exarkun exarkun merged commit 455936d into warner:master Jan 15, 2021
@jaraco jaraco deleted the bugfix/75-use-metaclass branch January 15, 2021 20:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

directly-instantiated types are unsupported in mypy-zope

4 participants