mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #24399 -- Made filesystem loaders use more specific exceptions.
This commit is contained in:
parent
85757d0e79
commit
70123cf084
5 changed files with 50 additions and 43 deletions
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals
|
|||
|
||||
import os.path
|
||||
import sys
|
||||
import tempfile
|
||||
import types
|
||||
import unittest
|
||||
from contextlib import contextmanager
|
||||
|
@ -176,7 +177,16 @@ class EggLoaderTests(SimpleTestCase):
|
|||
class FileSystemLoaderTests(SimpleTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.engine = Engine()
|
||||
self.engine = Engine(dirs=[TEMPLATE_DIR])
|
||||
|
||||
@contextmanager
|
||||
def set_dirs(self, dirs):
|
||||
original_dirs = self.engine.dirs
|
||||
self.engine.dirs = dirs
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
self.engine.dirs = original_dirs
|
||||
|
||||
@contextmanager
|
||||
def source_checker(self, dirs):
|
||||
|
@ -189,12 +199,8 @@ class FileSystemLoaderTests(SimpleTestCase):
|
|||
expected_sources,
|
||||
)
|
||||
|
||||
original_dirs = self.engine.dirs
|
||||
self.engine.dirs = dirs
|
||||
try:
|
||||
with self.set_dirs(dirs):
|
||||
yield check_sources
|
||||
finally:
|
||||
self.engine.dirs = original_dirs
|
||||
|
||||
def test_directory_security(self):
|
||||
with self.source_checker(['/dir1', '/dir2']) as check_sources:
|
||||
|
@ -238,6 +244,27 @@ class FileSystemLoaderTests(SimpleTestCase):
|
|||
check_sources('index.html', ['/dir1/index.html', '/DIR2/index.html'])
|
||||
check_sources('/DIR1/index.HTML', ['/DIR1/index.HTML'])
|
||||
|
||||
def test_file_does_not_exist(self):
|
||||
with self.assertRaises(TemplateDoesNotExist):
|
||||
self.engine.get_template('doesnotexist.html')
|
||||
|
||||
@unittest.skipIf(
|
||||
sys.platform == 'win32',
|
||||
"Python on Windows doesn't have working os.chmod().",
|
||||
)
|
||||
def test_permissions_error(self):
|
||||
with tempfile.NamedTemporaryFile() as tmpfile:
|
||||
tmpdir = os.path.dirname(tmpfile.name)
|
||||
tmppath = os.path.join(tmpdir, tmpfile.name)
|
||||
os.chmod(tmppath, 0o0222)
|
||||
with self.set_dirs([tmpdir]):
|
||||
with self.assertRaisesMessage(IOError, 'Permission denied'):
|
||||
self.engine.get_template(tmpfile.name)
|
||||
|
||||
def test_notafile_error(self):
|
||||
with self.assertRaisesMessage(IOError, 'Is a directory'):
|
||||
self.engine.get_template('first')
|
||||
|
||||
|
||||
class AppDirectoriesLoaderTest(SimpleTestCase):
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue