Commit graph

136 commits

Author SHA1 Message Date
Antoine Pitrou
581616624d Port import fixes from 2.7. 2012-01-25 18:06:07 +01:00
Antoine Pitrou
33d15f7c85 Port import fixes from 2.7. 2012-01-25 18:01:45 +01:00
Antoine Pitrou
157c1263a2 Port remaining test fixes, and fix test_importlib too. 2012-01-25 03:01:34 +01:00
Antoine Pitrou
dd21f68963 Port remaining test fixes, and fix test_importlib too. 2012-01-25 03:00:57 +01:00
Antoine Pitrou
abaf89b2be Issue #11235: Fix OverflowError when trying to import a source file whose modification time doesn't fit in a 32-bit timestamp. 2012-01-24 17:45:50 +01:00
Antoine Pitrou
2be60afb7e Issue #11235: Fix OverflowError when trying to import a source file whose modification time doesn't fit in a 32-bit timestamp. 2012-01-24 17:44:06 +01:00
Benjamin Peterson
6f5b6d7e8f kill useless import added by 87331661042b 2012-01-15 22:43:10 -05:00
Antoine Pitrou
7c9907e565 Fix no-op tests in importlib. 2011-12-30 21:25:15 +01:00
Antoine Pitrou
5136ac0ca2 Issue #13645: pyc files now contain the size of the corresponding source
code, to avoid timestamp collisions (especially on filesystems with a low
timestamp resolution) when checking for freshness of the bytecode.
2012-01-13 18:52:16 +01:00
Antoine Pitrou
5e8767c764 Fix no-op tests in importlib. 2011-12-30 21:26:08 +01:00
Meador Inge
96ff0840b6 Issue #13593: updating the importlib utility decorators for __qualname__. 2011-12-14 22:53:13 -06:00
Meador Inge
d7afeeeb8d Issue #13591: import_module potentially imports a module twice. 2011-12-14 22:27:28 -06:00
Meador Inge
416f12ddb3 Issue #13591: import_module potentially imports a module twice. 2011-12-14 22:23:46 -06:00
Florent Xicluna
67317750af Issue #13248: turn 3.2's PendingDeprecationWarning into 3.3's DeprecationWarning (cgi, importlib, nntplib, smtpd). 2011-12-10 11:07:42 +01:00
Vinay Sajip
65897a386e Closes #12291 for 3.3 - merged fix from 3.2. 2011-07-02 17:16:02 +01:00
Vinay Sajip
5bdae3bb7c Closes #12291: Fixed bug which was found when doing multiple loads from one stream. 2011-07-02 16:42:47 +01:00
Éric Araujo
ef3062f7af Kill dead code in importlib.test.__main__ (#12019, reviewed by Brett Cannon) 2011-06-07 17:58:50 +02:00
Victor Stinner
82f46144cc (Merge 3.2) Issue #11614: Fix importlib tests for the new __hello__ module 2011-05-16 17:00:41 +02:00
Victor Stinner
45323a890a (Merge 3.1) Issue #11614: Fix importlib tests for the new __hello__ module 2011-05-16 16:59:49 +02:00
Victor Stinner
272e24356e Issue #11614: Fix importlib tests for the new __hello__ module 2011-05-16 16:57:18 +02:00
Brett Cannon
5d43cff623 Remove a stale comment. 2011-03-23 18:12:24 -07:00
Ezio Melotti
19f2aeba67 Merged revisions 86596 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r86596 | ezio.melotti | 2010-11-20 21:04:17 +0200 (Sat, 20 Nov 2010) | 1 line

  #9424: Replace deprecated assert* methods in the Python test suite.
........
2010-11-21 01:30:29 +00:00
Ezio Melotti
b3aedd4862 #9424: Replace deprecated assert* methods in the Python test suite. 2010-11-20 19:04:17 +00:00
Brett Cannon
186335bd5c Make sure that no __pycache__ directory is needlessly left behind when testing
imports with an empty string in sys.path.
2010-08-22 22:11:06 +00:00
Brett Cannon
5db0c94072 Add importlib benchmarks which try to be "realistic" by importing the decimal
module which is the largest module in the stdlib.
2010-07-22 07:40:56 +00:00
Brett Cannon
cbe1a4e28f Add comma grouping to max result so it's easier to read. 2010-07-16 19:26:23 +00:00
Brett Cannon
3b0a19eaba Add benchmarks for importing just source w/o writing bytecode, importing source
while writing bytecode, and importing bytecode with source existing (don't care
about sourceless imports).
2010-07-16 19:04:29 +00:00
Brett Cannon
7b9bcb8411 Touch up comments and code along with outputting what the unit of measure is. 2010-07-15 06:24:04 +00:00
Brett Cannon
418182e18b Make importlib.abc.SourceLoader the primary mechanism for importlib.
This required moving the class from importlib/abc.py into
importlib/_bootstrap.py and jiggering some code to work better with the class.
This included changing how the file finder worked to better meet import
semantics. This also led to fixing importlib to handle the empty string from
sys.path as import currently does (and making me wish we didn't support that
instead just required people to insert '.' instead to represent cwd).

It also required making the new set_data abstractmethod create
any needed subdirectories implicitly thanks to __pycache__ (it was either this
or grow the SourceLoader ABC to gain an 'exists' method and either a mkdir
method or have set_data with no data arg mean to create a directory).

Lastly, as an optimization the file loaders cache the file path where the
finder found something to use for loading (this is thanks to having a
sourceless loader separate from the source loader to simplify the code and
cut out stat calls).
Unfortunately test_runpy assumed a loader would always work for a module, even
if you changed from underneath it what it was expected to work with. By simply
dropping the previous loader in test_runpy so the proper loader can be returned
by the finder fixed the failure.

At this point importlib deviates from import on two points:

1. The exception raised when trying to import a file is different (import does
an explicit file check to print a special message, importlib just says the path
cannot be imported as if it was just some module name).

2. the co_filename on a code object is not being set to where bytecode was
actually loaded from instead of where the marshalled code object originally
came from (a solution for this has already been agreed upon on python-dev but has
not been implemented yet; issue8611).
2010-07-03 22:32:41 +00:00
Brett Cannon
d71bed3d76 Make importlib.abc.SourceLoader the primary mechanism for importlib.
This required moving the class from importlib/abc.py into
importlib/_bootstrap.py and jiggering some code to work better with the class.
This included changing how the file finder worked to better meet import
semantics. This also led to fixing importlib to handle the empty string from
sys.path as import currently does (and making me wish we didn't support that
instead just required people to insert '.' instead to represent cwd).

It also required making the new set_data abstractmethod create
any needed subdirectories implicitly thanks to __pycache__ (it was either this
or grow the SourceLoader ABC to gain an 'exists' method and either a mkdir
method or have set_data with no data arg mean to create a directory).

Lastly, as an optimization the file loaders cache the file path where the
finder found something to use for loading (this is thanks to having a
sourceless loader separate from the source loader to simplify the code and
cut out stat calls).
Unfortunately test_runpy assumed a loader would always work for a module, even
if you changed from underneath it what it was expected to work with. By simply
dropping the previous loader in test_runpy so the proper loader can be returned
by the finder fixed the failure.

At this point importlib deviates from import on two points:

1. The exception raised when trying to import a file is different (import does
an explicit file check to print a special message, importlib just says the path
cannot be imported as if it was just some module name).

2. the co_filename on a code object is not being set to where bytecode was
actually loaded from instead of where the marshalled code object originally
came from (a solution for this has already been agreed upon on python-dev but has
not been implemented yet; issue8611).
2010-07-03 22:18:47 +00:00
Brett Cannon
2cf1585499 Fix a spelling mistake in a comment. 2010-07-03 22:03:16 +00:00
Brett Cannon
61b14251d3 Make importlib.abc.SourceLoader the primary mechanism for importlib.
This required moving the class from importlib/abc.py into
importlib/_bootstrap.py and jiggering some code to work better with the class.
This included changing how the file finder worked to better meet import
semantics. This also led to fixing importlib to handle the empty string from
sys.path as import currently does (and making me wish we didn't support that
instead just required people to insert '.' instead to represent cwd).

It also required making the new set_data abstractmethod create
any needed subdirectories implicitly thanks to __pycache__ (it was either this
or grow the SourceLoader ABC to gain an 'exists' method and either a mkdir
method or have set_data with no data arg mean to create a directory).

Lastly, as an optimization the file loaders cache the file path where the
finder found something to use for loading (this is thanks to having a
sourceless loader separate from the source loader to simplify the code and
cut out stat calls).
Unfortunately test_runpy assumed a loader would always work for a module, even
if you changed from underneath it what it was expected to work with. By simply
dropping the previous loader in test_runpy so the proper loader can be returned
by the finder fixed the failure.

At this point importlib deviates from import on two points:

1. The exception raised when trying to import a file is different (import does
an explicit file check to print a special message, importlib just says the path
cannot be imported as if it was just some module name).

2. the co_filename on a code object is not being set to where bytecode was
actually loaded from instead of where the marshalled code object originally
came from (a solution for this has already been agreed upon on python-dev but has
not been implemented yet; issue8611).
2010-07-03 21:48:25 +00:00
Brett Cannon
b7183d8c1f Add an inheritance test for importlib.abc.SourceLoader. 2010-06-28 05:46:25 +00:00
Brett Cannon
0cf9e6a621 Move importlib.abc.SourceLoader to _bootstrap.
Required updating code relying on other modules to switch to _bootstrap's
unique module requirements. This led to the realization that
get_code was being too liberal in its exception catching when calling set_data
by blindly grabbing IOError. Shifted the responsibility of safely ignoring
writes to a read-only path to set_data.

Importlib is still not relying on SourceLoader yet; requires creating a
SourcelessLoader and updating the source finder.
2010-06-28 04:57:24 +00:00
Benjamin Peterson
2215c14f03 fix test with more obviously incorrect bytecode 2010-06-28 00:24:13 +00:00
Brett Cannon
f23e374441 Implement importlib.abc.SourceLoader and deprecate PyLoader and PyPycLoader.
SourceLoader is a simplification of both PyLoader and PyPycLoader. If one only
wants to use source, then they need to only implement get_data and
get_filename. To also use bytecode -- sourceless loading is not supported --
then two abstract methods -- path_mtime and set_data -- need to be implemented.
Compared to PyLoader and PyPycLoader, there are less abstract methods
introduced and bytecode files become an optimization controlled by the ABC and
hidden from the user (this need came about as PEP 3147 showed that not treating
bytecode as an optimization can cause problems for compatibility).

PyLoader is deprecated in favor of SourceLoader. To be compatible from Python
3.1 onwards, a subclass need only use simple methods for source_path and
is_package. Otherwise conditional subclassing based on whether Python 3.1 or
Python 3.2 is being is the only change. The documentation and docstring for
PyLoader explain what is exactly needed.

PyPycLoader is deprecated also in favor of SourceLoader. Because PEP 3147
shifted bytecode path details so much, there is no foolproof way to provide
backwards-compatibility with SourceLoader. Because of this the class is simply
deprecated and users should move to SourceLoader (and optionally PyLoader for
Python 3.1). This does lead to a loss of support for sourceless loading
unfortunately.

At some point before Python 3.2 is released, SourceLoader will be moved over to
importlib._bootstrap so that the core code of importlib relies on the new code
instead of the old PyPycLoader code. This commit is being done now so that
there is no issue in having the API in Python 3.1a1.
2010-06-27 23:57:46 +00:00
Brett Cannon
c56b094bab Move over to assertIs. 2010-06-21 02:49:35 +00:00
Barry Warsaw
04b5684d00 Repair test failure. Bug 8727. 2010-05-18 14:15:20 +00:00
Barry Warsaw
50ad588c33 Remove unnecessary XXX 2010-04-17 00:31:11 +00:00
Barry Warsaw
28a691b7fd PEP 3147 2010-04-17 00:19:56 +00:00
Brett Cannon
39440b14cd Merged revisions 78242 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r78242 | brett.cannon | 2010-02-19 11:01:06 -0500 (Fri, 19 Feb 2010) | 5 lines

  Importlib was not matching import's handling of .pyc files where it had less
  then 8 bytes total in the file.

  Fixes issues 7361 & 7875.
........
2010-02-19 16:05:28 +00:00
Brett Cannon
9b3e15fbc4 Importlib was not matching import's handling of .pyc files where it had less
then 8 bytes total in the file.

Fixes issues 7361 & 7875.
2010-02-19 16:01:06 +00:00
Brett Cannon
3d26b95ca7 Merged revisions 76146 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r76146 | brett.cannon | 2009-11-07 15:55:05 -0800 (Sat, 07 Nov 2009) | 6 lines

  When trying to write new bytecode, importlib was not catching the IOError
  thrown if the file happened to be read-only to keep the failure silent.

  Fixes issue #7187. Thanks, Dave Malcolm for the report and analysis of the
  problem.
........
2009-11-07 23:57:20 +00:00
Brett Cannon
e52c919d67 When trying to write new bytecode, importlib was not catching the IOError
thrown if the file happened to be read-only to keep the failure silent.

Fixes issue #7187. Thanks, Dave Malcolm for the report and analysis of the
problem.
2009-11-07 23:55:05 +00:00
Brett Cannon
142d236442 Merged revisions 76113-76114 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r76113 | brett.cannon | 2009-11-04 17:17:22 -0800 (Wed, 04 Nov 2009) | 3 lines

  importlib.test.source.util referenced variables in the 'finally' part of a
  try/finally which may not have been set.
........
  r76114 | brett.cannon | 2009-11-04 17:26:57 -0800 (Wed, 04 Nov 2009) | 6 lines

  Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places
  source files for tests. Allows for concurrent execution of the tests by
  preventing various executions from trampling each other.

  Closes issue #7248.
........
2009-11-05 01:34:30 +00:00
Brett Cannon
cfed029c42 Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places
source files for tests. Allows for concurrent execution of the tests by
preventing various executions from trampling each other.

Closes issue #7248.
2009-11-05 01:26:57 +00:00
Brett Cannon
0ae4511624 importlib.test.source.util referenced variables in the 'finally' part of a
try/finally which may not have been set.
2009-11-05 01:17:22 +00:00
Brett Cannon
23cf5743ae Rework importlib benchmarks so that they measure number of executions within a
second instead of some fixed number.

Keeps benchmark faster by putting a cap on total execution time. Before a run
using importlib took longer by some factor, but now it takes roughly the
same amount of time as using the built-in __import__.
2009-09-03 20:45:21 +00:00
Brett Cannon
d95863f6f3 Clarify why test_import is failing under importlib. 2009-08-30 23:41:40 +00:00
Brett Cannon
1c1dcbfd5d Trying to import a submodule from another module and not a package was raising
AttributeError in importlib when it should be an ImportError.

Found when running importlib against test_runpy.
2009-08-30 20:22:21 +00:00