import io
import operator
import os
+ import stat
import unittest
+import warnings
import dbm.dumb as dumbdbm
from test import support
from functools import partial
pass
self.assertEqual(stdout.getvalue(), '')
+ def test_warn_on_ignored_flags(self):
+ for value in ('r', 'w'):
+ _delete_files()
+ with self.assertWarnsRegex(DeprecationWarning,
+ "The database file is missing, the "
+ "semantics of the 'c' flag will "
+ "be used."):
+ f = dumbdbm.open(_fname, value)
+ f.close()
+
+ def test_invalid_flag(self):
+ for flag in ('x', 'rf', None):
+ with self.assertWarnsRegex(DeprecationWarning,
+ "Flag must be one of "
+ "'r', 'w', 'c', or 'n'"):
+ f = dumbdbm.open(_fname, flag)
+ f.close()
+
+ @unittest.skipUnless(hasattr(os, 'chmod'), 'test needs os.chmod()')
+ def test_readonly_files(self):
+ with support.temp_dir() as dir:
+ fname = os.path.join(dir, 'db')
+ with dumbdbm.open(fname, 'n') as f:
+ self.assertEqual(list(f.keys()), [])
+ for key in self._dict:
+ f[key] = self._dict[key]
+ os.chmod(fname + ".dir", stat.S_IRUSR)
+ os.chmod(fname + ".dat", stat.S_IRUSR)
+ os.chmod(dir, stat.S_IRUSR|stat.S_IXUSR)
+ with dumbdbm.open(fname, 'r') as f:
+ self.assertEqual(sorted(f.keys()), sorted(self._dict))
+ f.close() # don't write
+
def tearDown(self):
_delete_files()
Core and Builtins
-----------------
-- Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X
- when decode astral characters. Patch by Xiang Zhang.
+Library
+-------
-- Issue #19398: Extra slash no longer added to sys.path components in case of
- empty compile-time PYTHONPATH components.
++- Issue #28847: dbm.dumb now supports reading read-only files and no longer
++ writes the index file when it is not changed.
+
-- Issue #28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug
- build.
-- Issue #23782: Fixed possible memory leak in _PyTraceback_Add() and exception
- loss in PyTraceBack_Here().
+What's New in Python 3.6.0 release candidate 1
+==============================================
-- Issue #28379: Added sanity checks and tests for PyUnicode_CopyCharacters().
- Patch by Xiang Zhang.
+*Release date: 2016-12-06*
-- Issue #28376: The type of long range iterator is now registered as Iterator.
- Patch by Oren Milman.
+Core and Builtins
+-----------------
-- Issue #28376: The constructor of range_iterator now checks that step is not 0.
- Patch by Oren Milman.
+- Issue #23722: Rather than silently producing a class that doesn't support
+ zero-argument ``super()`` in methods, failing to pass the new
+ ``__classcell__`` namespace entry up to ``type.__new__`` now results in a
+ ``DeprecationWarning`` and a class that supports zero-argument ``super()``.
-- Issue #26906: Resolving special methods of uninitialized type now causes
- implicit initialization of the type instead of a fail.
+- Issue #28797: Modifying the class __dict__ inside the __set_name__ method of
+ a descriptor that is used inside that class no longer prevents calling the
+ __set_name__ method of other descriptors.
-- Issue #18287: PyType_Ready() now checks that tp_name is not NULL.
- Original patch by Niklas Koep.
+- Issue #28782: Fix a bug in the implementation ``yield from`` when checking
+ if the next instruction is YIELD_FROM. Regression introduced by WORDCODE
+ (issue #26647).
-- Issue #24098: Fixed possible crash when AST is changed in process of
- compiling it.
+Library
+-------
-- Issue #28350: String constants with null character no longer interned.
+- Issue #27030: Unknown escapes in re.sub() replacement template are allowed
+ again. But they still are deprecated and will be disabled in 3.7.
-- Issue #26617: Fix crash when GC runs during weakref callbacks.
+- Issue #28835: Fix a regression introduced in warnings.catch_warnings():
+ call warnings.showwarning() if it was overriden inside the context manager.
-- Issue #27942: String constants now interned recursively in tuples and frozensets.
+- Issue #27172: To assist with upgrades from 2.7, the previously documented
+ deprecation of ``inspect.getfullargspec()`` has been reversed. This decision
+ may be revisited again after the Python 2.7 branch is no longer officially
+ supported.
-- Issue #21578: Fixed misleading error message when ImportError called with
- invalid keyword args.
+- Issue #24142: Reading a corrupt config file left configparser in an
+ invalid state. Original patch by Florian Höch.
-- Issue #28203: Fix incorrect type in error message from
- ``complex(1.0, {2:3})``. Patch by Soumya Sharma.
+- Issue #28843: Fix asyncio C Task to handle exceptions __traceback__.
-- Issue #27955: Fallback on reading /dev/urandom device when the getrandom()
- syscall fails with EPERM, for example when blocked by SECCOMP.
+C API
+-----
-- Issue #28131: Fix a regression in zipimport's compile_source(). zipimport
- should use the same optimization level as the interpreter.
+- Issue #28808: PyUnicode_CompareWithASCIIString() now never raises exceptions.
-- Issue #25221: Fix corrupted result from PyLong_FromLong(0) when
- Python is compiled with NSMALLPOSINTS = 0.
+Documentation
+-------------
-- Issue #25758: Prevents zipimport from unnecessarily encoding a filename
- (patch by Eryk Sun)
+- Issue #23722: The data model reference and the porting section in the What's
+ New guide now cover the additional ``__classcell__`` handling needed for
+ custom metaclasses to fully support PEP 487 and zero-argument ``super()``.
-- Issue #28189: dictitems_contains no longer swallows compare errors.
- (Patch by Xiang Zhang)
+Tools/Demos
+-----------
-- Issue #27812: Properly clear out a generator's frame's backreference to the
- generator to prevent crashes in frame.clear().
+- Issue #28023: Fix python-gdb.py didn't support new dict implementation.
-- Issue #27811: Fix a crash when a coroutine that has not been awaited is
- finalized with warnings-as-errors enabled.
-- Issue #27587: Fix another issue found by PVS-Studio: Null pointer check
- after use of 'def' in _PyState_AddModule().
- Initial patch by Christian Heimes.
+What's New in Python 3.6.0 beta 4
+=================================
-- Issue #26020: set literal evaluation order did not match documented behaviour.
+*Release date: 2016-11-21*
-- Issue #27782: Multi-phase extension module import now correctly allows the
- ``m_methods`` field to be used to add module level functions to instances
- of non-module types returned from ``Py_create_mod``. Patch by Xiang Zhang.
+Core and Builtins
+-----------------
-- Issue #27936: The round() function accepted a second None argument
- for some types but not for others. Fixed the inconsistency by
- accepting None for all numeric types.
+- Issue #28532: Show sys.version when -V option is supplied twice.
-- Issue #27487: Warn if a submodule argument to "python -m" or
- runpy.run_module() is found in sys.modules after parent packages are
- imported, but before the submodule is executed.
+- Issue #27100: The with-statement now checks for __enter__ before it
+ checks for __exit__. This gives less confusing error messages when
+ both methods are missing. Patch by Jonathan Ellington.
-- Issue #27558: Fix a SystemError in the implementation of "raise" statement.
- In a brand new thread, raise a RuntimeError since there is no active
- exception to reraise. Patch written by Xiang Zhang.
+- Issue #28746: Fix the set_inheritable() file descriptor method on platforms
+ that do not have the ioctl FIOCLEX and FIONCLEX commands.
-- Issue #27419: Standard __import__() no longer look up "__import__" in globals
- or builtins for importing submodules or "from import". Fixed handling an
- error of non-string package name.
+- Issue #26920: Fix not getting the locale's charset upon initializing the
+ interpreter, on platforms that do not have langinfo.
-- Issue #27083: Respect the PYTHONCASEOK environment variable under Windows.
+- Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X
+ when decode astral characters. Patch by Xiang Zhang.
-- Issue #27514: Make having too many statically nested blocks a SyntaxError
- instead of SystemError.
+- Issue #19398: Extra slash no longer added to sys.path components in case of
+ empty compile-time PYTHONPATH components.
-- Issue #27473: Fixed possible integer overflow in bytes and bytearray
- concatenations. Patch by Xiang Zhang.
+- Issue #28665: Improve speed of the STORE_DEREF opcode by 40%.
-- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by
- Xiang Zhang.
+- Issue #28583: PyDict_SetDefault didn't combine split table when needed.
+ Patch by Xiang Zhang.
-- Issue #27581: Don't rely on wrapping for overflow check in
- PySequence_Tuple(). Patch by Xiang Zhang.
+- Issue #27243: Change PendingDeprecationWarning -> DeprecationWarning.
+ As it was agreed in the issue, __aiter__ returning an awaitable
+ should result in PendingDeprecationWarning in 3.5 and in
+ DeprecationWarning in 3.6.
-- Issue #27443: __length_hint__() of bytearray iterators no longer return a
- negative integer for a resized bytearray.
+- Issue #26182: Fix a refleak in code that raises DeprecationWarning.
-- Issue #27942: Fix memory leak in codeobject.c
+- Issue #28721: Fix asynchronous generators aclose() and athrow() to
+ handle StopAsyncIteration propagation properly.
Library
-------