zodbbrowser


Namezodbbrowser JSON
Version 0.18.0 PyPI version JSON
download
home_pagehttps://github.com/mgedmin/zodbbrowser
SummaryZODB browser
upload_time2025-10-20 17:27:32
maintainerProgrammers of Vilnius
docs_urlNone
authorMarius Gedminas
requires_python>=3.8
licenseZPL 2.1
keywords zodb database interactive history browser
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            ZODB Browser
============

|buildstatus|_ |appveyor|_ |coverage|_

The ZODB browser allows you to inspect persistent objects stored in the ZODB,
view their attributes and historical changes made to them.

.. warning::

  ZODB is based on Python pickles, which are not secure -- they allow
  **arbitrary command execution**.  Do not use zodbbrowser on databases from
  untrusted sources.

.. contents::


Usage as a standalone project
-----------------------------

Install zodbbrowser into a virtualenv alongside your application code ::

  pip install zodbbrowser

Run ``zodbbrowser`` specifying either a filename or a ZEO address ::

  zodbbrowser /path/to/Data.fs
  zodbbrowser --zeo localhost:9080
  zodbbrowser --zeo /path/to/zeosock

If you don't have a spare Data.fs to test with, you can create a new empty
one with just the barest Zope 3 scaffolding in it::

  zodbbrowser empty.fs --rw

Open http://localhost:8070 in a web browser.  Note that there are no
access controls; all other users on the local machine will be able to
access the database contents.


Command-line options
--------------------

Run ``zodbbrowser --help`` to see a full and up-to-date list of
command-line options::

  Usage: zodbbrowser [options] [FILENAME | --zeo ADDRESS]

  Open a ZODB database and start a web-based browser app.

  Options:
    -h, --help        show this help message and exit
    --zeo=ADDRESS     connect to ZEO server instead
    --listen=ADDRESS  specify port (or host:port) to listen on
    --rw              open the database read-write (allows creation of the
                      standard Zope local utilities if missing)


Help!  Broken objects everywhere
--------------------------------

If you don't want to see ``<persistent broken ...>`` everywhere, make sure
your application objects are importable from the Python path.  The easiest way
of doing that is adding zodbbrowser to your application's buildout (or
virtualenv, if you use virtualenvs).  This way your application (or Zope's)
nice __repr__ will also be used.


Online help
-----------

There's a little 'help' link in the bottom-right corner of every page that
describes the user interface in greater detail.


Usage as a plugin
-----------------

Add zodbbrowser to the list of eggs (e.g. in buildout.cfg of your app) and
add this to your site.zcml::

  <include package="zodbbrowser" />

Rerun bin/buildout, restart Zope and append @@zodbbrowser to the end of the
URL to start browsing, e.g. http://localhost:8080/@@zodbbrowser.  Or, if you
still use ZMI (the Zope Management Interface), look for a new menu item
titled "ZODB Browser".


Alternatives
------------

There's a package called z3c.zodbbrowser in the Zope svn repository that
implements the same idea (but without history browsing) as a GUI desktop
application written using wxPython.  It doesn't have a website and was never
released to the Python Package Index.

There's also `dm.historical`__ which provides access to object history from
an interactive Python shell.

__ https://pypi.org/project/dm.historical

If you're not interested in history or objects that cannot be reached
through URL traversal, you can use the built-in object inspector that
comes with Zope 3 / Grok.


Authors
-------

ZODB Browser was developed by Tautvilas Mečinskas (tautvilas@pov.lt) and
Marius Gedminas (marius@pov.lt) from `Programmers of Vilnius
<https://pov.lt/>`_.  It is licenced under the `Zope Public Licence
<https://opensource.org/licenses/ZPL-2.0>`_.

Please report bugs at https://github.com/mgedmin/zodbbrowser/issues.

There's an old bugtracker at https://bugs.launchpad.net/zodbbrowser but I'd
really rather prefer new bugs in GitHub.


.. |buildstatus| image:: https://github.com/mgedmin/zodbbrowser/actions/workflows/build.yml/badge.svg?branch=master
.. _buildstatus: https://github.com/mgedmin/zodbbrowser/actions

.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/zodbbrowser?branch=master&svg=true
.. _appveyor: https://ci.appveyor.com/project/mgedmin/zodbbrowser

.. |coverage| image:: https://coveralls.io/repos/mgedmin/zodbbrowser/badge.svg?branch=master
.. _coverage: https://coveralls.io/r/mgedmin/zodbbrowser


Changes
-------

0.18.0 (2025-10-20)
~~~~~~~~~~~~~~~~~~~

- Add support for Python 3.10 and 3.11.

- Drop support for Python 2.7, 3.6, and 3.7.

- Fix bits of raw markup leaking into <title> tags due to html.parser fixes in
  Python 3.11.14.


0.17.1 (2020-11-25)
~~~~~~~~~~~~~~~~~~~

- Fix interpreter crash (BTree_rangeSearch: Assertion 'highbucket != NULL'
  failed) in historical state computation for large OOBTrees (`GH #33 <https://github.com/mgedmin/zodbbrowser/issues/33>`__).


0.17 (2020-11-24)
~~~~~~~~~~~~~~~~~

- Fix @@zodbbrowser_history when using ZEO (AttributeError:
  'TransactionIterator' object has no attribute 'close', `GH #31 <https://github.com/mgedmin/zodbbrowser/issues/31>`__).

- Fix OOBTree history browsing that regressed in 0.11.0: it was showing only a
  subset of changes (those that touched the OOBTree itself) and wasn't showing
  others (those that touched deeper OOBTreeBuckets).

- Fix TypeError for SampleContainer subclasses that use a non-persistent
  ``__data`` attribute (GH: #18) 

- Make @@zodbbrowser_history give up rendering all the details if it takes
  too long (more than 10 seconds); you can force fast mode by adding ``fast``
  to the query parameters, and you can force full mode by adding ``full`` to
  the query parameters.

- Make it possible to turn off the (slow) history part of @@zodbbrowser
  by adding ``nohist`` to the query parameters.


0.16.2 (2020-11-24)
~~~~~~~~~~~~~~~~~~~

- Incomplete fix for @@zodbbrowser_history when using ZEO, broken since 0.12
  (AttributeError: 'TransactionIterator' object has no attribute 'close',
  `GH #31 <https://github.com/mgedmin/zodbbrowser/issues/31>`__).

- Add support for Python 3.8 and 3.9.

- Drop support for Python 3.5.


0.16.1 (2019-07-30)
~~~~~~~~~~~~~~~~~~~

- Fix system error when an object refers to another object that was
  added in a newer transaction (`GH #29 <https://github.com/mgedmin/zodbbrowser/issues/29>`__).


0.16.0 (2019-07-24)
~~~~~~~~~~~~~~~~~~~

- You can now view disassembled raw pickle data.


0.15.2 (2019-07-11)
~~~~~~~~~~~~~~~~~~~

- Stop depending on the obsolete ZODB3 metapackage from 2012.  Instead
  depend directly on persistent, BTrees, ZODB, and ZEO.


0.15.1 (2019-04-23)
~~~~~~~~~~~~~~~~~~~

- Dropped Python 3.4 support.


0.15.0 (2019-04-02)
~~~~~~~~~~~~~~~~~~~

- Add support for Python 3.7.

- Add support for PyPy and PyPy3.

- Support zope.security proxies in PURE_PYTHON mode.

- Use our custom __repr__ instead of the new persistent one.

- Transaction IDs in generated URLs are now in hex.

- 100% test coverage.


0.14.0 (2017-11-15)
~~~~~~~~~~~~~~~~~~~

- Add support for Python 3.4, 3.5, 3.6.

- Drop support for ZODB 3.8.


0.13.1 (2017-10-06)
~~~~~~~~~~~~~~~~~~~

- Fixed @@zodbbrowser_history with recent versions of ZODB (AttributeError:
  MVCCAdapterInstance doesn't have attribute ``iterator``).


0.13.0 (2016-11-24)
~~~~~~~~~~~~~~~~~~~

- Dropped Python 2.6 support (because ZODB---more specifically BTrees---dropped
  it).

- Fixed rollback to work with ``transaction`` >= 2.0 (transaction notes must be
  Unicode now).


0.12.0 (2015-02-25)
~~~~~~~~~~~~~~~~~~~

- Show request URLs in history record headers (`GH #7 <https://github.com/mgedmin/zodbbrowser/issues/7>`__).
- Automate ZCML loading for Plone (`GH #9 <https://github.com/mgedmin/zodbbrowser/issues/9>`__).
- Fix standalone zodbbrowser when used with Zope 2 packages (`GH #10 <https://github.com/mgedmin/zodbbrowser/issues/10>`__).


0.11.2 (2015-01-09)
~~~~~~~~~~~~~~~~~~~

- Fix AttributeError: __repr__ when encountering instances of old-style
  classes (`GH #6 <https://github.com/mgedmin/zodbbrowser/issues/6>`__).


0.11.1 (2014-12-12)
~~~~~~~~~~~~~~~~~~~

- Updated bootstrap.py (`GH #3 <https://github.com/mgedmin/zodbbrowser/issues/3>`__).
- Fixed @@zodbbrowser_history not seeing new transactions because the
  cache is forever (`GH #4 <https://github.com/mgedmin/zodbbrowser/issues/4>`__).


0.11.0 (2013-05-29)
~~~~~~~~~~~~~~~~~~~

- Dropped Python 2.4 and 2.5 support.
- Migrated source from Launchpad to Github.
- Custom representation of OOBucket objects.
- Slightly better error pages when you specify an invalid/nonexistent OID.
- Handle OrderedContainers with non-persistent ``_order`` or ``_data``
  attributes (I've seen the first in the wild).
- Partial fix for `LP#1185175 <https://pad.lv/1185175>`__: cannot browse objects of classes that use
  zope.interface.implementsOnly.


0.10.4 (2012-12-19)
~~~~~~~~~~~~~~~~~~~

- The previous release was completely broken (`LP#1091716 <https://pad.lv/1091716>`__).  Fix the issue,
  and fix tox.ini to actually run functional tests in addition to unit tests.


0.10.3 (2012-12-06)
~~~~~~~~~~~~~~~~~~~

- Custom representation of persistent objects with no __repr__ to avoid
  showing misleading memory addresses (`LP#1087138 <https://pad.lv/1087138>`__).


0.10.2 (2012-11-28)
~~~~~~~~~~~~~~~~~~~

- Bugfix for POSKeyErrors when viewing BTrees of non-trivial sizes
  (`LP#953480 <https://pad.lv/953480>`__).  This fixes a regression introduced in version 0.10.0.


0.10.1 (2012-11-27)
~~~~~~~~~~~~~~~~~~~

- Standalone app mode uses the Zope exception formatter for easier debugging.

- Bugfix for weird LocationError: '__class__' for some containers
  with custom traversal rules.

- Links to persistent objects in value representations now also use
  hex OIDs.


0.10.0 (2012-02-29)
~~~~~~~~~~~~~~~~~~~

- Browsing of transaction records (@@zodb_history).  Initial implementation so
  far, unbelievably slow when you have large databases (`LP#907900 <https://pad.lv/907900>`__).

- ZODB Browser now avoids writing to the database even in read-write mode.
  Previously when your objects had write-on-read semantics, those writes might
  have snuck in.

- More descriptive page titles (`LP#931115 <https://pad.lv/931115>`__).

- Show object size in the header (`LP#497780 <https://pad.lv/497780>`__).

- Expand truncated values by clicking on them (`LP#931184 <https://pad.lv/931184>`__).

- More user-friendly representation of multiline text values.

- Update maintainer email in setup.py.

- Better error message for "address already in use" errors.


0.9.0 (2011-10-21)
~~~~~~~~~~~~~~~~~~

- Make it possible to use zodbbrowser as a plugin for Zope 2.12.  Previously
  you could only use the standalone zodbbrowser app with Zope 2.12 databases.

- Be more robust against exceptions happening in repr(): show the value as
  "<unrepresentable Foo>" instead of erroring out.

- Make 'python -m zodbbrowser' run the standalone app on Python 2.5 and 2.7.
  Note that 'python -m zodbbrowser.standalone' already worked on Python 2.4
  through 2.7.

- Add an option to specify ZEO storage name (--storage NAME). Contributed by
  Thierry Florac.


0.8.1 (2010-12-18)
~~~~~~~~~~~~~~~~~~

- Show tuple differences more clearly in the history.  (Uses a really dumb
  diff algorithm that just looks for a common prefix/suffix.  Works really
  well when you append to the end, or remove just a single item.  I cannot
  use difflib.SequenceMapper because there's no guarantee tuple items are
  hashable.)

- Make it possible to locate an object by OID: press g, then type the oid
  (hex and both decimal supported; even octal, should you wish to use it).
  You can also find subobjects starting from a given OID by entering paths
  like '0x1234/sub/object'.

- Catch and display unpickling errors of the current state, not just
  historical older states.

- Handle missing interfaces that are directly provided by persistent objects.

  This works for the standalone zodbbrowser application; the zope.interface
  monkey-patch for this is too intrusive to install when using zodbbrowser
  as a plugin.

- Made ``pip install zodbbrowser`` work properly by adding explicit
  dependencies that easy_install would've picked up from setuptools extras.

  Note: if you get ``AttributeError: __file__``, make sure
  zope.app.applicationcontrol is at least version 3.5.9.  Older versions will
  not work with pip.


0.8.0 (2010-11-16)
~~~~~~~~~~~~~~~~~~

- Support all kinds of ZODB databases, not just those used by Zope 3/BlueBream
  apps (`LP#494987 <https://pad.lv/494987>`__).

- Renders tuples and lists that contain large dicts better.

- Remove dependency on zope.dublincore/zope.app.dublincore (`LP#622180 <https://pad.lv/622180>`__).


0.7.2 (2010-08-13)
~~~~~~~~~~~~~~~~~~

- Fixed TypeError: int() can't convert non-string with explicit base
  that could occur if no persistent objects were accessible from the request,
  and no explicit oid was passed.

- Handle proxies better: when type(obj) != obj.__class__, show both.

- Handle ContainedProxy objects with their special persistence scheme.


0.7.1 (2010-03-30)
~~~~~~~~~~~~~~~~~~

- IMPORTANT BUGFIX: don't leave old object states lying around in ZODB object
  cache, which could lead to DATA LOSS (`LP#487243 <https://pad.lv/487243>`__ strikes again, this time
  for OrderedContainers).

  I've audited the code and am fairly confident this bug is now dead dead
  dead.

- Try to discard data modifications when the DB is opened read-only.

- Avoid deprecated zope.testing.doctest.

- Avoid zope.app.securitypolicy; use zope.securitypolicy.


0.7 (2009-12-10)
~~~~~~~~~~~~~~~~

- Stopped using setuptools extras; now easy_install zodbbrowser is sufficient
  to run the standalone app.


0.6.1 (2009-12-09)
~~~~~~~~~~~~~~~~~~

- Compatibility with latest Zope packages, including ZODB 3.9.x.


0.6 (2009-12-07)
~~~~~~~~~~~~~~~~

- Ability to revert object state to an older version.  Requires a read-write
  database connection (i.e. run bin/zodbbrowser --rw).  The button is hidden
  and appears when you're hovering over a transaction entry in the list.
- Collapse long item lists by default.


0.5.1 (2009-11-23)
~~~~~~~~~~~~~~~~~~

- IMPORTANT BUGFIX: don't leave old object states lying around in ZODB object
  cache, which could lead to DATA LOSS (`LP#487243 <https://pad.lv/487243>`__).  This affected OOBTree
  objects.


0.5 (2009-11-23)
~~~~~~~~~~~~~~~~

- Be a bit more tolerant to unpickling errors (show which revision could not
  be loaded instead of breaking the whole page).
- Show full history of OOBTree objects and subobjects (`LP#474334 <https://pad.lv/474334>`__).
- Change background color of links on hover, to make it clear what
  object you'll see when you click, especially when the __repr__ shown
  contains reprs of subobjects.
- Show size of containers next to the "Items" heading (`LP#486910 <https://pad.lv/486910>`__).
- Show size of containers next to their representation, e.g.
  "<persistent.dict.PersistentDict object at 0xad0b3ec> (0 items)".
- Pay attention when __name__ is declared as a class attribute (`LP#484899 <https://pad.lv/484899>`__).
- Show names of directly provided interfaces on objects (i.e. show a better
  representation of pickled zope.interface.Provides objects).
- Pretty-printing of dictionaries (including nested ones).


0.4 (2009-10-11)
~~~~~~~~~~~~~~~~

- @@zodbbrowser oid and tid parameters now accept values in hex format (0x0123)
  Patch by Adam Groszer.


0.3.1 (2009-07-17)
~~~~~~~~~~~~~~~~~~

- Fixed install error on Windows (path cannot end in /).


0.3 (2009-07-17)
~~~~~~~~~~~~~~~~

- First public release

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/mgedmin/zodbbrowser",
    "name": "zodbbrowser",
    "maintainer": "Programmers of Vilnius",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "marius@pov.lt",
    "keywords": "ZODB database interactive history browser",
    "author": "Marius Gedminas",
    "author_email": "marius@pov.lt",
    "download_url": "https://files.pythonhosted.org/packages/29/6f/32951c72c2e8987daeb92d6b26f71b8bbafa130c4843c638a16280a8d87c/zodbbrowser-0.18.0.tar.gz",
    "platform": null,
    "description": "ZODB Browser\n============\n\n|buildstatus|_ |appveyor|_ |coverage|_\n\nThe ZODB browser allows you to inspect persistent objects stored in the ZODB,\nview their attributes and historical changes made to them.\n\n.. warning::\n\n  ZODB is based on Python pickles, which are not secure -- they allow\n  **arbitrary command execution**.  Do not use zodbbrowser on databases from\n  untrusted sources.\n\n.. contents::\n\n\nUsage as a standalone project\n-----------------------------\n\nInstall zodbbrowser into a virtualenv alongside your application code ::\n\n  pip install zodbbrowser\n\nRun ``zodbbrowser`` specifying either a filename or a ZEO address ::\n\n  zodbbrowser /path/to/Data.fs\n  zodbbrowser --zeo localhost:9080\n  zodbbrowser --zeo /path/to/zeosock\n\nIf you don't have a spare Data.fs to test with, you can create a new empty\none with just the barest Zope 3 scaffolding in it::\n\n  zodbbrowser empty.fs --rw\n\nOpen http://localhost:8070 in a web browser.  Note that there are no\naccess controls; all other users on the local machine will be able to\naccess the database contents.\n\n\nCommand-line options\n--------------------\n\nRun ``zodbbrowser --help`` to see a full and up-to-date list of\ncommand-line options::\n\n  Usage: zodbbrowser [options] [FILENAME | --zeo ADDRESS]\n\n  Open a ZODB database and start a web-based browser app.\n\n  Options:\n    -h, --help        show this help message and exit\n    --zeo=ADDRESS     connect to ZEO server instead\n    --listen=ADDRESS  specify port (or host:port) to listen on\n    --rw              open the database read-write (allows creation of the\n                      standard Zope local utilities if missing)\n\n\nHelp!  Broken objects everywhere\n--------------------------------\n\nIf you don't want to see ``<persistent broken ...>`` everywhere, make sure\nyour application objects are importable from the Python path.  The easiest way\nof doing that is adding zodbbrowser to your application's buildout (or\nvirtualenv, if you use virtualenvs).  This way your application (or Zope's)\nnice __repr__ will also be used.\n\n\nOnline help\n-----------\n\nThere's a little 'help' link in the bottom-right corner of every page that\ndescribes the user interface in greater detail.\n\n\nUsage as a plugin\n-----------------\n\nAdd zodbbrowser to the list of eggs (e.g. in buildout.cfg of your app) and\nadd this to your site.zcml::\n\n  <include package=\"zodbbrowser\" />\n\nRerun bin/buildout, restart Zope and append @@zodbbrowser to the end of the\nURL to start browsing, e.g. http://localhost:8080/@@zodbbrowser.  Or, if you\nstill use ZMI (the Zope Management Interface), look for a new menu item\ntitled \"ZODB Browser\".\n\n\nAlternatives\n------------\n\nThere's a package called z3c.zodbbrowser in the Zope svn repository that\nimplements the same idea (but without history browsing) as a GUI desktop\napplication written using wxPython.  It doesn't have a website and was never\nreleased to the Python Package Index.\n\nThere's also `dm.historical`__ which provides access to object history from\nan interactive Python shell.\n\n__ https://pypi.org/project/dm.historical\n\nIf you're not interested in history or objects that cannot be reached\nthrough URL traversal, you can use the built-in object inspector that\ncomes with Zope 3 / Grok.\n\n\nAuthors\n-------\n\nZODB Browser was developed by Tautvilas Me\u010dinskas (tautvilas@pov.lt) and\nMarius Gedminas (marius@pov.lt) from `Programmers of Vilnius\n<https://pov.lt/>`_.  It is licenced under the `Zope Public Licence\n<https://opensource.org/licenses/ZPL-2.0>`_.\n\nPlease report bugs at https://github.com/mgedmin/zodbbrowser/issues.\n\nThere's an old bugtracker at https://bugs.launchpad.net/zodbbrowser but I'd\nreally rather prefer new bugs in GitHub.\n\n\n.. |buildstatus| image:: https://github.com/mgedmin/zodbbrowser/actions/workflows/build.yml/badge.svg?branch=master\n.. _buildstatus: https://github.com/mgedmin/zodbbrowser/actions\n\n.. |appveyor| image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/zodbbrowser?branch=master&svg=true\n.. _appveyor: https://ci.appveyor.com/project/mgedmin/zodbbrowser\n\n.. |coverage| image:: https://coveralls.io/repos/mgedmin/zodbbrowser/badge.svg?branch=master\n.. _coverage: https://coveralls.io/r/mgedmin/zodbbrowser\n\n\nChanges\n-------\n\n0.18.0 (2025-10-20)\n~~~~~~~~~~~~~~~~~~~\n\n- Add support for Python 3.10 and 3.11.\n\n- Drop support for Python 2.7, 3.6, and 3.7.\n\n- Fix bits of raw markup leaking into <title> tags due to html.parser fixes in\n  Python 3.11.14.\n\n\n0.17.1 (2020-11-25)\n~~~~~~~~~~~~~~~~~~~\n\n- Fix interpreter crash (BTree_rangeSearch: Assertion 'highbucket != NULL'\n  failed) in historical state computation for large OOBTrees (`GH #33 <https://github.com/mgedmin/zodbbrowser/issues/33>`__).\n\n\n0.17 (2020-11-24)\n~~~~~~~~~~~~~~~~~\n\n- Fix @@zodbbrowser_history when using ZEO (AttributeError:\n  'TransactionIterator' object has no attribute 'close', `GH #31 <https://github.com/mgedmin/zodbbrowser/issues/31>`__).\n\n- Fix OOBTree history browsing that regressed in 0.11.0: it was showing only a\n  subset of changes (those that touched the OOBTree itself) and wasn't showing\n  others (those that touched deeper OOBTreeBuckets).\n\n- Fix TypeError for SampleContainer subclasses that use a non-persistent\n  ``__data`` attribute (GH: #18) \n\n- Make @@zodbbrowser_history give up rendering all the details if it takes\n  too long (more than 10 seconds); you can force fast mode by adding ``fast``\n  to the query parameters, and you can force full mode by adding ``full`` to\n  the query parameters.\n\n- Make it possible to turn off the (slow) history part of @@zodbbrowser\n  by adding ``nohist`` to the query parameters.\n\n\n0.16.2 (2020-11-24)\n~~~~~~~~~~~~~~~~~~~\n\n- Incomplete fix for @@zodbbrowser_history when using ZEO, broken since 0.12\n  (AttributeError: 'TransactionIterator' object has no attribute 'close',\n  `GH #31 <https://github.com/mgedmin/zodbbrowser/issues/31>`__).\n\n- Add support for Python 3.8 and 3.9.\n\n- Drop support for Python 3.5.\n\n\n0.16.1 (2019-07-30)\n~~~~~~~~~~~~~~~~~~~\n\n- Fix system error when an object refers to another object that was\n  added in a newer transaction (`GH #29 <https://github.com/mgedmin/zodbbrowser/issues/29>`__).\n\n\n0.16.0 (2019-07-24)\n~~~~~~~~~~~~~~~~~~~\n\n- You can now view disassembled raw pickle data.\n\n\n0.15.2 (2019-07-11)\n~~~~~~~~~~~~~~~~~~~\n\n- Stop depending on the obsolete ZODB3 metapackage from 2012.  Instead\n  depend directly on persistent, BTrees, ZODB, and ZEO.\n\n\n0.15.1 (2019-04-23)\n~~~~~~~~~~~~~~~~~~~\n\n- Dropped Python 3.4 support.\n\n\n0.15.0 (2019-04-02)\n~~~~~~~~~~~~~~~~~~~\n\n- Add support for Python 3.7.\n\n- Add support for PyPy and PyPy3.\n\n- Support zope.security proxies in PURE_PYTHON mode.\n\n- Use our custom __repr__ instead of the new persistent one.\n\n- Transaction IDs in generated URLs are now in hex.\n\n- 100% test coverage.\n\n\n0.14.0 (2017-11-15)\n~~~~~~~~~~~~~~~~~~~\n\n- Add support for Python 3.4, 3.5, 3.6.\n\n- Drop support for ZODB 3.8.\n\n\n0.13.1 (2017-10-06)\n~~~~~~~~~~~~~~~~~~~\n\n- Fixed @@zodbbrowser_history with recent versions of ZODB (AttributeError:\n  MVCCAdapterInstance doesn't have attribute ``iterator``).\n\n\n0.13.0 (2016-11-24)\n~~~~~~~~~~~~~~~~~~~\n\n- Dropped Python 2.6 support (because ZODB---more specifically BTrees---dropped\n  it).\n\n- Fixed rollback to work with ``transaction`` >= 2.0 (transaction notes must be\n  Unicode now).\n\n\n0.12.0 (2015-02-25)\n~~~~~~~~~~~~~~~~~~~\n\n- Show request URLs in history record headers (`GH #7 <https://github.com/mgedmin/zodbbrowser/issues/7>`__).\n- Automate ZCML loading for Plone (`GH #9 <https://github.com/mgedmin/zodbbrowser/issues/9>`__).\n- Fix standalone zodbbrowser when used with Zope 2 packages (`GH #10 <https://github.com/mgedmin/zodbbrowser/issues/10>`__).\n\n\n0.11.2 (2015-01-09)\n~~~~~~~~~~~~~~~~~~~\n\n- Fix AttributeError: __repr__ when encountering instances of old-style\n  classes (`GH #6 <https://github.com/mgedmin/zodbbrowser/issues/6>`__).\n\n\n0.11.1 (2014-12-12)\n~~~~~~~~~~~~~~~~~~~\n\n- Updated bootstrap.py (`GH #3 <https://github.com/mgedmin/zodbbrowser/issues/3>`__).\n- Fixed @@zodbbrowser_history not seeing new transactions because the\n  cache is forever (`GH #4 <https://github.com/mgedmin/zodbbrowser/issues/4>`__).\n\n\n0.11.0 (2013-05-29)\n~~~~~~~~~~~~~~~~~~~\n\n- Dropped Python 2.4 and 2.5 support.\n- Migrated source from Launchpad to Github.\n- Custom representation of OOBucket objects.\n- Slightly better error pages when you specify an invalid/nonexistent OID.\n- Handle OrderedContainers with non-persistent ``_order`` or ``_data``\n  attributes (I've seen the first in the wild).\n- Partial fix for `LP#1185175 <https://pad.lv/1185175>`__: cannot browse objects of classes that use\n  zope.interface.implementsOnly.\n\n\n0.10.4 (2012-12-19)\n~~~~~~~~~~~~~~~~~~~\n\n- The previous release was completely broken (`LP#1091716 <https://pad.lv/1091716>`__).  Fix the issue,\n  and fix tox.ini to actually run functional tests in addition to unit tests.\n\n\n0.10.3 (2012-12-06)\n~~~~~~~~~~~~~~~~~~~\n\n- Custom representation of persistent objects with no __repr__ to avoid\n  showing misleading memory addresses (`LP#1087138 <https://pad.lv/1087138>`__).\n\n\n0.10.2 (2012-11-28)\n~~~~~~~~~~~~~~~~~~~\n\n- Bugfix for POSKeyErrors when viewing BTrees of non-trivial sizes\n  (`LP#953480 <https://pad.lv/953480>`__).  This fixes a regression introduced in version 0.10.0.\n\n\n0.10.1 (2012-11-27)\n~~~~~~~~~~~~~~~~~~~\n\n- Standalone app mode uses the Zope exception formatter for easier debugging.\n\n- Bugfix for weird LocationError: '__class__' for some containers\n  with custom traversal rules.\n\n- Links to persistent objects in value representations now also use\n  hex OIDs.\n\n\n0.10.0 (2012-02-29)\n~~~~~~~~~~~~~~~~~~~\n\n- Browsing of transaction records (@@zodb_history).  Initial implementation so\n  far, unbelievably slow when you have large databases (`LP#907900 <https://pad.lv/907900>`__).\n\n- ZODB Browser now avoids writing to the database even in read-write mode.\n  Previously when your objects had write-on-read semantics, those writes might\n  have snuck in.\n\n- More descriptive page titles (`LP#931115 <https://pad.lv/931115>`__).\n\n- Show object size in the header (`LP#497780 <https://pad.lv/497780>`__).\n\n- Expand truncated values by clicking on them (`LP#931184 <https://pad.lv/931184>`__).\n\n- More user-friendly representation of multiline text values.\n\n- Update maintainer email in setup.py.\n\n- Better error message for \"address already in use\" errors.\n\n\n0.9.0 (2011-10-21)\n~~~~~~~~~~~~~~~~~~\n\n- Make it possible to use zodbbrowser as a plugin for Zope 2.12.  Previously\n  you could only use the standalone zodbbrowser app with Zope 2.12 databases.\n\n- Be more robust against exceptions happening in repr(): show the value as\n  \"<unrepresentable Foo>\" instead of erroring out.\n\n- Make 'python -m zodbbrowser' run the standalone app on Python 2.5 and 2.7.\n  Note that 'python -m zodbbrowser.standalone' already worked on Python 2.4\n  through 2.7.\n\n- Add an option to specify ZEO storage name (--storage NAME). Contributed by\n  Thierry Florac.\n\n\n0.8.1 (2010-12-18)\n~~~~~~~~~~~~~~~~~~\n\n- Show tuple differences more clearly in the history.  (Uses a really dumb\n  diff algorithm that just looks for a common prefix/suffix.  Works really\n  well when you append to the end, or remove just a single item.  I cannot\n  use difflib.SequenceMapper because there's no guarantee tuple items are\n  hashable.)\n\n- Make it possible to locate an object by OID: press g, then type the oid\n  (hex and both decimal supported; even octal, should you wish to use it).\n  You can also find subobjects starting from a given OID by entering paths\n  like '0x1234/sub/object'.\n\n- Catch and display unpickling errors of the current state, not just\n  historical older states.\n\n- Handle missing interfaces that are directly provided by persistent objects.\n\n  This works for the standalone zodbbrowser application; the zope.interface\n  monkey-patch for this is too intrusive to install when using zodbbrowser\n  as a plugin.\n\n- Made ``pip install zodbbrowser`` work properly by adding explicit\n  dependencies that easy_install would've picked up from setuptools extras.\n\n  Note: if you get ``AttributeError: __file__``, make sure\n  zope.app.applicationcontrol is at least version 3.5.9.  Older versions will\n  not work with pip.\n\n\n0.8.0 (2010-11-16)\n~~~~~~~~~~~~~~~~~~\n\n- Support all kinds of ZODB databases, not just those used by Zope 3/BlueBream\n  apps (`LP#494987 <https://pad.lv/494987>`__).\n\n- Renders tuples and lists that contain large dicts better.\n\n- Remove dependency on zope.dublincore/zope.app.dublincore (`LP#622180 <https://pad.lv/622180>`__).\n\n\n0.7.2 (2010-08-13)\n~~~~~~~~~~~~~~~~~~\n\n- Fixed TypeError: int() can't convert non-string with explicit base\n  that could occur if no persistent objects were accessible from the request,\n  and no explicit oid was passed.\n\n- Handle proxies better: when type(obj) != obj.__class__, show both.\n\n- Handle ContainedProxy objects with their special persistence scheme.\n\n\n0.7.1 (2010-03-30)\n~~~~~~~~~~~~~~~~~~\n\n- IMPORTANT BUGFIX: don't leave old object states lying around in ZODB object\n  cache, which could lead to DATA LOSS (`LP#487243 <https://pad.lv/487243>`__ strikes again, this time\n  for OrderedContainers).\n\n  I've audited the code and am fairly confident this bug is now dead dead\n  dead.\n\n- Try to discard data modifications when the DB is opened read-only.\n\n- Avoid deprecated zope.testing.doctest.\n\n- Avoid zope.app.securitypolicy; use zope.securitypolicy.\n\n\n0.7 (2009-12-10)\n~~~~~~~~~~~~~~~~\n\n- Stopped using setuptools extras; now easy_install zodbbrowser is sufficient\n  to run the standalone app.\n\n\n0.6.1 (2009-12-09)\n~~~~~~~~~~~~~~~~~~\n\n- Compatibility with latest Zope packages, including ZODB 3.9.x.\n\n\n0.6 (2009-12-07)\n~~~~~~~~~~~~~~~~\n\n- Ability to revert object state to an older version.  Requires a read-write\n  database connection (i.e. run bin/zodbbrowser --rw).  The button is hidden\n  and appears when you're hovering over a transaction entry in the list.\n- Collapse long item lists by default.\n\n\n0.5.1 (2009-11-23)\n~~~~~~~~~~~~~~~~~~\n\n- IMPORTANT BUGFIX: don't leave old object states lying around in ZODB object\n  cache, which could lead to DATA LOSS (`LP#487243 <https://pad.lv/487243>`__).  This affected OOBTree\n  objects.\n\n\n0.5 (2009-11-23)\n~~~~~~~~~~~~~~~~\n\n- Be a bit more tolerant to unpickling errors (show which revision could not\n  be loaded instead of breaking the whole page).\n- Show full history of OOBTree objects and subobjects (`LP#474334 <https://pad.lv/474334>`__).\n- Change background color of links on hover, to make it clear what\n  object you'll see when you click, especially when the __repr__ shown\n  contains reprs of subobjects.\n- Show size of containers next to the \"Items\" heading (`LP#486910 <https://pad.lv/486910>`__).\n- Show size of containers next to their representation, e.g.\n  \"<persistent.dict.PersistentDict object at 0xad0b3ec> (0 items)\".\n- Pay attention when __name__ is declared as a class attribute (`LP#484899 <https://pad.lv/484899>`__).\n- Show names of directly provided interfaces on objects (i.e. show a better\n  representation of pickled zope.interface.Provides objects).\n- Pretty-printing of dictionaries (including nested ones).\n\n\n0.4 (2009-10-11)\n~~~~~~~~~~~~~~~~\n\n- @@zodbbrowser oid and tid parameters now accept values in hex format (0x0123)\n  Patch by Adam Groszer.\n\n\n0.3.1 (2009-07-17)\n~~~~~~~~~~~~~~~~~~\n\n- Fixed install error on Windows (path cannot end in /).\n\n\n0.3 (2009-07-17)\n~~~~~~~~~~~~~~~~\n\n- First public release\n",
    "bugtrack_url": null,
    "license": "ZPL 2.1",
    "summary": "ZODB browser",
    "version": "0.18.0",
    "project_urls": {
        "Homepage": "https://github.com/mgedmin/zodbbrowser"
    },
    "split_keywords": [
        "zodb",
        "database",
        "interactive",
        "history",
        "browser"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ff22f5efed1e80e7239a12eae11faa7a64cb5f5a28cdbd79028d012b37a7b7e1",
                "md5": "85278731beab7040c07b30953d1a411b",
                "sha256": "dfb679aa2348886e05127d86181a42e2a19c3728e9bffc0400a0276214fe76e9"
            },
            "downloads": -1,
            "filename": "zodbbrowser-0.18.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "85278731beab7040c07b30953d1a411b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 112604,
            "upload_time": "2025-10-20T17:27:30",
            "upload_time_iso_8601": "2025-10-20T17:27:30.217279Z",
            "url": "https://files.pythonhosted.org/packages/ff/22/f5efed1e80e7239a12eae11faa7a64cb5f5a28cdbd79028d012b37a7b7e1/zodbbrowser-0.18.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "296f32951c72c2e8987daeb92d6b26f71b8bbafa130c4843c638a16280a8d87c",
                "md5": "d611b651146e5ce7a4b5e0ad242dabf0",
                "sha256": "724112ef48645823be55ac202f5f80b8f0c742518a0dd5868a6f07e3144cce57"
            },
            "downloads": -1,
            "filename": "zodbbrowser-0.18.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d611b651146e5ce7a4b5e0ad242dabf0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 111389,
            "upload_time": "2025-10-20T17:27:32",
            "upload_time_iso_8601": "2025-10-20T17:27:32.266802Z",
            "url": "https://files.pythonhosted.org/packages/29/6f/32951c72c2e8987daeb92d6b26f71b8bbafa130c4843c638a16280a8d87c/zodbbrowser-0.18.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-20 17:27:32",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mgedmin",
    "github_project": "zodbbrowser",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "appveyor": true,
    "tox": true,
    "lcname": "zodbbrowser"
}
        
Elapsed time: 2.93698s