summaryrefslogtreecommitdiff
path: root/src/zope/interface
Commit message (Collapse)AuthorAgeFilesLines
* Make verifyObject/Class collect and raise all errors instead of only the first.issue171Jason Madden2020-02-084-85/+247
| | | | Fixes #171.
* Add warning to change note about string changes breaking doctests.Jason Madden2020-02-082-7/+31
| | | | Also tweak documentation to DRY for verifyObject/verifyClass.
* Also document the not-a-method case.issue170Jason Madden2020-02-071-1/+1
|
* Make verification errors more readable and useful.Jason Madden2020-02-075-47/+180
| | | | | | | | | | | | | | 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
* Fix verification for methods of builtin types with pseudo-default arguments ↵issue118Jason Madden2020-02-066-46/+162
| | | | | | | | | on Pypy On PyPy2, they are ignored (like on CPython), but on PyPy3 they can actually be validated. Fixes #118
* Add __all__ to all modules.issue153Jason Madden2020-02-0510-39/+117
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 >>> from pprint import pprint >>> from zope.interface import * >>> from zope.interface import Interface >>> from zope.interface import Interface, Attribute, implementer >>> from zope.interface import alsoProvides >>> from zope.interface import classImplements >>> from zope.interface import classImplementsOnly >>> from zope.interface import directlyProvidedBy >>> from zope.interface import directlyProvides >>> from zope.interface import implementedBy >>> from zope.interface import implementer >>> from zope.interface import implementer_only >>> from zope.interface import noLongerProvides >>> from zope.interface import providedBy >>> from zope.interface import provider >>> from zope.interface.adapter import AdapterRegistry >>> from zope.interface.declarations import Declaration >>> from zope.interface.declarations import InstanceDeclarations >>> from zope.interface.declarations import ProvidesClass >>> from zope.interface.declarations import named >>> from zope.interface.exceptions import BrokenImplementation >>> from zope.interface.exceptions import Invalid >>> from zope.interface.interface import Specification >>> from zope.interface.interface import adapter_hooks >>> from zope.interface.verify import verifyObject >>> import gc >>> import zope.interface And also some personal judgement about what the public API is that I'm more than happy to have reviewed.
* better namingJens W. Klein2020-02-041-9/+9
|
* iPerformace optimization in _lookup _lookupAll _subscriptionslookup-performanceJens W. Klein2020-02-041-6/+13
|
* The _empty singleton has no-op subscribe/unsubscribe methods.issue162Jason Madden2020-01-283-9/+43
| | | | | | | | Turns out they can be called in some very strange error cases. See #162 and #163 for details. This should fix #162 (at least the provided test case, five.intid, passes now). It also does enough work on #163 that (a) the test can be written and run in pure-python mode, which was needed to debug it and (b) five.intid runs in pure-python mode (well, with a bunch of other small hacks to Acquisition, ExtensionClass, DocumentTemplate and AccessControl), but I won't claim that it fully fixes #163. For one thing, there are no specific tests. For another, I see more such differences.
* apply suggestion by @jmadden to enhance commentJens W. Klein2020-01-281-2/+2
|
* Remove unneeded overwrite and call to anyway inherited __hash__ methodhash_performance_2Jens W. Klein2020-01-281-3/+0
|
* Add comment detailing why __bases__ can be set per review.issue158Jason Madden2020-01-271-1/+7
|
* Make the singleton _empty immutable.Jason Madden2020-01-272-3/+101
| | | | Fixes #158
* Remove support for hashing uninitialized interfaces.issue157Jason Madden2020-01-272-17/+4
| | | | Fixes #157
* Whitespace.Jason Madden2020-01-271-1/+1
|
* Avoid allocating space for tagged values unless they're used. This saves ↵Jason Madden2020-01-271-3/+9
| | | | another few percent.
* Specifications with no dependents are common (4700 out of 7000 in this ↵Jason Madden2020-01-272-13/+29
| | | | | | example), so avoid allocating a WeakKeyDictionary until needed. This saves another 2% or so.
* Move Declaration, Specification and ClassProvides to __slots__.Jason Madden2020-01-275-37/+93
| | | | In a test of 6000 modules that load 2245 InterfaceClass objects and produce 2233 ClassProvides instances, this saves about 1% total memory usage in Python 2.7.
* cache on volatile attribute in case class is persisted in ZODBhash_performanceJens W. Klein2020-01-251-3/+3
|
* Improve InterfaceClass __hash__ performanceJens W. Klein2020-01-241-5/+9
|
* Use tp_members in SpecificationBase and ClassProvidesBase.Jason Madden2020-01-234-232/+275
| | | | | | | | | | | | Instead of storing 1 and 2 attributes, respectively, in __dict__. This lets us eliminate inst_attr and its use of an undocumented API. It also helps reign in the size of these objects. Before, on CPython 8, a ClassProvides object that subclasses both SpecificationBase and ClassProvidesBase required 408 bytes: 48 for the object, 360 for the dict. Now it requires 72 + 232 = 304. With a bit of work on defining __slots__ in Python, that can be brought much lower still, I think. zope.security tests pass with this installed.
* Bump version as suggested in review.no-pure-python-buildJason Madden2020-01-221-0/+1
| | | | Also add a line of missing whitespace.
* Tweaks for coverage reporting.Jason Madden2020-01-211-2/+2
| | | | And tox. It wasn't properly working to report coverage before.
* Test PURE_PYTHON at runtime.Jason Madden2020-01-219-260/+350
| | | | | | | Turns out that the C extensions build and work fine with PyPy, but don't use them by default. Let them be forced, though. Tests needed some refactoring to account for the various permutations.
* Remove unused test files.Jason Madden2020-01-213-67/+0
|
* key order doesn't mattermauro2019-10-091-1/+1
|
* fix 'dict_keys' object has no attribute 'extend'mauro2019-10-091-3/+5
|
* taggedvalue inheritancemauro2019-10-092-2/+36
|
* Fix coverage.issue126Jason Madden2018-10-231-2/+2
|
* Fix 'verifyObject' for class objects with staticmethods on Python 3.Jason Madden2018-10-232-1/+25
| | | | Fixes #126
* Reorganize the 'declarations' document by functional group.Jason Madden2018-07-192-42/+42
| | | | Add cross references and some formatting fixes.
* Formatting and cross refs for the 'Interface Specification' docJason Madden2018-07-192-26/+27
|
* Formatting and cross refs for IComponents.Jason Madden2018-07-191-114/+102
|
* Formatting for z.i.common.sequences.Jason Madden2018-07-191-22/+27
|
* Cross references and formatting for z.i.common.mappingJason Madden2018-07-191-17/+42
|
* Cross references and formatting for z.i.common.idatetime.Jason Madden2018-07-191-68/+99
|
* Add docstrings with cross-refs to z.i.common.interfacesJason Madden2018-07-191-56/+166
| | | | | | Also bring the ``classImplements`` lines closer to the interface declaration. This helped me be sure that nothing was missed and that all the repetitions of the names matched.
* Allow Registering and unregistering instance methods as listeners (#102)‮rekcäH nitraM‮2017-11-282-1/+12
| | | * Fixes #12 - registering instance methods as listeners doesn’t allow to easily unregister them as the registry tries to find the handler with 'is' but it should use '==' to allow the python BoundMethod wrapper (which is a new instance every time instance.$methodname is accessed).
* I removed an unnecessary whitespace.y-fujisaki22017-09-211-1/+1
| | | Thank you for follows. I misread it for carriage return.
* Fix process of reference count during GCy-fujisaki22017-09-191-1/+3
| | | | | | call PyObject_GC_UnTrack() in tp_dealloc() see the following sites for details: * https://bugs.python.org/issue31095 * https://github.com/python/cpython/pull/2974
* Drop __annotations__ in interface declarationsMaxim Avanov2017-09-012-1/+11
|
* Merge pull request #95 from zopefoundation/combined-coverageJason Madden2017-06-1413-62/+68
|\ | | | | Enable combined coverage reports under tox and branch coverage
| * cleanups requested by @tseaver: remove assert from _implements since all its ↵Jason Madden2017-06-142-3/+5
| | | | | | | | callers already do this guard; be more explicit about ClassType in test_odd_declarations
| * Enable combined coverage reports under tox and branch coveragecombined-coverageJason Madden2017-06-1413-61/+65
| | | | | | | | | | | | | | | | Fixes #91 Remove many (or most) now-redundant 'pragma: no cover'. A few minor test changes to get full branch coverage.
* | Fix the cache getting out of sync with _utility_registrations.issue93Jason Madden2017-06-142-13/+69
|/ | | | Fixes #93
* Fix #85 by implementing __reduce__ to omit _v_ attributes.issue85-take2-reduceJason Madden2017-06-142-5/+121
| | | | | | | | | | 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.
* 100% coverage (#90)Jason Madden2017-06-1214-271/+195
| | | | | | | | | | | | | | | | | | | | | * Get as close to 100% coverage as possible. Without conflicting with #86. This is almost entirely trivial changes: - Make dummy methods that should never be called either raise NotImplementedError or call self.fail() in tests. - Standardize the no-coverage pragma - Add a few pragmas where coverage varies across versions/implementations, mostly for the sake of tox (travis should hit them all). * Convert tox to run the coverage command, like travis. A follow up should have it produce coverage for all python versions/implementations. Fixes #87 * Adjust coverage config for py2 only tests; fix typo; finish replacing self with cls
* Test sanity cleanups (#88)Jason Madden2017-06-0816-216/+102
| | | | | | | | | | | | | | | | | | | * Test sanity cleanups Partially addresses #87 - Remove manual lists of tests in favor of loadTestsFromName. This mostly gets all test runners running the same number of tests. - Remove `additional_tests`, which was just duplicating the discovered tests. No modern test runner seems to need it. - Change the two compatibility skip decorators to actually use unitetest skips, which helps with the reporting. * Per @tseaver, drop most test_suite functions. * Port remaining doctest to unittest. * Make the odd tests work on all supported python versions
* Added some comments to describe the management of _v_utility_registrations_cachesimplify-utility-registrations-cacheJim Fulton2017-05-121-0/+7
|
* Simply the caching of utility-registration data. In addition toJim Fulton2017-05-122-43/+16
| | | | | simplification, avoids spurious test failures when checking for leaks in tests with persistent registries.