Hello community, here is the log from the commit of package python-transaction for openSUSE:Factory checked in at 2012-06-10 20:19:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-transaction (Old) and /work/SRC/openSUSE:Factory/.python-transaction.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-transaction", Maintainer is "" Changes: -------- --- /work/SRC/openSUSE:Factory/python-transaction/python-transaction.changes 2012-03-09 21:26:53.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python-transaction.new/python-transaction.changes 2012-06-10 21:52:20.000000000 +0200 @@ -1,0 +2,20 @@ +Wed Jun 6 16:07:36 UTC 2012 - os-...@jacraig.com + +- Update to 1.3.0: + * Added Sphinx API docuementation. + * Added explicit support for PyPy. + * Dropped use of Python3-incompatible zope.interface.implements class advisor + in favor of zope.interface.implementer class decorator. + * Added support for continuous integration using tox and jenkins. + * Added setup.py docs alias (installs Sphinx and dependencies). + * Added setup.py dev alias (runs setup.py develop plus installs nose and + coverage). + * Python 3.3 compatibility. + * Fix "for attempt in transaction.attempts(x)" machinery, which would not + retry a transaction if its implicit call to .commit() itself raised a + transient error. Symptom: seeing conflict errors even though you thought + you were retrying some number of times via the "attempts" machinery (the + first attempt to generate an exception during commit would cause that + exception to be raised). + +------------------------------------------------------------------- Old: ---- transaction-1.2.0.tar.gz New: ---- transaction-1.3.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-transaction.spec ++++++ --- /var/tmp/diff_new_pack.dqnhxx/_old 2012-06-10 21:52:21.000000000 +0200 +++ /var/tmp/diff_new_pack.dqnhxx/_new 2012-06-10 21:52:21.000000000 +0200 @@ -11,13 +11,13 @@ # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# + # Please submit bugfixes or comments via http://bugs.opensuse.org/ # Name: python-transaction -Version: 1.2.0 +Version: 1.3.0 Release: 0 Summary: Transaction management for Python License: ZPL-2.1 ++++++ transaction-1.2.0.tar.gz -> transaction-1.3.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/.bzrignore new/transaction-1.3.0/.bzrignore --- old/transaction-1.2.0/.bzrignore 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/.bzrignore 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,7 @@ +.tox +__pycache__ +*.egg-info +.coverage +nosetests.xml +coverage.xml +_build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/CHANGES.txt new/transaction-1.3.0/CHANGES.txt --- old/transaction-1.2.0/CHANGES.txt 2011-12-05 22:11:15.000000000 +0100 +++ new/transaction-1.3.0/CHANGES.txt 2012-05-16 23:17:56.000000000 +0200 @@ -1,6 +1,32 @@ Changes ======= +1.3.0 (2012-05-16) +------------------ + +- Added Sphinx API docuementation. + +- Added explicit support for PyPy. + +- Dropped use of Python3-impatible ``zope.interface.implements`` class + advisor in favor of ``zope.interface.implementer`` class decorator. + +- Added support for continuous integration using ``tox`` and ``jenkins``. + +- Added ``setup.py docs`` alias (installs ``Sphinx`` and dependencies). + +- Added ``setup.py dev`` alias (runs ``setup.py develop`` plus installs + ``nose`` and ``coverage``). + +- Python 3.3 compatibility. + +- Fix "for attempt in transaction.attempts(x)" machinery, which would not + retry a transaction if its implicit call to ``.commit()`` itself raised a + transient error. Symptom: seeing conflict errors even though you thought + you were retrying some number of times via the "attempts" machinery (the + first attempt to generate an exception during commit would cause that + exception to be raised). + 1.2.0 (2011-12-05) ------------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/PKG-INFO new/transaction-1.3.0/PKG-INFO --- old/transaction-1.2.0/PKG-INFO 2011-12-05 22:14:39.000000000 +0100 +++ new/transaction-1.3.0/PKG-INFO 2012-05-16 23:18:26.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: transaction -Version: 1.2.0 +Version: 1.3.0 Summary: Transaction management for Python Home-page: http://www.zope.org/Products/ZODB Author: Zope Corporation @@ -21,6 +21,32 @@ Changes ======= + 1.3.0 (2012-05-16) + ------------------ + + - Added Sphinx API docuementation. + + - Added explicit support for PyPy. + + - Dropped use of Python3-impatible ``zope.interface.implements`` class + advisor in favor of ``zope.interface.implementer`` class decorator. + + - Added support for continuous integration using ``tox`` and ``jenkins``. + + - Added ``setup.py docs`` alias (installs ``Sphinx`` and dependencies). + + - Added ``setup.py dev`` alias (runs ``setup.py develop`` plus installs + ``nose`` and ``coverage``). + + - Python 3.3 compatibility. + + - Fix "for attempt in transaction.attempts(x)" machinery, which would not + retry a transaction if its implicit call to ``.commit()`` itself raised a + transient error. Symptom: seeing conflict errors even though you thought + you were retrying some number of times via the "attempts" machinery (the + first attempt to generate an exception during commit would cause that + exception to be raised). + 1.2.0 (2011-12-05) ------------------ @@ -124,3 +150,4 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/docs/Makefile new/transaction-1.3.0/docs/Makefile --- old/transaction-1.2.0/docs/Makefile 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/docs/Makefile 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make <target>' where <target> is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/transaction.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/transaction.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/transaction" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/transaction" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/docs/api.rst new/transaction-1.3.0/docs/api.rst --- old/transaction-1.2.0/docs/api.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/docs/api.rst 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,85 @@ +:mod:`transaction` API Reference +================================ + +Interfaces +---------- + +.. module:: transaction.interfaces + +.. autointerface:: ITransactionManager + :members: + :member-order: bysource + +.. autointerface:: ITransaction + :members: + :member-order: bysource + +.. autointerface:: IDataManager + :members: + :member-order: bysource + +.. autointerface:: ISavepointDataManager + :members: + :member-order: bysource + +.. autointerface:: IDataManagerSavepoint + :members: + :member-order: bysource + +.. autointerface:: ISavepoint + :members: + :member-order: bysource + +.. autoclass:: InvalidSavepointRollbackError + :members: + :member-order: bysource + +.. autointerface:: ISynchronizer + :members: + :member-order: bysource + +.. autoclass:: TransactionError + :members: + :member-order: bysource + +.. autoclass:: TransactionFailedError + :members: + :member-order: bysource + +.. autoclass:: DoomedTransaction + :members: + :member-order: bysource + +.. autoclass:: TransientError + :members: + :member-order: bysource + +API Objects +----------- + +.. module:: transaction._transaction + +.. autoclass:: Transaction + :members: + :member-order: bysource + +.. autoclass:: Savepoint + :members: + :member-order: bysource + +.. module:: transaction._manager + +.. autoclass:: TransactionManager + :members: + :member-order: bysource + + .. automethod:: __enter__ + + Alias for :meth:`get` + + .. automethod:: __exit__ + + On error, aborts the current transaction. Otherwise, commits. +.. autoclass:: ThreadTransactionManager + :members: + :member-order: bysource diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/docs/conf.py new/transaction-1.3.0/docs/conf.py --- old/transaction-1.2.0/docs/conf.py 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/docs/conf.py 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,248 @@ +# -*- coding: utf-8 -*- +# +# transaction documentation build configuration file, created by +# sphinx-quickstart on Wed May 16 16:43:53 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys, os + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.doctest', + 'sphinx.ext.todo', + 'sphinx.ext.viewcode', + 'repoze.sphinx.autointerface', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'transaction' +copyright = u'2012, Zope Foundation Contributors' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = '1.2' +# The full version, including alpha/beta/rc tags. +release = '1.2' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# "<project> v<release> documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a <link> tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'transactiondoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'transaction.tex', u'transaction Documentation', + u'Zope Foundation Contributors', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'transaction', u'transaction Documentation', + [u'Zope Foundation Contributors'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'transaction', u'transaction Documentation', + u'Zope Foundation Contributors', 'transaction', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/docs/index.rst new/transaction-1.3.0/docs/index.rst --- old/transaction-1.2.0/docs/index.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/docs/index.rst 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,18 @@ +:mod:`transaction` Documentation +================================ + +Contents: + +.. toctree:: + :maxdepth: 2 + + api + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/docs/make.bat new/transaction-1.3.0/docs/make.bat --- old/transaction-1.2.0/docs/make.bat 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/docs/make.bat 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,190 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=_build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . +set I18NSPHINXOPTS=%SPHINXOPTS% . +if NOT "%PAPER%" == "" ( + set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% + set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% +) + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^<target^>` where ^<target^> is one of + echo. html to make standalone HTML files + echo. dirhtml to make HTML files named index.html in directories + echo. singlehtml to make a single large HTML file + echo. pickle to make pickle files + echo. json to make JSON files + echo. htmlhelp to make HTML files and a HTML help project + echo. qthelp to make HTML files and a qthelp project + echo. devhelp to make HTML files and a Devhelp project + echo. epub to make an epub + echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter + echo. text to make text files + echo. man to make manual pages + echo. texinfo to make Texinfo files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "dirhtml" ( + %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. + goto end +) + +if "%1" == "singlehtml" ( + %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. + goto end +) + +if "%1" == "pickle" ( + %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the pickle files. + goto end +) + +if "%1" == "json" ( + %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can process the JSON files. + goto end +) + +if "%1" == "htmlhelp" ( + %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run HTML Help Workshop with the ^ +.hhp project file in %BUILDDIR%/htmlhelp. + goto end +) + +if "%1" == "qthelp" ( + %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; now you can run "qcollectiongenerator" with the ^ +.qhcp project file in %BUILDDIR%/qthelp, like this: + echo.^> qcollectiongenerator %BUILDDIR%\qthelp\transaction.qhcp + echo.To view the help file: + echo.^> assistant -collectionFile %BUILDDIR%\qthelp\transaction.ghc + goto end +) + +if "%1" == "devhelp" ( + %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. + goto end +) + +if "%1" == "epub" ( + %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The epub file is in %BUILDDIR%/epub. + goto end +) + +if "%1" == "latex" ( + %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex + if errorlevel 1 exit /b 1 + echo. + echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. + goto end +) + +if "%1" == "text" ( + %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The text files are in %BUILDDIR%/text. + goto end +) + +if "%1" == "man" ( + %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The manual pages are in %BUILDDIR%/man. + goto end +) + +if "%1" == "texinfo" ( + %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +if "%1" == "doctest" ( + %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest + if errorlevel 1 exit /b 1 + echo. + echo.Testing of doctests in the sources finished, look at the ^ +results in %BUILDDIR%/doctest/output.txt. + goto end +) + +:end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/setup.cfg new/transaction-1.3.0/setup.cfg --- old/transaction-1.2.0/setup.cfg 2011-12-05 22:14:39.000000000 +0100 +++ new/transaction-1.3.0/setup.cfg 2012-05-16 23:18:26.000000000 +0200 @@ -3,3 +3,13 @@ tag_date = 0 tag_svn_revision = 0 +[nosetests] +cover-package = transaction +nocapture = 1 +where = transaction +cover-erase = 1 + +[aliases] +dev = develop easy_install transaction[testing] +docs = develop easy_install transaction[docs] + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/setup.py new/transaction-1.3.0/setup.py --- old/transaction-1.2.0/setup.py 2011-12-05 22:11:24.000000000 +0100 +++ new/transaction-1.3.0/setup.py 2012-05-16 23:17:56.000000000 +0200 @@ -12,7 +12,7 @@ # ############################################################################## -__version__ = '1.2.0' +__version__ = '1.3.0' import os @@ -41,6 +41,7 @@ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", ], author="Zope Corporation", author_email="zodb-...@zope.org", @@ -57,6 +58,10 @@ install_requires=[ 'zope.interface', ], + extras_require = { + 'docs': ['Sphinx'], + 'testing': ['nose', 'coverage'], + }, entry_points = """\ """ ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/tox.ini new/transaction-1.3.0/tox.ini --- old/transaction-1.2.0/tox.ini 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/tox.ini 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,35 @@ +[tox] +envlist = +# Jython support pending 2.7 support, due 2012-07-15 or so. See: +# http://fwierzbicki.blogspot.com/2012/03/adconion-to-fund-jython-27.html +# py26,py27,py32,pypy,jython,coverage + py26,py27,py32,pypy,coverage,docs + +[testenv] +commands = + python setup.py test -q +deps = transaction + +[testenv:jython] +commands = + jython setup.py test -q + +[testenv:coverage] +basepython = + python2.6 +commands = + nosetests --with-xunit --with-xcoverage +deps = + nose + coverage + nosexcover + +[testenv:docs] +basepython = + python2.6 +commands = + sphinx-build -b html -d docs/_build/doctrees docs docs/_build/html + sphinx-build -b doctest -d docs/_build/doctrees docs docs/_build/doctest +deps = + Sphinx + repoze.sphinx.autointerface diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/_manager.py new/transaction-1.3.0/transaction/_manager.py --- old/transaction-1.2.0/transaction/_manager.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/_manager.py 2012-05-16 23:16:00.000000000 +0200 @@ -16,12 +16,15 @@ It coordinates application code and resource managers, so that they are associated with the right transaction. """ +import threading + +from zope.interface import implementer from transaction.weakset import WeakSet from transaction._transaction import Transaction +from transaction.interfaces import ITransactionManager from transaction.interfaces import TransientError -import threading # We have to remember sets of synch objects, especially Connections. # But we don't want mere registration with a transaction manager to @@ -49,6 +52,7 @@ # so that Transactions "see" synchronizers that get registered after the # Transaction object is constructed. +@implementer(ITransactionManager) class TransactionManager(object): def __init__(self): @@ -56,6 +60,8 @@ self._synchs = WeakSet() def begin(self): + """ See ITransactionManager. + """ if self._txn is not None: self._txn.abort() txn = self._txn = Transaction(self._synchs, self) @@ -65,6 +71,8 @@ __enter__ = lambda self: self.begin() def get(self): + """ See ITransactionManager. + """ if self._txn is None: self._txn = Transaction(self._synchs, self) return self._txn @@ -74,21 +82,33 @@ self._txn = None def registerSynch(self, synch): + """ See ITransactionManager. + """ self._synchs.add(synch) def unregisterSynch(self, synch): + """ See ITransactionManager. + """ self._synchs.remove(synch) def isDoomed(self): + """ See ITransactionManager. + """ return self.get().isDoomed() def doom(self): + """ See ITransactionManager. + """ return self.get().doom() def commit(self): + """ See ITransactionManager. + """ return self.get().commit() def abort(self): + """ See ITransactionManager. + """ return self.get().abort() def __exit__(self, t, v, tb): @@ -98,6 +118,8 @@ self.abort() def savepoint(self, optimistic=False): + """ See ITransactionManager. + """ return self.get().savepoint(optimistic) def attempts(self, number=3): @@ -135,8 +157,15 @@ def __exit__(self, t, v, tb): if v is None: - self.manager.commit() + try: + self.manager.commit() + except TransientError: + self.manager.abort() + return True # swallow + except: + self.manager.abort() + return False # don't swallow else: retry = self.manager._retryable(t, v) self.manager.abort() - return retry + return retry # swallow exception if True, else don't swallow diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/_transaction.py new/transaction-1.3.0/transaction/_transaction.py --- old/transaction-1.2.0/transaction/_transaction.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/_transaction.py 2012-05-16 23:16:00.000000000 +0200 @@ -103,7 +103,7 @@ import weakref import traceback -from zope import interface +from zope.interface import implementer from transaction.compat import reraise from transaction.compat import get_thread_ident @@ -134,10 +134,10 @@ # to commit or join this transaction will raise TransactionFailedError. COMMITFAILED = "Commit failed" +@implementer(interfaces.ITransaction, + interfaces.ITransactionDeprecated) class Transaction(object): - interface.implements(interfaces.ITransaction, - interfaces.ITransactionDeprecated) # Assign an index to each savepoint so we can invalidate later savepoints @@ -192,9 +192,13 @@ self._after_commit = [] def isDoomed(self): + """ See ITransaction. + """ return self.status is Status.DOOMED def doom(self): + """ See ITransaction. + """ if self.status is not Status.DOOMED: if self.status is not Status.ACTIVE: # should not doom transactions in the middle, @@ -212,6 +216,8 @@ self._failure_traceback.getvalue()) def join(self, resource): + """ See ITransaction. + """ if self.status is Status.COMMITFAILED: self._prior_operation_failed() # doesn't return @@ -253,6 +259,8 @@ self._resources = [r for r in self._resources if r is not resource] def savepoint(self, optimistic=False): + """ See ITransaction. + """ if self.status is Status.COMMITFAILED: self._prior_operation_failed() # doesn't return, it raises @@ -289,6 +297,8 @@ def register(self, obj): + """ See ITransaction. + """ # The old way of registering transaction participants. # # register() is passed either a persisent object or a @@ -314,6 +324,8 @@ adapter.objects.append(obj) def commit(self): + """ See ITransaction. + """ if self.status is Status.DOOMED: raise interfaces.DoomedTransaction( 'transaction doomed, cannot commit') @@ -381,9 +393,13 @@ def getBeforeCommitHooks(self): + """ See ITransaction. + """ return iter(self._before_commit) def addBeforeCommitHook(self, hook, args=(), kws=None): + """ See ITransaction. + """ if kws is None: kws = {} self._before_commit.append((hook, tuple(args), kws)) @@ -398,9 +414,13 @@ self._before_commit = [] def getAfterCommitHooks(self): + """ See ITransaction. + """ return iter(self._after_commit) def addAfterCommitHook(self, hook, args=(), kws=None): + """ See ITransaction. + """ if kws is None: kws = {} self._after_commit.append((hook, tuple(args), kws)) @@ -491,6 +511,8 @@ rm, exc_info=sys.exc_info()) def abort(self): + """ See ITransaction. + """ if self._savepoint2index: self._invalidate_all_savepoints() @@ -524,6 +546,8 @@ del t, v, tb def note(self, text): + """ See ITransaction. + """ text = text.strip() if self.description: self.description += "\n" + text @@ -531,9 +555,13 @@ self.description = text def setUser(self, user_name, path="/"): + """ See ITransaction. + """ self.user = "%s %s" % (path, user_name) def setExtendedInfo(self, name, value): + """ See ITransaction. + """ self._extension[name] = value # TODO: We need a better name for the adapters. @@ -672,13 +700,13 @@ def sortKey(self): return self._datamanager.sortKey() +@implementer(interfaces.ISavepoint) class Savepoint: """Transaction savepoint. Transaction savepoints coordinate savepoints for data managers participating in a transaction. """ - interface.implements(interfaces.ISavepoint) valid = property(lambda self: self.transaction is not None) @@ -699,6 +727,8 @@ savepoints.append(savepoint) def rollback(self): + """ See ISavepoint. + """ transaction = self.transaction if transaction is None: raise interfaces.InvalidSavepointRollbackError( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/compat.py new/transaction-1.3.0/transaction/compat.py --- old/transaction-1.2.0/transaction/compat.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/compat.py 2012-05-16 23:16:00.000000000 +0200 @@ -78,7 +78,10 @@ if PY3: - from threading import _get_ident as get_thread_ident + try: + from threading import get_ident as get_thread_ident + except ImportError: + from threading import _get_ident as get_thread_ident else: from thread import get_ident as get_thread_ident diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/convenience.txt new/transaction-1.3.0/transaction/tests/convenience.txt --- old/transaction-1.2.0/transaction/tests/convenience.txt 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/convenience.txt 2012-05-16 23:16:00.000000000 +0200 @@ -27,12 +27,12 @@ >>> dm.last_note 'test 3' - >>> with transaction.manager: + >>> with transaction.manager: #doctest ELLIPSIS ... dm['z'] = 4 ... xxx Traceback (most recent call last): ... - NameError: name 'xxx' is not defined + NameError: ... name 'xxx' is not defined >>> dm['z'] 3 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/doom.txt new/transaction-1.3.0/transaction/tests/doom.txt --- old/transaction-1.2.0/transaction/tests/doom.txt 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/doom.txt 2012-05-16 23:16:00.000000000 +0200 @@ -26,9 +26,9 @@ To see how it works we first need to create a stub data manager: >>> from transaction.interfaces import IDataManager - >>> from zope.interface import implements - >>> class DataManager: - ... implements(IDataManager) + >>> from zope.interface import implementer + >>> @implementer(IDataManager) + ... class DataManager: ... def __init__(self): ... self.attr_counter = {} ... def __getattr__(self, name): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/savepoint.txt new/transaction-1.3.0/transaction/tests/savepoint.txt --- old/transaction-1.2.0/transaction/tests/savepoint.txt 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/savepoint.txt 2012-05-16 23:16:00.000000000 +0200 @@ -82,7 +82,7 @@ ... print("%s %s" % ('Updated', name)) ... except Exception as error: ... savepoint.rollback() - ... print("%s %s" % ('Unexpected exception', error)) + ... print("%s" % ('Unexpected exception')) Now let's try applying some entries: @@ -117,7 +117,7 @@ ... ]) Updated bob Updated sally - Unexpected exception unsupported operand type(s) for +=: 'float' and 'str' + Unexpected exception Because the apply_entries used a savepoint for the entire function, it was able to rollback the partial changes without rolling back changes made in the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/savepointsample.py new/transaction-1.3.0/transaction/tests/savepointsample.py --- old/transaction-1.2.0/transaction/tests/savepointsample.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/savepointsample.py 2012-05-16 23:16:00.000000000 +0200 @@ -19,18 +19,16 @@ See savepoint.txt in the transaction package. """ -from zope import interface +from zope.interface import implementer import transaction.interfaces -@interface.implementer(transaction.interfaces.IDataManager) +@implementer(transaction.interfaces.IDataManager) class SampleDataManager(object): """Sample implementation of data manager that doesn't support savepoints This data manager stores named simple values, like strings and numbers. """ - interface.implements(transaction.interfaces.IDataManager) - def __init__(self, transaction_manager=None): if transaction_manager is None: # Use the thread-local transaction manager if none is provided: @@ -162,15 +160,13 @@ # ####################################################################### -@interface.implementer(transaction.interfaces.ISavepointDataManager) +@implementer(transaction.interfaces.ISavepointDataManager) class SampleSavepointDataManager(SampleDataManager): """Sample implementation of a savepoint-supporting data manager This extends the basic data manager with savepoint support. """ - interface.implements(transaction.interfaces.ISavepointDataManager) - def savepoint(self): # When we create the savepoint, we save the existing database state. return SampleSavepoint(self, self.uncommitted.copy()) @@ -184,11 +180,9 @@ # savepoint was done again. IOW, copy() is necessary. self.uncommitted = savepoint.data.copy() -@interface.implementer(transaction.interfaces.IDataManagerSavepoint) +@implementer(transaction.interfaces.IDataManagerSavepoint) class SampleSavepoint: - interface.implements(transaction.interfaces.IDataManagerSavepoint) - def __init__(self, data_manager, data): self.data_manager = data_manager self.data = data diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/test_attempt.py new/transaction-1.3.0/transaction/tests/test_attempt.py --- old/transaction-1.2.0/transaction/tests/test_attempt.py 1970-01-01 01:00:00.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/test_attempt.py 2012-05-16 23:16:00.000000000 +0200 @@ -0,0 +1,85 @@ +import unittest + +class TestAttempt(unittest.TestCase): + def _makeOne(self, manager): + from transaction._manager import Attempt + return Attempt(manager) + + def test___enter__(self): + manager = DummyManager() + inst = self._makeOne(manager) + inst.__enter__() + self.assertTrue(manager.entered) + + def test___exit__no_exc_no_commit_exception(self): + manager = DummyManager() + inst = self._makeOne(manager) + result = inst.__exit__(None, None, None) + self.assertFalse(result) + self.assertTrue(manager.committed) + + def test___exit__no_exc_nonretryable_commit_exception(self): + manager = DummyManager(raise_on_commit=ValueError) + inst = self._makeOne(manager) + result = inst.__exit__(None, None, None) + self.assertFalse(result) + + def test___exit__no_exc_abort_exception_after_nonretryable_commit_exc(self): + manager = DummyManager(raise_on_abort=ValueError, + raise_on_commit=KeyError) + inst = self._makeOne(manager) + self.assertRaises(ValueError, inst.__exit__, None, None, None) + self.assertTrue(manager.committed) + self.assertTrue(manager.aborted) + + def test___exit__no_exc_retryable_commit_exception(self): + from transaction.interfaces import TransientError + manager = DummyManager(raise_on_commit=TransientError) + inst = self._makeOne(manager) + result = inst.__exit__(None, None, None) + self.assertTrue(result) + self.assertTrue(manager.committed) + self.assertTrue(manager.aborted) + + def test___exit__with_exception_value_retryable(self): + from transaction.interfaces import TransientError + manager = DummyManager() + inst = self._makeOne(manager) + result = inst.__exit__(TransientError, TransientError(), None) + self.assertTrue(result) + self.assertFalse(manager.committed) + self.assertTrue(manager.aborted) + + def test___exit__with_exception_value_nonretryable(self): + manager = DummyManager() + inst = self._makeOne(manager) + result = inst.__exit__(KeyError, KeyError(), None) + self.assertFalse(result) + self.assertFalse(manager.committed) + self.assertTrue(manager.aborted) + +class DummyManager(object): + entered = False + committed = False + aborted = False + + def __init__(self, raise_on_commit=None, raise_on_abort=None): + self.raise_on_commit = raise_on_commit + self.raise_on_abort = raise_on_abort + + def _retryable(self, t, v): + from transaction._manager import TransientError + return issubclass(t, TransientError) + + def __enter__(self): + self.entered = True + + def abort(self): + self.aborted = True + if self.raise_on_abort: + raise self.raise_on_abort + + def commit(self): + self.committed = True + if self.raise_on_commit: + raise self.raise_on_commit diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/test_transaction.py new/transaction-1.3.0/transaction/tests/test_transaction.py --- old/transaction-1.2.0/transaction/tests/test_transaction.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/test_transaction.py 2012-05-16 23:16:00.000000000 +0200 @@ -36,7 +36,7 @@ add in tests for objects which are modified multiple times, for example an object that gets modified in multiple sub txns. """ -from doctest import DocTestSuite, DocFileSuite +from doctest import DocTestSuite, DocFileSuite, IGNORE_EXCEPTION_DETAIL import struct import sys @@ -769,7 +769,8 @@ unittest.makeSuite(Test_oid_repr), )) if sys.version_info >= (2, 6): - suite.addTest(DocFileSuite('convenience.txt')) + suite.addTest(DocFileSuite('convenience.txt', + optionflags=IGNORE_EXCEPTION_DETAIL)) return suite diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction/tests/test_weakset.py new/transaction-1.3.0/transaction/tests/test_weakset.py --- old/transaction-1.2.0/transaction/tests/test_weakset.py 2011-12-05 21:37:53.000000000 +0100 +++ new/transaction-1.3.0/transaction/tests/test_weakset.py 2012-05-16 23:16:00.000000000 +0200 @@ -28,6 +28,7 @@ self.assertEqual(dummy2 in w, False) def test_len(self): + import gc w = WeakSet() d1 = Dummy() d2 = Dummy() @@ -35,6 +36,7 @@ w.add(d2) self.assertEqual(len(w), 2) del d1 + gc.collect() self.assertEqual(len(w), 1) def test_remove(self): @@ -46,6 +48,7 @@ self.assertEqual(dummy in w, False) def test_as_weakref_list(self): + import gc w = WeakSet() dummy = Dummy() dummy2 = Dummy() @@ -54,6 +57,7 @@ w.add(dummy2) w.add(dummy3) del dummy3 + gc.collect() L = [x() for x in w.as_weakref_list()] # L is a list, but it does not have a guaranteed order. self.assertTrue(list, type(L)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction.egg-info/PKG-INFO new/transaction-1.3.0/transaction.egg-info/PKG-INFO --- old/transaction-1.2.0/transaction.egg-info/PKG-INFO 2011-12-05 22:14:39.000000000 +0100 +++ new/transaction-1.3.0/transaction.egg-info/PKG-INFO 2012-05-16 23:18:25.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: transaction -Version: 1.2.0 +Version: 1.3.0 Summary: Transaction management for Python Home-page: http://www.zope.org/Products/ZODB Author: Zope Corporation @@ -21,6 +21,32 @@ Changes ======= + 1.3.0 (2012-05-16) + ------------------ + + - Added Sphinx API docuementation. + + - Added explicit support for PyPy. + + - Dropped use of Python3-impatible ``zope.interface.implements`` class + advisor in favor of ``zope.interface.implementer`` class decorator. + + - Added support for continuous integration using ``tox`` and ``jenkins``. + + - Added ``setup.py docs`` alias (installs ``Sphinx`` and dependencies). + + - Added ``setup.py dev`` alias (runs ``setup.py develop`` plus installs + ``nose`` and ``coverage``). + + - Python 3.3 compatibility. + + - Fix "for attempt in transaction.attempts(x)" machinery, which would not + retry a transaction if its implicit call to ``.commit()`` itself raised a + transient error. Symptom: seeing conflict errors even though you thought + you were retrying some number of times via the "attempts" machinery (the + first attempt to generate an exception during commit would cause that + exception to be raised). + 1.2.0 (2011-12-05) ------------------ @@ -124,3 +150,4 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: Implementation :: CPython +Classifier: Programming Language :: Python :: Implementation :: PyPy diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction.egg-info/SOURCES.txt new/transaction-1.3.0/transaction.egg-info/SOURCES.txt --- old/transaction-1.2.0/transaction.egg-info/SOURCES.txt 2011-12-05 22:14:39.000000000 +0100 +++ new/transaction-1.3.0/transaction.egg-info/SOURCES.txt 2012-05-16 23:18:26.000000000 +0200 @@ -1,3 +1,4 @@ +.bzrignore CHANGES.txt COPYRIGHT.txt LICENSE.txt @@ -5,7 +6,14 @@ bootstrap.py buildout.cfg ez_setup.py +setup.cfg setup.py +tox.ini +docs/Makefile +docs/api.rst +docs/conf.py +docs/index.rst +docs/make.bat transaction/__init__.py transaction/_manager.py transaction/_transaction.py @@ -27,6 +35,7 @@ transaction/tests/savepointsample.py transaction/tests/test_SampleDataManager.py transaction/tests/test_SampleResourceManager.py +transaction/tests/test_attempt.py transaction/tests/test_register_compat.py transaction/tests/test_savepoint.py transaction/tests/test_transaction.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/transaction-1.2.0/transaction.egg-info/requires.txt new/transaction-1.3.0/transaction.egg-info/requires.txt --- old/transaction-1.2.0/transaction.egg-info/requires.txt 2011-12-05 22:14:39.000000000 +0100 +++ new/transaction-1.3.0/transaction.egg-info/requires.txt 2012-05-16 23:18:25.000000000 +0200 @@ -1 +1,8 @@ -zope.interface \ No newline at end of file +zope.interface + +[docs] +Sphinx + +[testing] +nose +coverage \ No newline at end of file -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org