<feed xmlns='http://www.w3.org/2005/Atom'>
<title>delta/python-packages/zope-interface.git/src/zope/interface/registry.py, branch issue170</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>Add __all__ to all modules.</title>
<updated>2020-02-05T14:12:53+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2020-02-05T14:12:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=c4805da768863207b5dd182b3c0dd2aacc7be92f'/>
<id>c4805da768863207b5dd182b3c0dd2aacc7be92f</id>
<content type='text'>
Fixes #153

The items that went in each ``__all__`` are based on what is
documented:

 $ rg --no-filename 'import' docs/ -trst | tr -s "[:blank:]" | sort | uniq | grep zope
 &gt;&gt;&gt; from pprint import pprint
 &gt;&gt;&gt; from zope.interface import *
 &gt;&gt;&gt; from zope.interface import Interface
 &gt;&gt;&gt; from zope.interface import Interface, Attribute, implementer
 &gt;&gt;&gt; from zope.interface import alsoProvides
 &gt;&gt;&gt; from zope.interface import classImplements
 &gt;&gt;&gt; from zope.interface import classImplementsOnly
 &gt;&gt;&gt; from zope.interface import directlyProvidedBy
 &gt;&gt;&gt; from zope.interface import directlyProvides
 &gt;&gt;&gt; from zope.interface import implementedBy
 &gt;&gt;&gt; from zope.interface import implementer
 &gt;&gt;&gt; from zope.interface import implementer_only
 &gt;&gt;&gt; from zope.interface import noLongerProvides
 &gt;&gt;&gt; from zope.interface import providedBy
 &gt;&gt;&gt; from zope.interface import provider
 &gt;&gt;&gt; from zope.interface.adapter import AdapterRegistry
 &gt;&gt;&gt; from zope.interface.declarations import Declaration
 &gt;&gt;&gt; from zope.interface.declarations import InstanceDeclarations
 &gt;&gt;&gt; from zope.interface.declarations import ProvidesClass
 &gt;&gt;&gt; from zope.interface.declarations import named
 &gt;&gt;&gt; from zope.interface.exceptions import BrokenImplementation
 &gt;&gt;&gt; from zope.interface.exceptions import Invalid
 &gt;&gt;&gt; from zope.interface.interface import Specification
 &gt;&gt;&gt; from zope.interface.interface import adapter_hooks
 &gt;&gt;&gt; from zope.interface.verify import verifyObject
 &gt;&gt;&gt; import gc
 &gt;&gt;&gt; import zope.interface

And also some personal judgement about what the public API is that I'm
more than happy to have reviewed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #153

The items that went in each ``__all__`` are based on what is
documented:

 $ rg --no-filename 'import' docs/ -trst | tr -s "[:blank:]" | sort | uniq | grep zope
 &gt;&gt;&gt; from pprint import pprint
 &gt;&gt;&gt; from zope.interface import *
 &gt;&gt;&gt; from zope.interface import Interface
 &gt;&gt;&gt; from zope.interface import Interface, Attribute, implementer
 &gt;&gt;&gt; from zope.interface import alsoProvides
 &gt;&gt;&gt; from zope.interface import classImplements
 &gt;&gt;&gt; from zope.interface import classImplementsOnly
 &gt;&gt;&gt; from zope.interface import directlyProvidedBy
 &gt;&gt;&gt; from zope.interface import directlyProvides
 &gt;&gt;&gt; from zope.interface import implementedBy
 &gt;&gt;&gt; from zope.interface import implementer
 &gt;&gt;&gt; from zope.interface import implementer_only
 &gt;&gt;&gt; from zope.interface import noLongerProvides
 &gt;&gt;&gt; from zope.interface import providedBy
 &gt;&gt;&gt; from zope.interface import provider
 &gt;&gt;&gt; from zope.interface.adapter import AdapterRegistry
 &gt;&gt;&gt; from zope.interface.declarations import Declaration
 &gt;&gt;&gt; from zope.interface.declarations import InstanceDeclarations
 &gt;&gt;&gt; from zope.interface.declarations import ProvidesClass
 &gt;&gt;&gt; from zope.interface.declarations import named
 &gt;&gt;&gt; from zope.interface.exceptions import BrokenImplementation
 &gt;&gt;&gt; from zope.interface.exceptions import Invalid
 &gt;&gt;&gt; from zope.interface.interface import Specification
 &gt;&gt;&gt; from zope.interface.interface import adapter_hooks
 &gt;&gt;&gt; from zope.interface.verify import verifyObject
 &gt;&gt;&gt; import gc
 &gt;&gt;&gt; import zope.interface

And also some personal judgement about what the public API is that I'm
more than happy to have reviewed.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix the cache getting out of sync with _utility_registrations.</title>
<updated>2017-06-14T13:51:43+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2017-06-14T13:51:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=751a95088567e4d219ecac6f2145f26b5753e424'/>
<id>751a95088567e4d219ecac6f2145f26b5753e424</id>
<content type='text'>
Fixes #93
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #93
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix #85 by implementing __reduce__ to omit _v_ attributes.</title>
<updated>2017-06-14T11:51:22+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2017-06-14T11:51:22+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=9de7239b28a9817ad43c04e438743a22d964545e'/>
<id>9de7239b28a9817ad43c04e438743a22d964545e</id>
<content type='text'>
This is an alternative to #86 and was suggested by @mgedmin in #85.

There are tests to be sure this works for subclasses like Pyramid's
Registry that extend dict too.

This doesn't change the pickle format, we were storing the output of
object.__reduce__ previously.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is an alternative to #86 and was suggested by @mgedmin in #85.

There are tests to be sure this works for subclasses like Pyramid's
Registry that extend dict too.

This doesn't change the pickle format, we were storing the output of
object.__reduce__ previously.
</pre>
</div>
</content>
</entry>
<entry>
<title>Added some comments to describe the management of _v_utility_registrations_cache</title>
<updated>2017-05-12T22:00:33+00:00</updated>
<author>
<name>Jim Fulton</name>
<email>jim@jimfulton.info</email>
</author>
<published>2017-05-12T22:00:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=ca51b02adb512cab0dbc7a157e67ae7d63f4141d'/>
<id>ca51b02adb512cab0dbc7a157e67ae7d63f4141d</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Simply the caching of utility-registration data. In addition to</title>
<updated>2017-05-12T21:20:59+00:00</updated>
<author>
<name>Jim Fulton</name>
<email>jim@jimfulton.info</email>
</author>
<published>2017-05-12T21:20:59+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=38d1c82de85cad2f7697d40212153258248999c3'/>
<id>38d1c82de85cad2f7697d40212153258248999c3</id>
<content type='text'>
simplification, avoids spurious test failures when checking for
leaks in tests with persistent registries.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
simplification, avoids spurious test failures when checking for
leaks in tests with persistent registries.
</pre>
</div>
</content>
</entry>
<entry>
<title>Support Components subclasses that are not hashable. (#54)</title>
<updated>2016-08-31T12:41:51+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jason+github@nextthought.com</email>
</author>
<published>2016-08-31T12:41:51+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=14c8b2966011bc0dcab7e908cd80cb61dfd413cb'/>
<id>14c8b2966011bc0dcab7e908cd80cb61dfd413cb</id>
<content type='text'>
* Support Components subclasses that are not hashable.

Fixes #53.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Support Components subclasses that are not hashable.

Fixes #53.</pre>
</div>
</content>
</entry>
<entry>
<title>Fix comment.</title>
<updated>2016-08-30T13:50:25+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2016-08-30T13:50:25+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=1e2b756500b7b8518884ff4c3bd8bd64e62641a4'/>
<id>1e2b756500b7b8518884ff4c3bd8bd64e62641a4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Better naming, and incorporate feedback from @prsephton</title>
<updated>2016-08-22T16:45:21+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2016-08-22T16:45:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=99c35d11e2284d7d8bfb749f9bd8876484992307'/>
<id>99c35d11e2284d7d8bfb749f9bd8876484992307</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use dictionary lookups for testing subscribed status.</title>
<updated>2016-08-19T13:18:39+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2016-08-19T13:18:39+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=58ef4872922803fac3429d88fb3c58ae509b17c5'/>
<id>58ef4872922803fac3429d88fb3c58ae509b17c5</id>
<content type='text'>
Fixes #46.

Benchmarks show a dramatic improvement; not quite as good as the
demonstration in #46 because the implementation had to be a bit more
complex to properly handle unregistration, but still very good. Here it
is with 20,000 items already registered:
```
   %time add_to_reg(reg, 1000)
   CPU times: user 190 ms, sys: 19.3 ms, total: 209 ms
   Wall time: 203 ms
```

Here's a profile with about 100,000 utilities registered:
```
 %prun add_to_reg(reg, 1000)
         80005 function calls (79005 primitive calls) in 0.713 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1000    0.596    0.001    0.621    0.001 adapter.py:202(subscribe)
    12000    0.016    0.000    0.019    0.000 interface.py:518(__hash__)
     1000    0.010    0.000    0.709    0.001 registry.py:206(registerUtility)
3000/2000    0.009    0.000    0.014    0.000 interface.py:255(interfaces)
     2000    0.008    0.000    0.022    0.000 adapter.py:637(changed)
     1000    0.008    0.000    0.025    0.000 registry.py:498(_getUtilityProvided)
     9000    0.008    0.000    0.017    0.000 {method 'get' of 'dict' objects}
     1000    0.008    0.000    0.027    0.000 adapter.py:102(register)
     2000    0.006    0.000    0.008    0.000 adapter.py:450(changed)
     1000    0.005    0.000    0.663    0.001 registry.py:145(registerUtility)
```

I was very careful not to change the pickle at all.

zope.interface and zope.component tests have been run and both pass. (It
was necessary to account for the underlying objects changing because of
the way zope.component cleans up after tests.)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes #46.

Benchmarks show a dramatic improvement; not quite as good as the
demonstration in #46 because the implementation had to be a bit more
complex to properly handle unregistration, but still very good. Here it
is with 20,000 items already registered:
```
   %time add_to_reg(reg, 1000)
   CPU times: user 190 ms, sys: 19.3 ms, total: 209 ms
   Wall time: 203 ms
```

Here's a profile with about 100,000 utilities registered:
```
 %prun add_to_reg(reg, 1000)
         80005 function calls (79005 primitive calls) in 0.713 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1000    0.596    0.001    0.621    0.001 adapter.py:202(subscribe)
    12000    0.016    0.000    0.019    0.000 interface.py:518(__hash__)
     1000    0.010    0.000    0.709    0.001 registry.py:206(registerUtility)
3000/2000    0.009    0.000    0.014    0.000 interface.py:255(interfaces)
     2000    0.008    0.000    0.022    0.000 adapter.py:637(changed)
     1000    0.008    0.000    0.025    0.000 registry.py:498(_getUtilityProvided)
     9000    0.008    0.000    0.017    0.000 {method 'get' of 'dict' objects}
     1000    0.008    0.000    0.027    0.000 adapter.py:102(register)
     2000    0.006    0.000    0.008    0.000 adapter.py:450(changed)
     1000    0.005    0.000    0.663    0.001 registry.py:145(registerUtility)
```

I was very careful not to change the pickle at all.

zope.interface and zope.component tests have been run and both pass. (It
was necessary to account for the underlying objects changing because of
the way zope.component cleans up after tests.)
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove the _u compat function.</title>
<updated>2016-08-02T21:56:25+00:00</updated>
<author>
<name>Jason Madden</name>
<email>jamadden@gmail.com</email>
</author>
<published>2016-08-02T21:56:25+00:00</published>
<link rel='alternate' type='text/html' href='http://git.baserock.org/cgit/delta/python-packages/zope-interface.git/commit/?id=3973374c6ad1042c1e30a8b43374906b3be753b0'/>
<id>3973374c6ad1042c1e30a8b43374906b3be753b0</id>
<content type='text'>
Since we no longer support 3.2 we can use the literal syntax.

This was done with a quick sed script.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Since we no longer support 3.2 we can use the literal syntax.

This was done with a quick sed script.
</pre>
</div>
</content>
</entry>
</feed>
