Comments (7)
Sorry for coming in late on this.
What is rational for _p_repr
? This seems to add needless complexity. Why not let subclasses override __repr__
if they want to override __repr__
?
Is there some compelling use case here?
Would the crazyness around acquisition go away if we didn't do the _p_repr
dance?
from persistent.
_p_repr
was originally proposed back in #11 by @jimfulton. I believe it allows subclasses to define a representation for the common case without having to worry about error handling for the uncommon case that the connection has been closed or they otherwise cannot access their persistent state (that's a real problem; my group had defined a workaround).
Overriding __repr__
is a viable option, just as it always has been. It works fine in the case of acquisition, as the Zope/Plone projects have had to demonstrate. Really, _p_repr
doesn't enter the conversation there, except that it would be really nice if the benefits of _p_repr
also happened to work in the case of acquisition. It currently doesn't. I'm not sure there's a way to make it do so (perhaps something in Persistence
? I haven't thought that much about it).
This only comes up because the improved __repr__
in persistent.Persistent
happened to change the MRO of __repr__
in some complex multiple-inheritance classes in Plone; introducing a _p_repr
method (which didn't suffer from multiple inheritance) in a base class could have easily solved the doctest problem in a simple way, but because it doesn't handle acquisition, that didn't work.
from persistent.
Ha ha, Ah, right, dealing with closed connections... I vaguely remember this being a problem. :)
from persistent.
I'm very confused. Is something actually defining _p_repr
and is the problem that this isn't woring as expected?
from persistent.
Was this working and broke with some recent PR?
from persistent.
Acquisition was working for some Zope objects' __repr__
. Because of the complicated way that extension classes are added to the MRO, adding __repr__
to persistent.Persistent
unexpectedly overrode __repr__
for those objects, and the nice workaround of adding a _p_repr
to the base class that defined __repr__
didn't work with acquisition. The only solution we found was to introduce a mixin class that implements __repr__
and explicitly put it at the front of the MRO for the affected classes.
from persistent.
I'll play with this a bit today.
Much thanks for your work on this BTW.
from persistent.
Related Issues (20)
- pypy -m pip install persistent==4.6.0 fails with ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/home/travis/virtualenv/pypy2.7-7.1.1/include/site' HOT 3
- Segfault in persistent 4.6.0 HOT 4
- Install _compat.h HOT 5
- AssertionError clearing PersistentMap not added to connection.
- Two potential reference leaks
- 6.4.6 test test_inst_does_not_conform_to_IExtendedPickleCache fails with latest zope.interface
- RTD out of date, needs new webhook HOT 2
- PyPy: Sweeping the cache may need to call gc.collect()
- AttributeError: '_WeakValueDictionary' object has no attribute '_addr_to_oid' HOT 1
- Issue in macOS binary wheel for 4.6.4/3.8: Illegal Instruction (my fault, but needs a change to prevent in the future) HOT 4
- C/Python difference: Setting __class__ activates in C, doesn't activate in Python HOT 4
- Move Mac and manylinux builds to GitHub Actions HOT 3
- Move to the src/ layout? HOT 2
- CI breakage: docs builds fail on GHA (yes, it's repoze.sphinx.autointerface)
- RTD should publish the changelog
- Building a wheel fails on GHA for PyPy2 on Windows
- 4.9.0: pytest is failing HOT 1
- 4.9.0: sphinx warnings `reference target not found`
- macOS: symbol not found in flat namespace '_ffi_prep_closure' HOT 2
- The python 3.11 wheel for linux x86 is missing HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from persistent.