<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/python-packages/zope-interface.git/docs/verify.rst, branch issue239</title>
<subtitle>github.com: zopefoundation/zope.interface.git
</subtitle>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/'/>
<entry>
<title>Update repr() and str() of some common objects.</title>
<updated>2021-03-25T15:30:47+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2021-03-25T15:30:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=ce8f66f8bf4ebffca7cdf95dbb8c5add02251e91'/>
<id>ce8f66f8bf4ebffca7cdf95dbb8c5add02251e91</id>
<content type='text'>
Only InterfaceClass got a str, so it now has a distinction. Other objects only got updated reprs.

Note: This may potentially break some doctests.

In many cases, the ``repr()`` is now something that can be evaluated
to produce an equal object. For example, what was previously printed
as ``&lt;implementedBy builtins.list&gt;`` is now shown as
``classImplements(list, IMutableSequence, IIterable)``.

Fixes #236

Here's a before with ZOPE_INTERFACE_LOG_CHANGED_IRO=1 in BTrees:
```
Object &lt;implementedBy builtins.list&gt; has different legacy and C3 MROs:
  Legacy RO (len=11)                                                        C3 RO (len=11; inconsistent=no)
  ==================================================================================================================================================
    &lt;implementedBy builtins.list&gt;                                             &lt;implementedBy builtins.list&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableSequence&gt;    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableSequence&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISequence&gt;           &lt;ABCInterfaceClass zope.interface.common.collections.ISequence&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IReversible&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.IReversible&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;              &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;
                                                                            + &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;          &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;
  - &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;                    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;
                                                                            + &lt;implementedBy builtins.object&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;                                 &lt;InterfaceClass zope.interface.Interface&gt;
  - &lt;implementedBy builtins.object&gt;
Object &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt; has different legacy and C3 MROs:
  Legacy RO (len=18)                                                       C3 RO (len=18; inconsistent=no)
  ================================================================================================================================================
    &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt;           &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableMapping&gt;    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMapping&gt;           &lt;ABCInterfaceClass zope.interface.common.collections.IMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;        &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;
  - &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IExtendedReadMapping&gt;      &lt;InterfaceClass zope.interface.common.mapping.IExtendedReadMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IIterableMapping&gt;          &lt;InterfaceClass zope.interface.common.mapping.IIterableMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IExtendedWriteMapping&gt;     &lt;InterfaceClass zope.interface.common.mapping.IExtendedWriteMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IClonableMapping&gt;          &lt;InterfaceClass zope.interface.common.mapping.IClonableMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IMapping&gt;                  &lt;InterfaceClass zope.interface.common.mapping.IMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IWriteMapping&gt;             &lt;InterfaceClass zope.interface.common.mapping.IWriteMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IEnumerableMapping&gt;        &lt;InterfaceClass zope.interface.common.mapping.IEnumerableMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;             &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;
                                                                           + &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IReadMapping&gt;              &lt;InterfaceClass zope.interface.common.mapping.IReadMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;
    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;                   &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IItemMapping&gt;              &lt;InterfaceClass zope.interface.common.mapping.IItemMapping&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;                                &lt;InterfaceClass zope.interface.Interface&gt;
Object &lt;InterfaceClass BTrees.Interfaces.ISet&gt; has different legacy and C3 MROs:
  Legacy RO (len=7)                                  C3 RO (len=7; inconsistent=no)
  ====================================================================================================
    &lt;InterfaceClass BTrees.Interfaces.ISet&gt;            &lt;InterfaceClass BTrees.Interfaces.ISet&gt;
    &lt;InterfaceClass BTrees.Interfaces.IKeySequence&gt;    &lt;InterfaceClass BTrees.Interfaces.IKeySequence&gt;
  - &lt;InterfaceClass BTrees.Interfaces.ISized&gt;
    &lt;InterfaceClass BTrees.Interfaces.ISetMutable&gt;     &lt;InterfaceClass BTrees.Interfaces.ISetMutable&gt;
    &lt;InterfaceClass BTrees.Interfaces.IKeyed&gt;          &lt;InterfaceClass BTrees.Interfaces.IKeyed&gt;
    &lt;InterfaceClass BTrees.Interfaces.ICollection&gt;     &lt;InterfaceClass BTrees.Interfaces.ICollection&gt;
                                                     + &lt;InterfaceClass BTrees.Interfaces.ISized&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;          &lt;InterfaceClass zope.interface.Interface&gt;
```

And here's after:

```
Object classImplements(list, IMutableSequence, IIterable) has different legacy and C3 MROs:
  Legacy RO (len=11)                                    C3 RO (len=11; inconsistent=no)
  ==========================================================================================================
    classImplements(list, IMutableSequence, IIterable)    classImplements(list, IMutableSequence, IIterable)
    zope.interface.common.collections.IMutableSequence    zope.interface.common.collections.IMutableSequence
    zope.interface.common.collections.ISequence           zope.interface.common.collections.ISequence
    zope.interface.common.collections.IReversible         zope.interface.common.collections.IReversible
    zope.interface.common.collections.ICollection         zope.interface.common.collections.ICollection
    zope.interface.common.collections.ISized              zope.interface.common.collections.ISized
                                                        + zope.interface.common.collections.IIterable
    zope.interface.common.collections.IContainer          zope.interface.common.collections.IContainer
  - zope.interface.common.collections.IIterable
    zope.interface.common.ABCInterface                    zope.interface.common.ABCInterface
                                                        + classImplements(object)
    zope.interface.Interface                              zope.interface.Interface
  - classImplements(object)
Object &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt; has different legacy and C3 MROs:
  Legacy RO (len=18)                                     C3 RO (len=18; inconsistent=no)
  ============================================================================================================
    zope.interface.common.mapping.IFullMapping             zope.interface.common.mapping.IFullMapping
    zope.interface.common.collections.IMutableMapping      zope.interface.common.collections.IMutableMapping
    zope.interface.common.collections.IMapping             zope.interface.common.collections.IMapping
    zope.interface.common.collections.ICollection          zope.interface.common.collections.ICollection
  - zope.interface.common.collections.IIterable
    zope.interface.common.mapping.IExtendedReadMapping     zope.interface.common.mapping.IExtendedReadMapping
    zope.interface.common.mapping.IIterableMapping         zope.interface.common.mapping.IIterableMapping
    zope.interface.common.mapping.IExtendedWriteMapping    zope.interface.common.mapping.IExtendedWriteMapping
    zope.interface.common.mapping.IClonableMapping         zope.interface.common.mapping.IClonableMapping
    zope.interface.common.mapping.IMapping                 zope.interface.common.mapping.IMapping
    zope.interface.common.mapping.IWriteMapping            zope.interface.common.mapping.IWriteMapping
    zope.interface.common.mapping.IEnumerableMapping       zope.interface.common.mapping.IEnumerableMapping
    zope.interface.common.collections.ISized               zope.interface.common.collections.ISized
                                                         + zope.interface.common.collections.IIterable
    zope.interface.common.mapping.IReadMapping             zope.interface.common.mapping.IReadMapping
    zope.interface.common.collections.IContainer           zope.interface.common.collections.IContainer
    zope.interface.common.ABCInterface                     zope.interface.common.ABCInterface
    zope.interface.common.mapping.IItemMapping             zope.interface.common.mapping.IItemMapping
    zope.interface.Interface                               zope.interface.Interface
Object &lt;InterfaceClass BTrees.Interfaces.ISet&gt; has different legacy and C3 MROs:
  Legacy RO (len=7)                 C3 RO (len=7; inconsistent=no)
  ==================================================================
    BTrees.Interfaces.ISet            BTrees.Interfaces.ISet
    BTrees.Interfaces.IKeySequence    BTrees.Interfaces.IKeySequence
  - BTrees.Interfaces.ISized
    BTrees.Interfaces.ISetMutable     BTrees.Interfaces.ISetMutable
    BTrees.Interfaces.IKeyed          BTrees.Interfaces.IKeyed
    BTrees.Interfaces.ICollection     BTrees.Interfaces.ICollection
                                    + BTrees.Interfaces.ISized
    zope.interface.Interface          zope.interface.Interface
```
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Only InterfaceClass got a str, so it now has a distinction. Other objects only got updated reprs.

Note: This may potentially break some doctests.

In many cases, the ``repr()`` is now something that can be evaluated
to produce an equal object. For example, what was previously printed
as ``&lt;implementedBy builtins.list&gt;`` is now shown as
``classImplements(list, IMutableSequence, IIterable)``.

Fixes #236

Here's a before with ZOPE_INTERFACE_LOG_CHANGED_IRO=1 in BTrees:
```
Object &lt;implementedBy builtins.list&gt; has different legacy and C3 MROs:
  Legacy RO (len=11)                                                        C3 RO (len=11; inconsistent=no)
  ==================================================================================================================================================
    &lt;implementedBy builtins.list&gt;                                             &lt;implementedBy builtins.list&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableSequence&gt;    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableSequence&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISequence&gt;           &lt;ABCInterfaceClass zope.interface.common.collections.ISequence&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IReversible&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.IReversible&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;              &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;
                                                                            + &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;          &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;
  - &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;                    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;
                                                                            + &lt;implementedBy builtins.object&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;                                 &lt;InterfaceClass zope.interface.Interface&gt;
  - &lt;implementedBy builtins.object&gt;
Object &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt; has different legacy and C3 MROs:
  Legacy RO (len=18)                                                       C3 RO (len=18; inconsistent=no)
  ================================================================================================================================================
    &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt;           &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableMapping&gt;    &lt;ABCInterfaceClass zope.interface.common.collections.IMutableMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IMapping&gt;           &lt;ABCInterfaceClass zope.interface.common.collections.IMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;        &lt;ABCInterfaceClass zope.interface.common.collections.ICollection&gt;
  - &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IExtendedReadMapping&gt;      &lt;InterfaceClass zope.interface.common.mapping.IExtendedReadMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IIterableMapping&gt;          &lt;InterfaceClass zope.interface.common.mapping.IIterableMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IExtendedWriteMapping&gt;     &lt;InterfaceClass zope.interface.common.mapping.IExtendedWriteMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IClonableMapping&gt;          &lt;InterfaceClass zope.interface.common.mapping.IClonableMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IMapping&gt;                  &lt;InterfaceClass zope.interface.common.mapping.IMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IWriteMapping&gt;             &lt;InterfaceClass zope.interface.common.mapping.IWriteMapping&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IEnumerableMapping&gt;        &lt;InterfaceClass zope.interface.common.mapping.IEnumerableMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;             &lt;ABCInterfaceClass zope.interface.common.collections.ISized&gt;
                                                                           + &lt;ABCInterfaceClass zope.interface.common.collections.IIterable&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IReadMapping&gt;              &lt;InterfaceClass zope.interface.common.mapping.IReadMapping&gt;
    &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;         &lt;ABCInterfaceClass zope.interface.common.collections.IContainer&gt;
    &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;                   &lt;ABCInterfaceClass zope.interface.common.ABCInterface&gt;
    &lt;InterfaceClass zope.interface.common.mapping.IItemMapping&gt;              &lt;InterfaceClass zope.interface.common.mapping.IItemMapping&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;                                &lt;InterfaceClass zope.interface.Interface&gt;
Object &lt;InterfaceClass BTrees.Interfaces.ISet&gt; has different legacy and C3 MROs:
  Legacy RO (len=7)                                  C3 RO (len=7; inconsistent=no)
  ====================================================================================================
    &lt;InterfaceClass BTrees.Interfaces.ISet&gt;            &lt;InterfaceClass BTrees.Interfaces.ISet&gt;
    &lt;InterfaceClass BTrees.Interfaces.IKeySequence&gt;    &lt;InterfaceClass BTrees.Interfaces.IKeySequence&gt;
  - &lt;InterfaceClass BTrees.Interfaces.ISized&gt;
    &lt;InterfaceClass BTrees.Interfaces.ISetMutable&gt;     &lt;InterfaceClass BTrees.Interfaces.ISetMutable&gt;
    &lt;InterfaceClass BTrees.Interfaces.IKeyed&gt;          &lt;InterfaceClass BTrees.Interfaces.IKeyed&gt;
    &lt;InterfaceClass BTrees.Interfaces.ICollection&gt;     &lt;InterfaceClass BTrees.Interfaces.ICollection&gt;
                                                     + &lt;InterfaceClass BTrees.Interfaces.ISized&gt;
    &lt;InterfaceClass zope.interface.Interface&gt;          &lt;InterfaceClass zope.interface.Interface&gt;
```

And here's after:

```
Object classImplements(list, IMutableSequence, IIterable) has different legacy and C3 MROs:
  Legacy RO (len=11)                                    C3 RO (len=11; inconsistent=no)
  ==========================================================================================================
    classImplements(list, IMutableSequence, IIterable)    classImplements(list, IMutableSequence, IIterable)
    zope.interface.common.collections.IMutableSequence    zope.interface.common.collections.IMutableSequence
    zope.interface.common.collections.ISequence           zope.interface.common.collections.ISequence
    zope.interface.common.collections.IReversible         zope.interface.common.collections.IReversible
    zope.interface.common.collections.ICollection         zope.interface.common.collections.ICollection
    zope.interface.common.collections.ISized              zope.interface.common.collections.ISized
                                                        + zope.interface.common.collections.IIterable
    zope.interface.common.collections.IContainer          zope.interface.common.collections.IContainer
  - zope.interface.common.collections.IIterable
    zope.interface.common.ABCInterface                    zope.interface.common.ABCInterface
                                                        + classImplements(object)
    zope.interface.Interface                              zope.interface.Interface
  - classImplements(object)
Object &lt;ABCInterfaceClass zope.interface.common.mapping.IFullMapping&gt; has different legacy and C3 MROs:
  Legacy RO (len=18)                                     C3 RO (len=18; inconsistent=no)
  ============================================================================================================
    zope.interface.common.mapping.IFullMapping             zope.interface.common.mapping.IFullMapping
    zope.interface.common.collections.IMutableMapping      zope.interface.common.collections.IMutableMapping
    zope.interface.common.collections.IMapping             zope.interface.common.collections.IMapping
    zope.interface.common.collections.ICollection          zope.interface.common.collections.ICollection
  - zope.interface.common.collections.IIterable
    zope.interface.common.mapping.IExtendedReadMapping     zope.interface.common.mapping.IExtendedReadMapping
    zope.interface.common.mapping.IIterableMapping         zope.interface.common.mapping.IIterableMapping
    zope.interface.common.mapping.IExtendedWriteMapping    zope.interface.common.mapping.IExtendedWriteMapping
    zope.interface.common.mapping.IClonableMapping         zope.interface.common.mapping.IClonableMapping
    zope.interface.common.mapping.IMapping                 zope.interface.common.mapping.IMapping
    zope.interface.common.mapping.IWriteMapping            zope.interface.common.mapping.IWriteMapping
    zope.interface.common.mapping.IEnumerableMapping       zope.interface.common.mapping.IEnumerableMapping
    zope.interface.common.collections.ISized               zope.interface.common.collections.ISized
                                                         + zope.interface.common.collections.IIterable
    zope.interface.common.mapping.IReadMapping             zope.interface.common.mapping.IReadMapping
    zope.interface.common.collections.IContainer           zope.interface.common.collections.IContainer
    zope.interface.common.ABCInterface                     zope.interface.common.ABCInterface
    zope.interface.common.mapping.IItemMapping             zope.interface.common.mapping.IItemMapping
    zope.interface.Interface                               zope.interface.Interface
Object &lt;InterfaceClass BTrees.Interfaces.ISet&gt; has different legacy and C3 MROs:
  Legacy RO (len=7)                 C3 RO (len=7; inconsistent=no)
  ==================================================================
    BTrees.Interfaces.ISet            BTrees.Interfaces.ISet
    BTrees.Interfaces.IKeySequence    BTrees.Interfaces.IKeySequence
  - BTrees.Interfaces.ISized
    BTrees.Interfaces.ISetMutable     BTrees.Interfaces.ISetMutable
    BTrees.Interfaces.IKeyed          BTrees.Interfaces.IKeyed
    BTrees.Interfaces.ICollection     BTrees.Interfaces.ICollection
                                    + BTrees.Interfaces.ISized
    zope.interface.Interface          zope.interface.Interface
```
</pre>
</div>
</content>
</entry>
<entry>
<title>Use C3 (mostly) to compute IRO.</title>
<updated>2020-03-15T14:56:14+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-03-05T20:38:39+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=024f6432270afd021da2d9fff5c3f496f788e54d'/>
<id>024f6432270afd021da2d9fff5c3f496f788e54d</id>
<content type='text'>
Fixes #21

The 'mostly' is because interfaces are used in cases that C3 forbids;
when there's a conflict, we fallback to the legacy algorithm. It turns
out there are few conflicts (13K out of 149K total orderings in Plone).

I hoped the fix for #8 might shake out automatically, but it didn't.

Optimize the extremely common case of a __bases__ of length one.

In the benchmark, 4/5 of the interfaces and related objects have a base of length one.

Fix the bad IROs in the bundled ABC interfaces, and implement a way to get warnings or errors.

In running plone/buildout.coredev and tracking the RO requests, the
stats for equal, not equal, and inconsistent-so-fallback, I got
{'ros': 148868, 'eq': 138461, 'ne': 10407, 'inconsistent': 12934}

Add the interface module to the Attribute str.

This was extremely helpful tracking down the Plone problem; IDate is defined in multiple modules.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #21

The 'mostly' is because interfaces are used in cases that C3 forbids;
when there's a conflict, we fallback to the legacy algorithm. It turns
out there are few conflicts (13K out of 149K total orderings in Plone).

I hoped the fix for #8 might shake out automatically, but it didn't.

Optimize the extremely common case of a __bases__ of length one.

In the benchmark, 4/5 of the interfaces and related objects have a base of length one.

Fix the bad IROs in the bundled ABC interfaces, and implement a way to get warnings or errors.

In running plone/buildout.coredev and tracking the RO requests, the
stats for equal, not equal, and inconsistent-so-fallback, I got
{'ros': 148868, 'eq': 138461, 'ne': 10407, 'inconsistent': 12934}

Add the interface module to the Attribute str.

This was extremely helpful tracking down the Plone problem; IDate is defined in multiple modules.
</pre>
</div>
</content>
</entry>
<entry>
<title>Simplify the string formatting rules for the Invalid exceptions.</title>
<updated>2020-02-10T14:20:12+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-10T14:20:12+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=e53e797787f645b20c5598fe9ffab81134309ed3'/>
<id>e53e797787f645b20c5598fe9ffab81134309ed3</id>
<content type='text'>
As per review.

Also include the actual failing implementation object in the BrokenMethodImplementation to make it easier to track down what's going on when inheritance is involved.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
As per review.

Also include the actual failing implementation object in the BrokenMethodImplementation to make it easier to track down what's going on when inheritance is involved.
</pre>
</div>
</content>
</entry>
<entry>
<title>Make verifyObject/Class collect and raise all errors instead of only the first.</title>
<updated>2020-02-08T13:57:35+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-08T13:57:35+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=f6d2e9445d47dd104c146157065169be8df4d409'/>
<id>f6d2e9445d47dd104c146157065169be8df4d409</id>
<content type='text'>
Fixes #171.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #171.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add warning to change note about string changes breaking doctests.</title>
<updated>2020-02-08T12:21:17+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-08T12:21:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=83f4f556991d6fc98eb26fcf918c657224cd05bf'/>
<id>83f4f556991d6fc98eb26fcf918c657224cd05bf</id>
<content type='text'>
Also tweak documentation to DRY for verifyObject/verifyClass.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Also tweak documentation to DRY for verifyObject/verifyClass.
</pre>
</div>
</content>
</entry>
<entry>
<title>Also document the not-a-method case.</title>
<updated>2020-02-07T16:59:11+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-06T16:59:25+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=e8a4da9d5e48d036c2280be009f75b6416054a12'/>
<id>e8a4da9d5e48d036c2280be009f75b6416054a12</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Make verification errors more readable and useful.</title>
<updated>2020-02-07T16:59:11+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-06T16:48:04+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=a825e5f29e98c8c84076600323ffe791531ac765'/>
<id>a825e5f29e98c8c84076600323ffe791531ac765</id>
<content type='text'>
Eliminate the trailing newlines and blank spaces (the code called them
"a stupid artifact").

Include the name of the defining interface (so the user can easily look up
any requirements on the attribute) and, for methods, the expected
signature (no more guessing about how many arguments are required!).

This is implemented by giving Attribute and Method useful reprs and strs.
Previously, they just had the defaults.

Fixes #170
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Eliminate the trailing newlines and blank spaces (the code called them
"a stupid artifact").

Include the name of the defining interface (so the user can easily look up
any requirements on the attribute) and, for methods, the expected
signature (no more guessing about how many arguments are required!).

This is implemented by giving Attribute and Method useful reprs and strs.
Previously, they just had the defaults.

Fixes #170
</pre>
</div>
</content>
</entry>
<entry>
<title>Port the documentation examples to Python 3</title>
<updated>2019-11-11T13:44:13+00:00</updated>
<author>
<name>Marius Gedminas</name>
<email>marius@gedmin.as</email>
</author>
<published>2019-08-17T11:52:13+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=00b9513ded69e2384128cdb58dabd85aa0338e44'/>
<id>00b9513ded69e2384128cdb58dabd85aa0338e44</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Editing while reading: literals, typos, grammar</title>
<updated>2016-10-16T16:48:32+00:00</updated>
<author>
<name>Jean Jordaan</name>
<email>jean.jordaan@gmail.com</email>
</author>
<published>2016-10-16T16:48:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=02f377100123e98763127d92a7b456c65b159322'/>
<id>02f377100123e98763127d92a7b456c65b159322</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix up snippets to run in Sphinx context.</title>
<updated>2012-04-06T01:15:07+00:00</updated>
<author>
<name>Tres Seaver</name>
<email>tseaver@palladion.com</email>
</author>
<published>2012-04-06T01:15:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=64ea0fad954212106f78cba5069710590bfa9e97'/>
<id>64ea0fad954212106f78cba5069710590bfa9e97</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
