﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
11032	Failed regressiontest on Windows for ImageField	Joeri Bekker	nobody	"On Windows (Vista32), the file_storage test fails if PIL is installed (if PIL is not installed, this test is not executed):

{{{
======================================================================
FAIL: Doctest: regressiontests.file_storage.models.__test__.API_TESTS
----------------------------------------------------------------------
Traceback (most recent call last):
  File ""C:\edc\django-trunk\django\test\_doctest.py"", line 2180, in runTest
AssertionError: Failed doctest test for regressiontests.file_storage.models.__test__.API_TESTS
  File ""C:\edc\django_src\tests\regressiontests\file_storage\models.py"", line unknown line number, in API_TESTS

----------------------------------------------------------------------
File ""C:\edc\django_src\tests\regressiontests\file_storage\models.py"", line ?, in regressiontests.file_storage.models.__test__.API_TESTS
Failed example:
    shutil.rmtree(temp_storage_dir)
Exception raised:
    Traceback (most recent call last):
      File ""C:\edc\django-trunk\django\test\_doctest.py"", line 1267, in __run
      File ""<doctest regressiontests.file_storage.models.__test__.API_TESTS[26]>"", line 1, in <module>
        shutil.rmtree(temp_storage_dir)
      File ""C:\Program Files\Python 2.5\Lib\shutil.py"", line 169, in rmtree
        rmtree(fullname, ignore_errors, onerror)
      File ""C:\Program Files\Python 2.5\Lib\shutil.py"", line 174, in rmtree
        onerror(os.remove, fullname, sys.exc_info())
      File ""C:\Program Files\Python 2.5\Lib\shutil.py"", line 172, in rmtree
        os.remove(fullname)
    WindowsError: [Error 32] The process cannot access the file because it is being used by another
    process: 'c:\\users\\joeri\\appdata\\local\\temp\\tmp34vz8s\\tests\\mug'


----------------------------------------------------------------------
Ran 4 tests in 1.116s

FAILED (failures=1)
}}}

When cleaning up at the end of the test (tests/regressiontests/file_storage/models.py), {{{shutil.rmtree}}} has problems with {{{p.mugshot._file}}} still being opened by a process. The quickfix is to add {{{>>> p.mugshot.close()}}} just _before_ the last line of the test: {{{>>> shutil.rmtree(temp_storage_dir)}}}.

It's a perk of {{{shutil}}} on Windows (other platforms seem to don't care and just remove the file anyway) that exposes this but the actual cause might be deeper. The file (p.mugshot._file) is left open (or even reopened despite the dimension_cache...) by calling {{{p.mugshot.width}}} and/or {{{p.mugshot.height}}}. Removing the lines below from the test also ""removes"" the problem:

{{{
>>> p.mugshot.width
16
>>> p.mugshot.height
16
}}}"		closed	File uploads/storage	dev		fixed	regressiontest imagefield windows		Ready for checkin	1	0	0	0	0	0
