mirror of
https://github.com/django/django.git
synced 2024-12-23 01:25:58 +00:00
Revert "Fixed #20477: Allowed settings.FORMAT_MODULE_PATH to be a list of modules."
This reverts commit 950b6de16a
.
This commit is contained in:
parent
a1f0c4c697
commit
5abc811a40
@ -47,15 +47,10 @@ def iter_format_modules(lang, format_module_path=None):
|
|||||||
Does the heavy lifting of finding format modules.
|
Does the heavy lifting of finding format modules.
|
||||||
"""
|
"""
|
||||||
if check_for_language(lang):
|
if check_for_language(lang):
|
||||||
format_locations = []
|
format_locations = ['django.conf.locale.%s']
|
||||||
if settings.FORMAT_MODULE_PATH:
|
if format_module_path:
|
||||||
if isinstance(settings.FORMAT_MODULE_PATH, six.string_types):
|
format_locations.append(format_module_path + '.%s')
|
||||||
format_module_path_setting = [settings.FORMAT_MODULE_PATH]
|
format_locations.reverse()
|
||||||
else:
|
|
||||||
format_module_path_setting = settings.FORMAT_MODULE_PATH
|
|
||||||
for path in format_module_path_setting:
|
|
||||||
format_locations.append(path + '.%s')
|
|
||||||
format_locations.append('django.conf.locale.%s')
|
|
||||||
locale = to_locale(lang)
|
locale = to_locale(lang)
|
||||||
locales = [locale]
|
locales = [locale]
|
||||||
if '_' in locale:
|
if '_' in locale:
|
||||||
|
@ -1378,20 +1378,6 @@ like::
|
|||||||
__init__.py
|
__init__.py
|
||||||
formats.py
|
formats.py
|
||||||
|
|
||||||
.. versionchanged:: 1.8
|
|
||||||
|
|
||||||
You can also set this setting to a list of Python paths, for example::
|
|
||||||
|
|
||||||
FORMAT_MODULE_PATH = [
|
|
||||||
'mysite.formats',
|
|
||||||
'some_app.formats',
|
|
||||||
]
|
|
||||||
|
|
||||||
When Django searches for a certain format, it will go through all given
|
|
||||||
Python paths until it finds a module that actually defines the given
|
|
||||||
format. This means that formats defined in packages farther up in the list
|
|
||||||
will take precedence over the same formats in packages farther down.
|
|
||||||
|
|
||||||
Available formats are :setting:`DATE_FORMAT`, :setting:`TIME_FORMAT`,
|
Available formats are :setting:`DATE_FORMAT`, :setting:`TIME_FORMAT`,
|
||||||
:setting:`DATETIME_FORMAT`, :setting:`YEAR_MONTH_FORMAT`,
|
:setting:`DATETIME_FORMAT`, :setting:`YEAR_MONTH_FORMAT`,
|
||||||
:setting:`MONTH_DAY_FORMAT`, :setting:`SHORT_DATE_FORMAT`,
|
:setting:`MONTH_DAY_FORMAT`, :setting:`SHORT_DATE_FORMAT`,
|
||||||
|
@ -133,10 +133,7 @@ Forms
|
|||||||
Internationalization
|
Internationalization
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
* :setting:`FORMAT_MODULE_PATH` can now be a list of strings representing
|
* ...
|
||||||
module paths. This allows importing several format modules from different
|
|
||||||
reusable apps. It also allows overriding those custom formats in your main
|
|
||||||
Django project.
|
|
||||||
|
|
||||||
Management Commands
|
Management Commands
|
||||||
^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -154,20 +154,11 @@ Django provides format definitions for many locales, but sometimes you might
|
|||||||
want to create your own, because a format files doesn't exist for your locale,
|
want to create your own, because a format files doesn't exist for your locale,
|
||||||
or because you want to overwrite some of the values.
|
or because you want to overwrite some of the values.
|
||||||
|
|
||||||
|
To use custom formats, specify the path where you'll place format files first.
|
||||||
|
To do that, just set your :setting:`FORMAT_MODULE_PATH` setting to the package
|
||||||
|
where format files will exist, for instance::
|
||||||
|
|
||||||
.. versionchanged:: 1.8
|
FORMAT_MODULE_PATH = 'mysite.formats'
|
||||||
|
|
||||||
The ability to specify FORMAT_MODULE_PATH as a list was added. Previously,
|
|
||||||
only a single string value was supported.
|
|
||||||
|
|
||||||
To use custom formats, specify the path where you'll place format files
|
|
||||||
first. To do that, just set your :setting:`FORMAT_MODULE_PATH` setting to
|
|
||||||
the package where format files will exist, for instance::
|
|
||||||
|
|
||||||
FORMAT_MODULE_PATH = [
|
|
||||||
'mysite.formats',
|
|
||||||
'some_app.formats',
|
|
||||||
]
|
|
||||||
|
|
||||||
Files are not placed directly in this directory, but in a directory named as
|
Files are not placed directly in this directory, but in a directory named as
|
||||||
the locale, and must be named ``formats.py``.
|
the locale, and must be named ``formats.py``.
|
||||||
|
@ -1,59 +0,0 @@
|
|||||||
"""Tests for ``django/utils/formats.py``."""
|
|
||||||
from django.test import TestCase
|
|
||||||
from django.utils.formats import iter_format_modules
|
|
||||||
|
|
||||||
|
|
||||||
class IterFormatModulesTestCase(TestCase):
|
|
||||||
"""Tests for the ``iter_format_modules`` method."""
|
|
||||||
longMessage = True
|
|
||||||
|
|
||||||
def test_returns_correct_default(self):
|
|
||||||
"""
|
|
||||||
Should return default module when FORMAT_MODULE_PATH is not set.
|
|
||||||
"""
|
|
||||||
result = list(iter_format_modules('en'))
|
|
||||||
self.assertEqual(len(result), 1, msg=(
|
|
||||||
"Should return only Django's default formats module."))
|
|
||||||
self.assertEqual(
|
|
||||||
result[0].__name__, 'django.conf.locale.en.formats', msg=(
|
|
||||||
'Should have added the language to the module path'))
|
|
||||||
|
|
||||||
def test_with_setting_as_basestring(self):
|
|
||||||
"""
|
|
||||||
Before ticket #20477 FORMAT_MODULE_PATH was supposed to be a string.
|
|
||||||
|
|
||||||
This test ensures backwards compatibility.
|
|
||||||
"""
|
|
||||||
with self.settings(
|
|
||||||
FORMAT_MODULE_PATH='utils_tests.test_module.formats'):
|
|
||||||
result = list(iter_format_modules('en'))
|
|
||||||
self.assertEqual(len(result), 2, msg=(
|
|
||||||
'Should return both, the default value and the one from the'
|
|
||||||
' setting'))
|
|
||||||
self.assertEqual(
|
|
||||||
result[0].__name__,
|
|
||||||
'utils_tests.test_module.formats.en.formats',
|
|
||||||
msg=('Should return the module from the setting first and'
|
|
||||||
' should have added the language to the module path'))
|
|
||||||
|
|
||||||
def test_with_setting_as_list_of_strings(self):
|
|
||||||
"""
|
|
||||||
After ticket #20477 FORMAT_MODULE_PATH can also be a list of strings.
|
|
||||||
|
|
||||||
This tests verifies the new functionality.
|
|
||||||
"""
|
|
||||||
FORMAT_MODULE_PATH = [
|
|
||||||
'utils_tests.test_module.formats',
|
|
||||||
'utils_tests.test_module.formats2',
|
|
||||||
]
|
|
||||||
with self.settings(
|
|
||||||
FORMAT_MODULE_PATH=FORMAT_MODULE_PATH):
|
|
||||||
result = list(iter_format_modules('en'))
|
|
||||||
self.assertEqual(len(result), 3, msg=(
|
|
||||||
'Should return the default value and the two values from the'
|
|
||||||
' setting'))
|
|
||||||
self.assertEqual(
|
|
||||||
result[0].__name__,
|
|
||||||
'utils_tests.test_module.formats.en.formats',
|
|
||||||
msg=('Should return the values from the setting and add the'
|
|
||||||
' language to the module path'))
|
|
@ -1,4 +0,0 @@
|
|||||||
"""
|
|
||||||
Custom format module. Used by tests in ``tests/utils_tests/test_formats.py``.
|
|
||||||
|
|
||||||
"""
|
|
Loading…
Reference in New Issue
Block a user