Browse Source

Refs #33476 -- Reformatted code with Black.

django-bot 3 years ago
parent
commit
9c19aff7c7
100 changed files with 3590 additions and 3007 deletions
  1. 2 2
      django/__init__.py
  2. 1 1
      django/apps/__init__.py
  3. 33 28
      django/apps/config.py
  4. 23 16
      django/apps/registry.py
  5. 58 47
      django/conf/__init__.py
  6. 187 187
      django/conf/global_settings.py
  7. 605 605
      django/conf/locale/__init__.py
  8. 7 7
      django/conf/locale/ar/formats.py
  9. 14 14
      django/conf/locale/ar_DZ/formats.py
  10. 17 17
      django/conf/locale/az/formats.py
  11. 6 6
      django/conf/locale/bg/formats.py
  12. 15 15
      django/conf/locale/bn/formats.py
  13. 8 8
      django/conf/locale/bs/formats.py
  14. 17 17
      django/conf/locale/ca/formats.py
  15. 25 25
      django/conf/locale/cs/formats.py
  16. 21 21
      django/conf/locale/cy/formats.py
  17. 13 13
      django/conf/locale/da/formats.py
  18. 14 14
      django/conf/locale/de/formats.py
  19. 14 14
      django/conf/locale/de_CH/formats.py
  20. 21 21
      django/conf/locale/el/formats.py
  21. 32 32
      django/conf/locale/en/formats.py
  22. 21 21
      django/conf/locale/en_AU/formats.py
  23. 21 21
      django/conf/locale/en_GB/formats.py
  24. 29 32
      django/conf/locale/eo/formats.py
  25. 17 17
      django/conf/locale/es/formats.py
  26. 17 17
      django/conf/locale/es_AR/formats.py
  27. 18 19
      django/conf/locale/es_CO/formats.py
  28. 18 18
      django/conf/locale/es_MX/formats.py
  29. 18 19
      django/conf/locale/es_NI/formats.py
  30. 17 17
      django/conf/locale/es_PR/formats.py
  31. 6 6
      django/conf/locale/et/formats.py
  32. 9 9
      django/conf/locale/eu/formats.py
  33. 9 9
      django/conf/locale/fa/formats.py
  34. 20 21
      django/conf/locale/fi/formats.py
  35. 19 19
      django/conf/locale/fr/formats.py
  36. 6 6
      django/conf/locale/ga/formats.py
  37. 8 8
      django/conf/locale/gd/formats.py
  38. 9 9
      django/conf/locale/gl/formats.py
  39. 9 9
      django/conf/locale/he/formats.py
  40. 6 6
      django/conf/locale/hi/formats.py
  41. 29 29
      django/conf/locale/hr/formats.py
  42. 15 15
      django/conf/locale/hu/formats.py
  43. 30 30
      django/conf/locale/id/formats.py
  44. 19 19
      django/conf/locale/ig/formats.py
  45. 7 7
      django/conf/locale/is/formats.py
  46. 30 30
      django/conf/locale/it/formats.py
  47. 9 9
      django/conf/locale/ja/formats.py
  48. 28 28
      django/conf/locale/ka/formats.py
  49. 8 8
      django/conf/locale/km/formats.py
  50. 4 4
      django/conf/locale/kn/formats.py
  51. 29 30
      django/conf/locale/ko/formats.py
  52. 19 19
      django/conf/locale/ky/formats.py
  53. 30 30
      django/conf/locale/lt/formats.py
  54. 30 30
      django/conf/locale/lv/formats.py
  55. 25 25
      django/conf/locale/mk/formats.py
  56. 21 21
      django/conf/locale/ml/formats.py
  57. 3 3
      django/conf/locale/mn/formats.py
  58. 26 26
      django/conf/locale/ms/formats.py
  59. 21 21
      django/conf/locale/nb/formats.py
  60. 51 51
      django/conf/locale/nl/formats.py
  61. 21 21
      django/conf/locale/nn/formats.py
  62. 15 15
      django/conf/locale/pl/formats.py
  63. 21 21
      django/conf/locale/pt/formats.py
  64. 17 17
      django/conf/locale/pt_BR/formats.py
  65. 20 20
      django/conf/locale/ro/formats.py
  66. 17 17
      django/conf/locale/ru/formats.py
  67. 15 15
      django/conf/locale/sk/formats.py
  68. 29 29
      django/conf/locale/sl/formats.py
  69. 7 7
      django/conf/locale/sq/formats.py
  70. 25 25
      django/conf/locale/sr/formats.py
  71. 25 25
      django/conf/locale/sr_Latn/formats.py
  72. 21 21
      django/conf/locale/sv/formats.py
  73. 4 4
      django/conf/locale/ta/formats.py
  74. 4 4
      django/conf/locale/te/formats.py
  75. 19 19
      django/conf/locale/tg/formats.py
  76. 18 18
      django/conf/locale/th/formats.py
  77. 19 19
      django/conf/locale/tk/formats.py
  78. 15 15
      django/conf/locale/tr/formats.py
  79. 20 20
      django/conf/locale/uk/formats.py
  80. 17 17
      django/conf/locale/uz/formats.py
  81. 9 9
      django/conf/locale/vi/formats.py
  82. 25 25
      django/conf/locale/zh_Hans/formats.py
  83. 25 25
      django/conf/locale/zh_Hant/formats.py
  84. 1 1
      django/conf/urls/__init__.py
  85. 1 1
      django/conf/urls/i18n.py
  86. 3 1
      django/conf/urls/static.py
  87. 37 11
      django/contrib/admin/__init__.py
  88. 39 24
      django/contrib/admin/actions.py
  89. 3 3
      django/contrib/admin/apps.py
  90. 381 237
      django/contrib/admin/checks.py
  91. 15 7
      django/contrib/admin/decorators.py
  92. 2 0
      django/contrib/admin/exceptions.py
  93. 185 113
      django/contrib/admin/filters.py
  94. 7 6
      django/contrib/admin/forms.py
  95. 191 91
      django/contrib/admin/helpers.py
  96. 54 24
      django/contrib/admin/migrations/0001_initial.py
  97. 4 4
      django/contrib/admin/migrations/0002_logentry_remove_auto_add.py
  98. 5 5
      django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py
  99. 85 46
      django/contrib/admin/models.py
  100. 325 197
      django/contrib/admin/options.py

+ 2 - 2
django/__init__.py

@@ -1,6 +1,6 @@
 from django.utils.version import get_version
 
-VERSION = (4, 1, 0, 'alpha', 0)
+VERSION = (4, 1, 0, "alpha", 0)
 
 __version__ = get_version(VERSION)
 
@@ -19,6 +19,6 @@ def setup(set_prefix=True):
     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
     if set_prefix:
         set_script_prefix(
-            '/' if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME
+            "/" if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME
         )
     apps.populate(settings.INSTALLED_APPS)

+ 1 - 1
django/apps/__init__.py

@@ -1,4 +1,4 @@
 from .config import AppConfig
 from .registry import apps
 
-__all__ = ['AppConfig', 'apps']
+__all__ = ["AppConfig", "apps"]

+ 33 - 28
django/apps/config.py

@@ -6,8 +6,8 @@ from django.core.exceptions import ImproperlyConfigured
 from django.utils.functional import cached_property
 from django.utils.module_loading import import_string, module_has_submodule
 
-APPS_MODULE_NAME = 'apps'
-MODELS_MODULE_NAME = 'models'
+APPS_MODULE_NAME = "apps"
+MODELS_MODULE_NAME = "models"
 
 
 class AppConfig:
@@ -30,7 +30,7 @@ class AppConfig:
 
         # Last component of the Python path to the application e.g. 'admin'.
         # This value must be unique across a Django project.
-        if not hasattr(self, 'label'):
+        if not hasattr(self, "label"):
             self.label = app_name.rpartition(".")[2]
         if not self.label.isidentifier():
             raise ImproperlyConfigured(
@@ -38,12 +38,12 @@ class AppConfig:
             )
 
         # Human-readable name for the application e.g. "Admin".
-        if not hasattr(self, 'verbose_name'):
+        if not hasattr(self, "verbose_name"):
             self.verbose_name = self.label.title()
 
         # Filesystem path to the application directory e.g.
         # '/path/to/django/contrib/admin'.
-        if not hasattr(self, 'path'):
+        if not hasattr(self, "path"):
             self.path = self._path_from_module(app_module)
 
         # Module containing models e.g. <module 'django.contrib.admin.models'
@@ -56,11 +56,12 @@ class AppConfig:
         self.models = None
 
     def __repr__(self):
-        return '<%s: %s>' % (self.__class__.__name__, self.label)
+        return "<%s: %s>" % (self.__class__.__name__, self.label)
 
     @cached_property
     def default_auto_field(self):
         from django.conf import settings
+
         return settings.DEFAULT_AUTO_FIELD
 
     @property
@@ -72,9 +73,9 @@ class AppConfig:
         # See #21874 for extended discussion of the behavior of this method in
         # various cases.
         # Convert to list because __path__ may not support indexing.
-        paths = list(getattr(module, '__path__', []))
+        paths = list(getattr(module, "__path__", []))
         if len(paths) != 1:
-            filename = getattr(module, '__file__', None)
+            filename = getattr(module, "__file__", None)
             if filename is not None:
                 paths = [os.path.dirname(filename)]
             else:
@@ -85,12 +86,14 @@ class AppConfig:
             raise ImproperlyConfigured(
                 "The app module %r has multiple filesystem locations (%r); "
                 "you must configure this app with an AppConfig subclass "
-                "with a 'path' class attribute." % (module, paths))
+                "with a 'path' class attribute." % (module, paths)
+            )
         elif not paths:
             raise ImproperlyConfigured(
                 "The app module %r has no filesystem location, "
                 "you must configure this app with an AppConfig subclass "
-                "with a 'path' class attribute." % module)
+                "with a 'path' class attribute." % module
+            )
         return paths[0]
 
     @classmethod
@@ -116,7 +119,7 @@ class AppConfig:
             # If the apps module defines more than one AppConfig subclass,
             # the default one can declare default = True.
             if module_has_submodule(app_module, APPS_MODULE_NAME):
-                mod_path = '%s.%s' % (entry, APPS_MODULE_NAME)
+                mod_path = "%s.%s" % (entry, APPS_MODULE_NAME)
                 mod = import_module(mod_path)
                 # Check if there's exactly one AppConfig candidate,
                 # excluding those that explicitly define default = False.
@@ -124,9 +127,9 @@ class AppConfig:
                     (name, candidate)
                     for name, candidate in inspect.getmembers(mod, inspect.isclass)
                     if (
-                        issubclass(candidate, cls) and
-                        candidate is not cls and
-                        getattr(candidate, 'default', True)
+                        issubclass(candidate, cls)
+                        and candidate is not cls
+                        and getattr(candidate, "default", True)
                     )
                 ]
                 if len(app_configs) == 1:
@@ -137,13 +140,13 @@ class AppConfig:
                     app_configs = [
                         (name, candidate)
                         for name, candidate in app_configs
-                        if getattr(candidate, 'default', False)
+                        if getattr(candidate, "default", False)
                     ]
                     if len(app_configs) > 1:
                         candidates = [repr(name) for name, _ in app_configs]
                         raise RuntimeError(
-                            '%r declares more than one default AppConfig: '
-                            '%s.' % (mod_path, ', '.join(candidates))
+                            "%r declares more than one default AppConfig: "
+                            "%s." % (mod_path, ", ".join(candidates))
                         )
                     elif len(app_configs) == 1:
                         app_config_class = app_configs[0][1]
@@ -165,7 +168,7 @@ class AppConfig:
             # If the last component of entry starts with an uppercase letter,
             # then it was likely intended to be an app config class; if not,
             # an app module. Provide a nice error message in both cases.
-            mod_path, _, cls_name = entry.rpartition('.')
+            mod_path, _, cls_name = entry.rpartition(".")
             if mod_path and cls_name[0].isupper():
                 # We could simply re-trigger the string import exception, but
                 # we're going the extra mile and providing a better error
@@ -178,9 +181,12 @@ class AppConfig:
                     for name, candidate in inspect.getmembers(mod, inspect.isclass)
                     if issubclass(candidate, cls) and candidate is not cls
                 ]
-                msg = "Module '%s' does not contain a '%s' class." % (mod_path, cls_name)
+                msg = "Module '%s' does not contain a '%s' class." % (
+                    mod_path,
+                    cls_name,
+                )
                 if candidates:
-                    msg += ' Choices are: %s.' % ', '.join(candidates)
+                    msg += " Choices are: %s." % ", ".join(candidates)
                 raise ImportError(msg)
             else:
                 # Re-trigger the module import exception.
@@ -189,8 +195,7 @@ class AppConfig:
         # Check for obvious errors. (This check prevents duck typing, but
         # it could be removed if it became a problem in practice.)
         if not issubclass(app_config_class, AppConfig):
-            raise ImproperlyConfigured(
-                "'%s' isn't a subclass of AppConfig." % entry)
+            raise ImproperlyConfigured("'%s' isn't a subclass of AppConfig." % entry)
 
         # Obtain app name here rather than in AppClass.__init__ to keep
         # all error checking for entries in INSTALLED_APPS in one place.
@@ -198,16 +203,15 @@ class AppConfig:
             try:
                 app_name = app_config_class.name
             except AttributeError:
-                raise ImproperlyConfigured(
-                    "'%s' must supply a name attribute." % entry
-                )
+                raise ImproperlyConfigured("'%s' must supply a name attribute." % entry)
 
         # Ensure app_name points to a valid module.
         try:
             app_module = import_module(app_name)
         except ImportError:
             raise ImproperlyConfigured(
-                "Cannot import '%s'. Check that '%s.%s.name' is correct." % (
+                "Cannot import '%s'. Check that '%s.%s.name' is correct."
+                % (
                     app_name,
                     app_config_class.__module__,
                     app_config_class.__qualname__,
@@ -231,7 +235,8 @@ class AppConfig:
             return self.models[model_name.lower()]
         except KeyError:
             raise LookupError(
-                "App '%s' doesn't have a '%s' model." % (self.label, model_name))
+                "App '%s' doesn't have a '%s' model." % (self.label, model_name)
+            )
 
     def get_models(self, include_auto_created=False, include_swapped=False):
         """
@@ -260,7 +265,7 @@ class AppConfig:
         self.models = self.apps.all_models[self.label]
 
         if module_has_submodule(self.module, MODELS_MODULE_NAME):
-            models_module_name = '%s.%s' % (self.name, MODELS_MODULE_NAME)
+            models_module_name = "%s.%s" % (self.name, MODELS_MODULE_NAME)
             self.models_module = import_module(models_module_name)
 
     def ready(self):

+ 23 - 16
django/apps/registry.py

@@ -21,7 +21,7 @@ class Apps:
         # installed_apps is set to None when creating the master registry
         # because it cannot be populated at that point. Other registries must
         # provide a list of installed apps and are populated immediately.
-        if installed_apps is None and hasattr(sys.modules[__name__], 'apps'):
+        if installed_apps is None and hasattr(sys.modules[__name__], "apps"):
             raise RuntimeError("You must supply an installed_apps argument.")
 
         # Mapping of app labels => model names => model classes. Every time a
@@ -92,20 +92,22 @@ class Apps:
                 if app_config.label in self.app_configs:
                     raise ImproperlyConfigured(
                         "Application labels aren't unique, "
-                        "duplicates: %s" % app_config.label)
+                        "duplicates: %s" % app_config.label
+                    )
 
                 self.app_configs[app_config.label] = app_config
                 app_config.apps = self
 
             # Check for duplicate app names.
             counts = Counter(
-                app_config.name for app_config in self.app_configs.values())
-            duplicates = [
-                name for name, count in counts.most_common() if count > 1]
+                app_config.name for app_config in self.app_configs.values()
+            )
+            duplicates = [name for name, count in counts.most_common() if count > 1]
             if duplicates:
                 raise ImproperlyConfigured(
                     "Application names aren't unique, "
-                    "duplicates: %s" % ", ".join(duplicates))
+                    "duplicates: %s" % ", ".join(duplicates)
+                )
 
             self.apps_ready = True
 
@@ -201,7 +203,7 @@ class Apps:
             self.check_apps_ready()
 
         if model_name is None:
-            app_label, model_name = app_label.split('.')
+            app_label, model_name = app_label.split(".")
 
         app_config = self.get_app_config(app_label)
 
@@ -217,17 +219,22 @@ class Apps:
         model_name = model._meta.model_name
         app_models = self.all_models[app_label]
         if model_name in app_models:
-            if (model.__name__ == app_models[model_name].__name__ and
-                    model.__module__ == app_models[model_name].__module__):
+            if (
+                model.__name__ == app_models[model_name].__name__
+                and model.__module__ == app_models[model_name].__module__
+            ):
                 warnings.warn(
                     "Model '%s.%s' was already registered. "
                     "Reloading models is not advised as it can lead to inconsistencies, "
                     "most notably with related models." % (app_label, model_name),
-                    RuntimeWarning, stacklevel=2)
+                    RuntimeWarning,
+                    stacklevel=2,
+                )
             else:
                 raise RuntimeError(
-                    "Conflicting '%s' models in application '%s': %s and %s." %
-                    (model_name, app_label, app_models[model_name], model))
+                    "Conflicting '%s' models in application '%s': %s and %s."
+                    % (model_name, app_label, app_models[model_name], model)
+                )
         app_models[model_name] = model
         self.do_pending_operations(model)
         self.clear_cache()
@@ -254,8 +261,8 @@ class Apps:
         candidates = []
         for app_config in self.app_configs.values():
             if object_name.startswith(app_config.name):
-                subpath = object_name[len(app_config.name):]
-                if subpath == '' or subpath[0] == '.':
+                subpath = object_name[len(app_config.name) :]
+                if subpath == "" or subpath[0] == ".":
                     candidates.append(app_config)
         if candidates:
             return sorted(candidates, key=lambda ac: -len(ac.name))[0]
@@ -270,8 +277,7 @@ class Apps:
         """
         model = self.all_models[app_label].get(model_name.lower())
         if model is None:
-            raise LookupError(
-                "Model '%s.%s' not registered." % (app_label, model_name))
+            raise LookupError("Model '%s.%s' not registered." % (app_label, model_name))
         return model
 
     @functools.lru_cache(maxsize=None)
@@ -403,6 +409,7 @@ class Apps:
             def apply_next_model(model):
                 next_function = partial(apply_next_model.func, model)
                 self.lazy_model_operation(next_function, *more_models)
+
             apply_next_model.func = function
 
             # If the model has already been imported and registered, partially

+ 58 - 47
django/conf/__init__.py

@@ -23,20 +23,20 @@ ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
 
 # RemovedInDjango50Warning
 USE_DEPRECATED_PYTZ_DEPRECATED_MSG = (
-    'The USE_DEPRECATED_PYTZ setting, and support for pytz timezones is '
-    'deprecated in favor of the stdlib zoneinfo module. Please update your '
-    'code to use zoneinfo and remove the USE_DEPRECATED_PYTZ setting.'
+    "The USE_DEPRECATED_PYTZ setting, and support for pytz timezones is "
+    "deprecated in favor of the stdlib zoneinfo module. Please update your "
+    "code to use zoneinfo and remove the USE_DEPRECATED_PYTZ setting."
 )
 
 USE_L10N_DEPRECATED_MSG = (
-    'The USE_L10N setting is deprecated. Starting with Django 5.0, localized '
-    'formatting of data will always be enabled. For example Django will '
-    'display numbers and dates using the format of the current locale.'
+    "The USE_L10N setting is deprecated. Starting with Django 5.0, localized "
+    "formatting of data will always be enabled. For example Django will "
+    "display numbers and dates using the format of the current locale."
 )
 
 CSRF_COOKIE_MASKED_DEPRECATED_MSG = (
-    'The CSRF_COOKIE_MASKED transitional setting is deprecated. Support for '
-    'it will be removed in Django 5.0.'
+    "The CSRF_COOKIE_MASKED transitional setting is deprecated. Support for "
+    "it will be removed in Django 5.0."
 )
 
 
@@ -45,6 +45,7 @@ class SettingsReference(str):
     String subclass which references a current settings value. It's treated as
     the value in memory but serializes to a settings.NAME attribute reference.
     """
+
     def __new__(self, value, setting_name):
         return str.__new__(self, value)
 
@@ -58,6 +59,7 @@ class LazySettings(LazyObject):
     The user can manually configure settings prior to using them. Otherwise,
     Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
     """
+
     def _setup(self, name=None):
         """
         Load the settings module pointed to by the environment variable. This
@@ -71,16 +73,17 @@ class LazySettings(LazyObject):
                 "Requested %s, but settings are not configured. "
                 "You must either define the environment variable %s "
                 "or call settings.configure() before accessing settings."
-                % (desc, ENVIRONMENT_VARIABLE))
+                % (desc, ENVIRONMENT_VARIABLE)
+            )
 
         self._wrapped = Settings(settings_module)
 
     def __repr__(self):
         # Hardcode the class name as otherwise it yields 'Settings'.
         if self._wrapped is empty:
-            return '<LazySettings [Unevaluated]>'
+            return "<LazySettings [Unevaluated]>"
         return '<LazySettings "%(settings_module)s">' % {
-            'settings_module': self._wrapped.SETTINGS_MODULE,
+            "settings_module": self._wrapped.SETTINGS_MODULE,
         }
 
     def __getattr__(self, name):
@@ -91,9 +94,9 @@ class LazySettings(LazyObject):
 
         # Special case some settings which require further modification.
         # This is done here for performance reasons so the modified value is cached.
-        if name in {'MEDIA_URL', 'STATIC_URL'} and val is not None:
+        if name in {"MEDIA_URL", "STATIC_URL"} and val is not None:
             val = self._add_script_prefix(val)
-        elif name == 'SECRET_KEY' and not val:
+        elif name == "SECRET_KEY" and not val:
             raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
 
         self.__dict__[name] = val
@@ -104,7 +107,7 @@ class LazySettings(LazyObject):
         Set the value of setting. Clear all cached values if _wrapped changes
         (@override_settings does this) or clear single values when set.
         """
-        if name == '_wrapped':
+        if name == "_wrapped":
             self.__dict__.clear()
         else:
             self.__dict__.pop(name, None)
@@ -122,11 +125,11 @@ class LazySettings(LazyObject):
         argument must support attribute access (__getattr__)).
         """
         if self._wrapped is not empty:
-            raise RuntimeError('Settings already configured.')
+            raise RuntimeError("Settings already configured.")
         holder = UserSettingsHolder(default_settings)
         for name, value in options.items():
             if not name.isupper():
-                raise TypeError('Setting %r must be uppercase.' % name)
+                raise TypeError("Setting %r must be uppercase." % name)
             setattr(holder, name, value)
         self._wrapped = holder
 
@@ -139,10 +142,11 @@ class LazySettings(LazyObject):
         subpath to STATIC_URL and MEDIA_URL in settings is inconvenient.
         """
         # Don't apply prefix to absolute paths and URLs.
-        if value.startswith(('http://', 'https://', '/')):
+        if value.startswith(("http://", "https://", "/")):
             return value
         from django.urls import get_script_prefix
-        return '%s%s' % (get_script_prefix(), value)
+
+        return "%s%s" % (get_script_prefix(), value)
 
     @property
     def configured(self):
@@ -161,14 +165,14 @@ class LazySettings(LazyObject):
                 RemovedInDjango50Warning,
                 stacklevel=2,
             )
-        return self.__getattr__('USE_L10N')
+        return self.__getattr__("USE_L10N")
 
     # RemovedInDjango50Warning.
     @property
     def _USE_L10N_INTERNAL(self):
         # Special hook to avoid checking a traceback in internal use on hot
         # paths.
-        return self.__getattr__('USE_L10N')
+        return self.__getattr__("USE_L10N")
 
 
 class Settings:
@@ -184,7 +188,7 @@ class Settings:
         mod = importlib.import_module(self.SETTINGS_MODULE)
 
         tuple_settings = (
-            'ALLOWED_HOSTS',
+            "ALLOWED_HOSTS",
             "INSTALLED_APPS",
             "TEMPLATE_DIRS",
             "LOCALE_PATHS",
@@ -195,39 +199,42 @@ class Settings:
             if setting.isupper():
                 setting_value = getattr(mod, setting)
 
-                if (setting in tuple_settings and
-                        not isinstance(setting_value, (list, tuple))):
-                    raise ImproperlyConfigured("The %s setting must be a list or a tuple." % setting)
+                if setting in tuple_settings and not isinstance(
+                    setting_value, (list, tuple)
+                ):
+                    raise ImproperlyConfigured(
+                        "The %s setting must be a list or a tuple." % setting
+                    )
                 setattr(self, setting, setting_value)
                 self._explicit_settings.add(setting)
 
-        if self.USE_TZ is False and not self.is_overridden('USE_TZ'):
+        if self.USE_TZ is False and not self.is_overridden("USE_TZ"):
             warnings.warn(
-                'The default value of USE_TZ will change from False to True '
-                'in Django 5.0. Set USE_TZ to False in your project settings '
-                'if you want to keep the current default behavior.',
+                "The default value of USE_TZ will change from False to True "
+                "in Django 5.0. Set USE_TZ to False in your project settings "
+                "if you want to keep the current default behavior.",
                 category=RemovedInDjango50Warning,
             )
 
-        if self.is_overridden('USE_DEPRECATED_PYTZ'):
+        if self.is_overridden("USE_DEPRECATED_PYTZ"):
             warnings.warn(USE_DEPRECATED_PYTZ_DEPRECATED_MSG, RemovedInDjango50Warning)
 
-        if self.is_overridden('CSRF_COOKIE_MASKED'):
+        if self.is_overridden("CSRF_COOKIE_MASKED"):
             warnings.warn(CSRF_COOKIE_MASKED_DEPRECATED_MSG, RemovedInDjango50Warning)
 
-        if hasattr(time, 'tzset') and self.TIME_ZONE:
+        if hasattr(time, "tzset") and self.TIME_ZONE:
             # When we can, attempt to validate the timezone. If we can't find
             # this file, no check happens and it's harmless.
-            zoneinfo_root = Path('/usr/share/zoneinfo')
-            zone_info_file = zoneinfo_root.joinpath(*self.TIME_ZONE.split('/'))
+            zoneinfo_root = Path("/usr/share/zoneinfo")
+            zone_info_file = zoneinfo_root.joinpath(*self.TIME_ZONE.split("/"))
             if zoneinfo_root.exists() and not zone_info_file.exists():
                 raise ValueError("Incorrect timezone setting: %s" % self.TIME_ZONE)
             # Move the time zone info into os.environ. See ticket #2315 for why
             # we don't do this unconditionally (breaks Windows).
-            os.environ['TZ'] = self.TIME_ZONE
+            os.environ["TZ"] = self.TIME_ZONE
             time.tzset()
 
-        if self.is_overridden('USE_L10N'):
+        if self.is_overridden("USE_L10N"):
             warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning)
 
     def is_overridden(self, setting):
@@ -235,13 +242,14 @@ class Settings:
 
     def __repr__(self):
         return '<%(cls)s "%(settings_module)s">' % {
-            'cls': self.__class__.__name__,
-            'settings_module': self.SETTINGS_MODULE,
+            "cls": self.__class__.__name__,
+            "settings_module": self.SETTINGS_MODULE,
         }
 
 
 class UserSettingsHolder:
     """Holder for user configured settings."""
+
     # SETTINGS_MODULE doesn't make much sense in the manually configured
     # (standalone) case.
     SETTINGS_MODULE = None
@@ -251,7 +259,7 @@ class UserSettingsHolder:
         Requests for configuration variables not in this class are satisfied
         from the module specified in default_settings (if possible).
         """
-        self.__dict__['_deleted'] = set()
+        self.__dict__["_deleted"] = set()
         self.default_settings = default_settings
 
     def __getattr__(self, name):
@@ -261,12 +269,12 @@ class UserSettingsHolder:
 
     def __setattr__(self, name, value):
         self._deleted.discard(name)
-        if name == 'USE_L10N':
+        if name == "USE_L10N":
             warnings.warn(USE_L10N_DEPRECATED_MSG, RemovedInDjango50Warning)
-        if name == 'CSRF_COOKIE_MASKED':
+        if name == "CSRF_COOKIE_MASKED":
             warnings.warn(CSRF_COOKIE_MASKED_DEPRECATED_MSG, RemovedInDjango50Warning)
         super().__setattr__(name, value)
-        if name == 'USE_DEPRECATED_PYTZ':
+        if name == "USE_DEPRECATED_PYTZ":
             warnings.warn(USE_DEPRECATED_PYTZ_DEPRECATED_MSG, RemovedInDjango50Warning)
 
     def __delattr__(self, name):
@@ -276,19 +284,22 @@ class UserSettingsHolder:
 
     def __dir__(self):
         return sorted(
-            s for s in [*self.__dict__, *dir(self.default_settings)]
+            s
+            for s in [*self.__dict__, *dir(self.default_settings)]
             if s not in self._deleted
         )
 
     def is_overridden(self, setting):
-        deleted = (setting in self._deleted)
-        set_locally = (setting in self.__dict__)
-        set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting)
+        deleted = setting in self._deleted
+        set_locally = setting in self.__dict__
+        set_on_default = getattr(
+            self.default_settings, "is_overridden", lambda s: False
+        )(setting)
         return deleted or set_locally or set_on_default
 
     def __repr__(self):
-        return '<%(cls)s>' % {
-            'cls': self.__class__.__name__,
+        return "<%(cls)s>" % {
+            "cls": self.__class__.__name__,
         }
 
 

+ 187 - 187
django/conf/global_settings.py

@@ -38,7 +38,7 @@ ALLOWED_HOSTS = []
 # https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
 # systems may support all possibilities). When USE_TZ is True, this is
 # interpreted as the default user time zone.
-TIME_ZONE = 'America/Chicago'
+TIME_ZONE = "America/Chicago"
 
 # If you set this to True, Django will use timezone-aware datetimes.
 USE_TZ = False
@@ -50,107 +50,107 @@ USE_DEPRECATED_PYTZ = False
 
 # Language code for this installation. All choices can be found here:
 # http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'en-us'
+LANGUAGE_CODE = "en-us"
 
 # Languages we provide translations for, out of the box.
 LANGUAGES = [
-    ('af', gettext_noop('Afrikaans')),
-    ('ar', gettext_noop('Arabic')),
-    ('ar-dz', gettext_noop('Algerian Arabic')),
-    ('ast', gettext_noop('Asturian')),
-    ('az', gettext_noop('Azerbaijani')),
-    ('bg', gettext_noop('Bulgarian')),
-    ('be', gettext_noop('Belarusian')),
-    ('bn', gettext_noop('Bengali')),
-    ('br', gettext_noop('Breton')),
-    ('bs', gettext_noop('Bosnian')),
-    ('ca', gettext_noop('Catalan')),
-    ('cs', gettext_noop('Czech')),
-    ('cy', gettext_noop('Welsh')),
-    ('da', gettext_noop('Danish')),
-    ('de', gettext_noop('German')),
-    ('dsb', gettext_noop('Lower Sorbian')),
-    ('el', gettext_noop('Greek')),
-    ('en', gettext_noop('English')),
-    ('en-au', gettext_noop('Australian English')),
-    ('en-gb', gettext_noop('British English')),
-    ('eo', gettext_noop('Esperanto')),
-    ('es', gettext_noop('Spanish')),
-    ('es-ar', gettext_noop('Argentinian Spanish')),
-    ('es-co', gettext_noop('Colombian Spanish')),
-    ('es-mx', gettext_noop('Mexican Spanish')),
-    ('es-ni', gettext_noop('Nicaraguan Spanish')),
-    ('es-ve', gettext_noop('Venezuelan Spanish')),
-    ('et', gettext_noop('Estonian')),
-    ('eu', gettext_noop('Basque')),
-    ('fa', gettext_noop('Persian')),
-    ('fi', gettext_noop('Finnish')),
-    ('fr', gettext_noop('French')),
-    ('fy', gettext_noop('Frisian')),
-    ('ga', gettext_noop('Irish')),
-    ('gd', gettext_noop('Scottish Gaelic')),
-    ('gl', gettext_noop('Galician')),
-    ('he', gettext_noop('Hebrew')),
-    ('hi', gettext_noop('Hindi')),
-    ('hr', gettext_noop('Croatian')),
-    ('hsb', gettext_noop('Upper Sorbian')),
-    ('hu', gettext_noop('Hungarian')),
-    ('hy', gettext_noop('Armenian')),
-    ('ia', gettext_noop('Interlingua')),
-    ('id', gettext_noop('Indonesian')),
-    ('ig', gettext_noop('Igbo')),
-    ('io', gettext_noop('Ido')),
-    ('is', gettext_noop('Icelandic')),
-    ('it', gettext_noop('Italian')),
-    ('ja', gettext_noop('Japanese')),
-    ('ka', gettext_noop('Georgian')),
-    ('kab', gettext_noop('Kabyle')),
-    ('kk', gettext_noop('Kazakh')),
-    ('km', gettext_noop('Khmer')),
-    ('kn', gettext_noop('Kannada')),
-    ('ko', gettext_noop('Korean')),
-    ('ky', gettext_noop('Kyrgyz')),
-    ('lb', gettext_noop('Luxembourgish')),
-    ('lt', gettext_noop('Lithuanian')),
-    ('lv', gettext_noop('Latvian')),
-    ('mk', gettext_noop('Macedonian')),
-    ('ml', gettext_noop('Malayalam')),
-    ('mn', gettext_noop('Mongolian')),
-    ('mr', gettext_noop('Marathi')),
-    ('ms', gettext_noop('Malay')),
-    ('my', gettext_noop('Burmese')),
-    ('nb', gettext_noop('Norwegian Bokmål')),
-    ('ne', gettext_noop('Nepali')),
-    ('nl', gettext_noop('Dutch')),
-    ('nn', gettext_noop('Norwegian Nynorsk')),
-    ('os', gettext_noop('Ossetic')),
-    ('pa', gettext_noop('Punjabi')),
-    ('pl', gettext_noop('Polish')),
-    ('pt', gettext_noop('Portuguese')),
-    ('pt-br', gettext_noop('Brazilian Portuguese')),
-    ('ro', gettext_noop('Romanian')),
-    ('ru', gettext_noop('Russian')),
-    ('sk', gettext_noop('Slovak')),
-    ('sl', gettext_noop('Slovenian')),
-    ('sq', gettext_noop('Albanian')),
-    ('sr', gettext_noop('Serbian')),
-    ('sr-latn', gettext_noop('Serbian Latin')),
-    ('sv', gettext_noop('Swedish')),
-    ('sw', gettext_noop('Swahili')),
-    ('ta', gettext_noop('Tamil')),
-    ('te', gettext_noop('Telugu')),
-    ('tg', gettext_noop('Tajik')),
-    ('th', gettext_noop('Thai')),
-    ('tk', gettext_noop('Turkmen')),
-    ('tr', gettext_noop('Turkish')),
-    ('tt', gettext_noop('Tatar')),
-    ('udm', gettext_noop('Udmurt')),
-    ('uk', gettext_noop('Ukrainian')),
-    ('ur', gettext_noop('Urdu')),
-    ('uz', gettext_noop('Uzbek')),
-    ('vi', gettext_noop('Vietnamese')),
-    ('zh-hans', gettext_noop('Simplified Chinese')),
-    ('zh-hant', gettext_noop('Traditional Chinese')),
+    ("af", gettext_noop("Afrikaans")),
+    ("ar", gettext_noop("Arabic")),
+    ("ar-dz", gettext_noop("Algerian Arabic")),
+    ("ast", gettext_noop("Asturian")),
+    ("az", gettext_noop("Azerbaijani")),
+    ("bg", gettext_noop("Bulgarian")),
+    ("be", gettext_noop("Belarusian")),
+    ("bn", gettext_noop("Bengali")),
+    ("br", gettext_noop("Breton")),
+    ("bs", gettext_noop("Bosnian")),
+    ("ca", gettext_noop("Catalan")),
+    ("cs", gettext_noop("Czech")),
+    ("cy", gettext_noop("Welsh")),
+    ("da", gettext_noop("Danish")),
+    ("de", gettext_noop("German")),
+    ("dsb", gettext_noop("Lower Sorbian")),
+    ("el", gettext_noop("Greek")),
+    ("en", gettext_noop("English")),
+    ("en-au", gettext_noop("Australian English")),
+    ("en-gb", gettext_noop("British English")),
+    ("eo", gettext_noop("Esperanto")),
+    ("es", gettext_noop("Spanish")),
+    ("es-ar", gettext_noop("Argentinian Spanish")),
+    ("es-co", gettext_noop("Colombian Spanish")),
+    ("es-mx", gettext_noop("Mexican Spanish")),
+    ("es-ni", gettext_noop("Nicaraguan Spanish")),
+    ("es-ve", gettext_noop("Venezuelan Spanish")),
+    ("et", gettext_noop("Estonian")),
+    ("eu", gettext_noop("Basque")),
+    ("fa", gettext_noop("Persian")),
+    ("fi", gettext_noop("Finnish")),
+    ("fr", gettext_noop("French")),
+    ("fy", gettext_noop("Frisian")),
+    ("ga", gettext_noop("Irish")),
+    ("gd", gettext_noop("Scottish Gaelic")),
+    ("gl", gettext_noop("Galician")),
+    ("he", gettext_noop("Hebrew")),
+    ("hi", gettext_noop("Hindi")),
+    ("hr", gettext_noop("Croatian")),
+    ("hsb", gettext_noop("Upper Sorbian")),
+    ("hu", gettext_noop("Hungarian")),
+    ("hy", gettext_noop("Armenian")),
+    ("ia", gettext_noop("Interlingua")),
+    ("id", gettext_noop("Indonesian")),
+    ("ig", gettext_noop("Igbo")),
+    ("io", gettext_noop("Ido")),
+    ("is", gettext_noop("Icelandic")),
+    ("it", gettext_noop("Italian")),
+    ("ja", gettext_noop("Japanese")),
+    ("ka", gettext_noop("Georgian")),
+    ("kab", gettext_noop("Kabyle")),
+    ("kk", gettext_noop("Kazakh")),
+    ("km", gettext_noop("Khmer")),
+    ("kn", gettext_noop("Kannada")),
+    ("ko", gettext_noop("Korean")),
+    ("ky", gettext_noop("Kyrgyz")),
+    ("lb", gettext_noop("Luxembourgish")),
+    ("lt", gettext_noop("Lithuanian")),
+    ("lv", gettext_noop("Latvian")),
+    ("mk", gettext_noop("Macedonian")),
+    ("ml", gettext_noop("Malayalam")),
+    ("mn", gettext_noop("Mongolian")),
+    ("mr", gettext_noop("Marathi")),
+    ("ms", gettext_noop("Malay")),
+    ("my", gettext_noop("Burmese")),
+    ("nb", gettext_noop("Norwegian Bokmål")),
+    ("ne", gettext_noop("Nepali")),
+    ("nl", gettext_noop("Dutch")),
+    ("nn", gettext_noop("Norwegian Nynorsk")),
+    ("os", gettext_noop("Ossetic")),
+    ("pa", gettext_noop("Punjabi")),
+    ("pl", gettext_noop("Polish")),
+    ("pt", gettext_noop("Portuguese")),
+    ("pt-br", gettext_noop("Brazilian Portuguese")),
+    ("ro", gettext_noop("Romanian")),
+    ("ru", gettext_noop("Russian")),
+    ("sk", gettext_noop("Slovak")),
+    ("sl", gettext_noop("Slovenian")),
+    ("sq", gettext_noop("Albanian")),
+    ("sr", gettext_noop("Serbian")),
+    ("sr-latn", gettext_noop("Serbian Latin")),
+    ("sv", gettext_noop("Swedish")),
+    ("sw", gettext_noop("Swahili")),
+    ("ta", gettext_noop("Tamil")),
+    ("te", gettext_noop("Telugu")),
+    ("tg", gettext_noop("Tajik")),
+    ("th", gettext_noop("Thai")),
+    ("tk", gettext_noop("Turkmen")),
+    ("tr", gettext_noop("Turkish")),
+    ("tt", gettext_noop("Tatar")),
+    ("udm", gettext_noop("Udmurt")),
+    ("uk", gettext_noop("Ukrainian")),
+    ("ur", gettext_noop("Urdu")),
+    ("uz", gettext_noop("Uzbek")),
+    ("vi", gettext_noop("Vietnamese")),
+    ("zh-hans", gettext_noop("Simplified Chinese")),
+    ("zh-hant", gettext_noop("Traditional Chinese")),
 ]
 
 # Languages using BiDi (right-to-left) layout
@@ -162,10 +162,10 @@ USE_I18N = True
 LOCALE_PATHS = []
 
 # Settings for language cookie
-LANGUAGE_COOKIE_NAME = 'django_language'
+LANGUAGE_COOKIE_NAME = "django_language"
 LANGUAGE_COOKIE_AGE = None
 LANGUAGE_COOKIE_DOMAIN = None
-LANGUAGE_COOKIE_PATH = '/'
+LANGUAGE_COOKIE_PATH = "/"
 LANGUAGE_COOKIE_SECURE = False
 LANGUAGE_COOKIE_HTTPONLY = False
 LANGUAGE_COOKIE_SAMESITE = None
@@ -181,10 +181,10 @@ MANAGERS = ADMINS
 
 # Default charset to use for all HttpResponse objects, if a MIME type isn't
 # manually specified. It's used to construct the Content-Type header.
-DEFAULT_CHARSET = 'utf-8'
+DEFAULT_CHARSET = "utf-8"
 
 # Email address that error messages come from.
-SERVER_EMAIL = 'root@localhost'
+SERVER_EMAIL = "root@localhost"
 
 # Database connection info. If left empty, will default to the dummy backend.
 DATABASES = {}
@@ -196,10 +196,10 @@ DATABASE_ROUTERS = []
 # The default is to use the SMTP backend.
 # Third-party backends can be specified by providing a Python path
 # to a module that defines an EmailBackend class.
-EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
 
 # Host for sending email.
-EMAIL_HOST = 'localhost'
+EMAIL_HOST = "localhost"
 
 # Port for sending email.
 EMAIL_PORT = 25
@@ -208,8 +208,8 @@ EMAIL_PORT = 25
 EMAIL_USE_LOCALTIME = False
 
 # Optional SMTP authentication information for EMAIL_HOST.
-EMAIL_HOST_USER = ''
-EMAIL_HOST_PASSWORD = ''
+EMAIL_HOST_USER = ""
+EMAIL_HOST_PASSWORD = ""
 EMAIL_USE_TLS = False
 EMAIL_USE_SSL = False
 EMAIL_SSL_CERTFILE = None
@@ -222,15 +222,15 @@ INSTALLED_APPS = []
 TEMPLATES = []
 
 # Default form rendering class.
-FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
+FORM_RENDERER = "django.forms.renderers.DjangoTemplates"
 
 # Default email address to use for various automated correspondence from
 # the site managers.
-DEFAULT_FROM_EMAIL = 'webmaster@localhost'
+DEFAULT_FROM_EMAIL = "webmaster@localhost"
 
 # Subject-line prefix for email messages send with django.core.mail.mail_admins
 # or ...mail_managers.  Make sure to include the trailing space.
-EMAIL_SUBJECT_PREFIX = '[Django] '
+EMAIL_SUBJECT_PREFIX = "[Django] "
 
 # Whether to append trailing slashes to URLs.
 APPEND_SLASH = True
@@ -270,22 +270,22 @@ IGNORABLE_404_URLS = []
 # A secret key for this particular Django installation. Used in secret-key
 # hashing algorithms. Set this in your settings, or Django will complain
 # loudly.
-SECRET_KEY = ''
+SECRET_KEY = ""
 
 # List of secret keys used to verify the validity of signatures. This allows
 # secret key rotation.
 SECRET_KEY_FALLBACKS = []
 
 # Default file storage mechanism that holds media.
-DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
+DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage"
 
 # Absolute filesystem path to the directory that will hold user-uploaded files.
 # Example: "/var/www/example.com/media/"
-MEDIA_ROOT = ''
+MEDIA_ROOT = ""
 
 # URL that handles the media served from MEDIA_ROOT.
 # Examples: "http://example.com/media/", "http://media.example.com/"
-MEDIA_URL = ''
+MEDIA_URL = ""
 
 # Absolute path to the directory static files should be collected to.
 # Example: "/var/www/example.com/static/"
@@ -297,8 +297,8 @@ STATIC_URL = None
 
 # List of upload handler classes to be applied in order.
 FILE_UPLOAD_HANDLERS = [
-    'django.core.files.uploadhandler.MemoryFileUploadHandler',
-    'django.core.files.uploadhandler.TemporaryFileUploadHandler',
+    "django.core.files.uploadhandler.MemoryFileUploadHandler",
+    "django.core.files.uploadhandler.TemporaryFileUploadHandler",
 ]
 
 # Maximum size, in bytes, of a request before it will be streamed to the
@@ -335,51 +335,51 @@ FORMAT_MODULE_PATH = None
 
 # Default formatting for date objects. See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'N j, Y'
+DATE_FORMAT = "N j, Y"
 
 # Default formatting for datetime objects. See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATETIME_FORMAT = 'N j, Y, P'
+DATETIME_FORMAT = "N j, Y, P"
 
 # Default formatting for time objects. See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-TIME_FORMAT = 'P'
+TIME_FORMAT = "P"
 
 # Default formatting for date objects when only the year and month are relevant.
 # See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-YEAR_MONTH_FORMAT = 'F Y'
+YEAR_MONTH_FORMAT = "F Y"
 
 # Default formatting for date objects when only the month and day are relevant.
 # See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-MONTH_DAY_FORMAT = 'F j'
+MONTH_DAY_FORMAT = "F j"
 
 # Default short formatting for date objects. See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-SHORT_DATE_FORMAT = 'm/d/Y'
+SHORT_DATE_FORMAT = "m/d/Y"
 
 # Default short formatting for datetime objects.
 # See all available format strings here:
 # https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
+SHORT_DATETIME_FORMAT = "m/d/Y P"
 
 # Default formats to be used when parsing dates from input boxes, in order
 # See all available format string here:
 # https://docs.python.org/library/datetime.html#strftime-behavior
 # * Note that these format strings are different from the ones to display dates
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%m/%d/%Y',  # '10/25/2006'
-    '%m/%d/%y',  # '10/25/06'
-    '%b %d %Y',  # 'Oct 25 2006'
-    '%b %d, %Y',  # 'Oct 25, 2006'
-    '%d %b %Y',  # '25 Oct 2006'
-    '%d %b, %Y',  # '25 Oct, 2006'
-    '%B %d %Y',  # 'October 25 2006'
-    '%B %d, %Y',  # 'October 25, 2006'
-    '%d %B %Y',  # '25 October 2006'
-    '%d %B, %Y',  # '25 October, 2006'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
+    "%b %d %Y",  # 'Oct 25 2006'
+    "%b %d, %Y",  # 'Oct 25, 2006'
+    "%d %b %Y",  # '25 Oct 2006'
+    "%d %b, %Y",  # '25 Oct, 2006'
+    "%B %d %Y",  # 'October 25 2006'
+    "%B %d, %Y",  # 'October 25, 2006'
+    "%d %B %Y",  # '25 October 2006'
+    "%d %B, %Y",  # '25 October, 2006'
 ]
 
 # Default formats to be used when parsing times from input boxes, in order
@@ -387,9 +387,9 @@ DATE_INPUT_FORMATS = [
 # https://docs.python.org/library/datetime.html#strftime-behavior
 # * Note that these format strings are different from the ones to display dates
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
 ]
 
 # Default formats to be used when parsing dates and times from input boxes,
@@ -398,15 +398,15 @@ TIME_INPUT_FORMATS = [
 # https://docs.python.org/library/datetime.html#strftime-behavior
 # * Note that these format strings are different from the ones to display dates
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
 ]
 
 # First day of week, to be used on calendars
@@ -414,7 +414,7 @@ DATETIME_INPUT_FORMATS = [
 FIRST_DAY_OF_WEEK = 0
 
 # Decimal separator symbol
-DECIMAL_SEPARATOR = '.'
+DECIMAL_SEPARATOR = "."
 
 # Boolean that sets whether to add thousand separator when formatting numbers
 USE_THOUSAND_SEPARATOR = False
@@ -424,17 +424,17 @@ USE_THOUSAND_SEPARATOR = False
 NUMBER_GROUPING = 0
 
 # Thousand separator symbol
-THOUSAND_SEPARATOR = ','
+THOUSAND_SEPARATOR = ","
 
 # The tablespaces to use for each model when not specified otherwise.
-DEFAULT_TABLESPACE = ''
-DEFAULT_INDEX_TABLESPACE = ''
+DEFAULT_TABLESPACE = ""
+DEFAULT_INDEX_TABLESPACE = ""
 
 # Default primary key field type.
-DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
+DEFAULT_AUTO_FIELD = "django.db.models.AutoField"
 
 # Default X-Frame-Options header value
-X_FRAME_OPTIONS = 'DENY'
+X_FRAME_OPTIONS = "DENY"
 
 USE_X_FORWARDED_HOST = False
 USE_X_FORWARDED_PORT = False
@@ -469,9 +469,9 @@ MIDDLEWARE = []
 ############
 
 # Cache to store session data if using the cache session backend.
-SESSION_CACHE_ALIAS = 'default'
+SESSION_CACHE_ALIAS = "default"
 # Cookie name. This can be whatever you want.
-SESSION_COOKIE_NAME = 'sessionid'
+SESSION_COOKIE_NAME = "sessionid"
 # Age of cookie, in seconds (default: 2 weeks).
 SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
 # A string like "example.com", or None for standard domain cookie.
@@ -479,23 +479,23 @@ SESSION_COOKIE_DOMAIN = None
 # Whether the session cookie should be secure (https:// only).
 SESSION_COOKIE_SECURE = False
 # The path of the session cookie.
-SESSION_COOKIE_PATH = '/'
+SESSION_COOKIE_PATH = "/"
 # Whether to use the HttpOnly flag.
 SESSION_COOKIE_HTTPONLY = True
 # Whether to set the flag restricting cookie leaks on cross-site requests.
 # This can be 'Lax', 'Strict', 'None', or False to disable the flag.
-SESSION_COOKIE_SAMESITE = 'Lax'
+SESSION_COOKIE_SAMESITE = "Lax"
 # Whether to save the session data on every request.
 SESSION_SAVE_EVERY_REQUEST = False
 # Whether a user's session cookie expires when the web browser is closed.
 SESSION_EXPIRE_AT_BROWSER_CLOSE = False
 # The module to store session data
-SESSION_ENGINE = 'django.contrib.sessions.backends.db'
+SESSION_ENGINE = "django.contrib.sessions.backends.db"
 # Directory to store session files if using the file session module. If None,
 # the backend will use a sensible default.
 SESSION_FILE_PATH = None
 # class to serialize session data
-SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
+SESSION_SERIALIZER = "django.contrib.sessions.serializers.JSONSerializer"
 
 #########
 # CACHE #
@@ -503,25 +503,25 @@ SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
 
 # The cache backends to use.
 CACHES = {
-    'default': {
-        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
+    "default": {
+        "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
     }
 }
-CACHE_MIDDLEWARE_KEY_PREFIX = ''
+CACHE_MIDDLEWARE_KEY_PREFIX = ""
 CACHE_MIDDLEWARE_SECONDS = 600
-CACHE_MIDDLEWARE_ALIAS = 'default'
+CACHE_MIDDLEWARE_ALIAS = "default"
 
 ##################
 # AUTHENTICATION #
 ##################
 
-AUTH_USER_MODEL = 'auth.User'
+AUTH_USER_MODEL = "auth.User"
 
-AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
+AUTHENTICATION_BACKENDS = ["django.contrib.auth.backends.ModelBackend"]
 
-LOGIN_URL = '/accounts/login/'
+LOGIN_URL = "/accounts/login/"
 
-LOGIN_REDIRECT_URL = '/accounts/profile/'
+LOGIN_REDIRECT_URL = "/accounts/profile/"
 
 LOGOUT_REDIRECT_URL = None
 
@@ -532,11 +532,11 @@ PASSWORD_RESET_TIMEOUT = 60 * 60 * 24 * 3
 # password using different algorithms will be converted automatically
 # upon login
 PASSWORD_HASHERS = [
-    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
-    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
-    'django.contrib.auth.hashers.Argon2PasswordHasher',
-    'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
-    'django.contrib.auth.hashers.ScryptPasswordHasher',
+    "django.contrib.auth.hashers.PBKDF2PasswordHasher",
+    "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
+    "django.contrib.auth.hashers.Argon2PasswordHasher",
+    "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
+    "django.contrib.auth.hashers.ScryptPasswordHasher",
 ]
 
 AUTH_PASSWORD_VALIDATORS = []
@@ -545,7 +545,7 @@ AUTH_PASSWORD_VALIDATORS = []
 # SIGNING #
 ###########
 
-SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
+SIGNING_BACKEND = "django.core.signing.TimestampSigner"
 
 ########
 # CSRF #
@@ -553,17 +553,17 @@ SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
 
 # Dotted path to callable to be used as view when a request is
 # rejected by the CSRF middleware.
-CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
+CSRF_FAILURE_VIEW = "django.views.csrf.csrf_failure"
 
 # Settings for CSRF cookie.
-CSRF_COOKIE_NAME = 'csrftoken'
+CSRF_COOKIE_NAME = "csrftoken"
 CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52
 CSRF_COOKIE_DOMAIN = None
-CSRF_COOKIE_PATH = '/'
+CSRF_COOKIE_PATH = "/"
 CSRF_COOKIE_SECURE = False
 CSRF_COOKIE_HTTPONLY = False
-CSRF_COOKIE_SAMESITE = 'Lax'
-CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
+CSRF_COOKIE_SAMESITE = "Lax"
+CSRF_HEADER_NAME = "HTTP_X_CSRFTOKEN"
 CSRF_TRUSTED_ORIGINS = []
 CSRF_USE_SESSIONS = False
 
@@ -576,7 +576,7 @@ CSRF_COOKIE_MASKED = False
 ############
 
 # Class to use as messages backend
-MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
+MESSAGE_STORAGE = "django.contrib.messages.storage.fallback.FallbackStorage"
 
 # Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
 # django.contrib.messages to avoid imports in this settings file.
@@ -586,25 +586,25 @@ MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
 ###########
 
 # The callable to use to configure logging
-LOGGING_CONFIG = 'logging.config.dictConfig'
+LOGGING_CONFIG = "logging.config.dictConfig"
 
 # Custom logging configuration.
 LOGGING = {}
 
 # Default exception reporter class used in case none has been
 # specifically assigned to the HttpRequest instance.
-DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
+DEFAULT_EXCEPTION_REPORTER = "django.views.debug.ExceptionReporter"
 
 # Default exception reporter filter class used in case none has been
 # specifically assigned to the HttpRequest instance.
-DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
+DEFAULT_EXCEPTION_REPORTER_FILTER = "django.views.debug.SafeExceptionReporterFilter"
 
 ###########
 # TESTING #
 ###########
 
 # The name of the class to use to run the test suite
-TEST_RUNNER = 'django.test.runner.DiscoverRunner'
+TEST_RUNNER = "django.test.runner.DiscoverRunner"
 
 # Apps that don't need to be serialized at test database creation time
 # (only apps with migrations are to start with)
@@ -625,13 +625,13 @@ FIXTURE_DIRS = []
 STATICFILES_DIRS = []
 
 # The default file storage backend used during the build process
-STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
+STATICFILES_STORAGE = "django.contrib.staticfiles.storage.StaticFilesStorage"
 
 # List of finder classes that know how to find static files in
 # various locations.
 STATICFILES_FINDERS = [
-    'django.contrib.staticfiles.finders.FileSystemFinder',
-    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+    "django.contrib.staticfiles.finders.FileSystemFinder",
+    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
     # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
 ]
 
@@ -656,11 +656,11 @@ SILENCED_SYSTEM_CHECKS = []
 # SECURITY MIDDLEWARE #
 #######################
 SECURE_CONTENT_TYPE_NOSNIFF = True
-SECURE_CROSS_ORIGIN_OPENER_POLICY = 'same-origin'
+SECURE_CROSS_ORIGIN_OPENER_POLICY = "same-origin"
 SECURE_HSTS_INCLUDE_SUBDOMAINS = False
 SECURE_HSTS_PRELOAD = False
 SECURE_HSTS_SECONDS = 0
 SECURE_REDIRECT_EXEMPT = []
-SECURE_REFERRER_POLICY = 'same-origin'
+SECURE_REFERRER_POLICY = "same-origin"
 SECURE_SSL_HOST = None
 SECURE_SSL_REDIRECT = False

+ 605 - 605
django/conf/locale/__init__.py

@@ -8,610 +8,610 @@ follow the traditional 'fr-ca' -> 'fr' fallback logic.
 """
 
 LANG_INFO = {
-    'af': {
-        'bidi': False,
-        'code': 'af',
-        'name': 'Afrikaans',
-        'name_local': 'Afrikaans',
-    },
-    'ar': {
-        'bidi': True,
-        'code': 'ar',
-        'name': 'Arabic',
-        'name_local': 'العربيّة',
-    },
-    'ar-dz': {
-        'bidi': True,
-        'code': 'ar-dz',
-        'name': 'Algerian Arabic',
-        'name_local': 'العربية الجزائرية',
-    },
-    'ast': {
-        'bidi': False,
-        'code': 'ast',
-        'name': 'Asturian',
-        'name_local': 'asturianu',
-    },
-    'az': {
-        'bidi': True,
-        'code': 'az',
-        'name': 'Azerbaijani',
-        'name_local': 'Azərbaycanca',
-    },
-    'be': {
-        'bidi': False,
-        'code': 'be',
-        'name': 'Belarusian',
-        'name_local': 'беларуская',
-    },
-    'bg': {
-        'bidi': False,
-        'code': 'bg',
-        'name': 'Bulgarian',
-        'name_local': 'български',
-    },
-    'bn': {
-        'bidi': False,
-        'code': 'bn',
-        'name': 'Bengali',
-        'name_local': 'বাংলা',
-    },
-    'br': {
-        'bidi': False,
-        'code': 'br',
-        'name': 'Breton',
-        'name_local': 'brezhoneg',
-    },
-    'bs': {
-        'bidi': False,
-        'code': 'bs',
-        'name': 'Bosnian',
-        'name_local': 'bosanski',
-    },
-    'ca': {
-        'bidi': False,
-        'code': 'ca',
-        'name': 'Catalan',
-        'name_local': 'català',
-    },
-    'cs': {
-        'bidi': False,
-        'code': 'cs',
-        'name': 'Czech',
-        'name_local': 'česky',
-    },
-    'cy': {
-        'bidi': False,
-        'code': 'cy',
-        'name': 'Welsh',
-        'name_local': 'Cymraeg',
-    },
-    'da': {
-        'bidi': False,
-        'code': 'da',
-        'name': 'Danish',
-        'name_local': 'dansk',
-    },
-    'de': {
-        'bidi': False,
-        'code': 'de',
-        'name': 'German',
-        'name_local': 'Deutsch',
-    },
-    'dsb': {
-        'bidi': False,
-        'code': 'dsb',
-        'name': 'Lower Sorbian',
-        'name_local': 'dolnoserbski',
-    },
-    'el': {
-        'bidi': False,
-        'code': 'el',
-        'name': 'Greek',
-        'name_local': 'Ελληνικά',
-    },
-    'en': {
-        'bidi': False,
-        'code': 'en',
-        'name': 'English',
-        'name_local': 'English',
-    },
-    'en-au': {
-        'bidi': False,
-        'code': 'en-au',
-        'name': 'Australian English',
-        'name_local': 'Australian English',
-    },
-    'en-gb': {
-        'bidi': False,
-        'code': 'en-gb',
-        'name': 'British English',
-        'name_local': 'British English',
-    },
-    'eo': {
-        'bidi': False,
-        'code': 'eo',
-        'name': 'Esperanto',
-        'name_local': 'Esperanto',
-    },
-    'es': {
-        'bidi': False,
-        'code': 'es',
-        'name': 'Spanish',
-        'name_local': 'español',
-    },
-    'es-ar': {
-        'bidi': False,
-        'code': 'es-ar',
-        'name': 'Argentinian Spanish',
-        'name_local': 'español de Argentina',
-    },
-    'es-co': {
-        'bidi': False,
-        'code': 'es-co',
-        'name': 'Colombian Spanish',
-        'name_local': 'español de Colombia',
-    },
-    'es-mx': {
-        'bidi': False,
-        'code': 'es-mx',
-        'name': 'Mexican Spanish',
-        'name_local': 'español de Mexico',
-    },
-    'es-ni': {
-        'bidi': False,
-        'code': 'es-ni',
-        'name': 'Nicaraguan Spanish',
-        'name_local': 'español de Nicaragua',
-    },
-    'es-ve': {
-        'bidi': False,
-        'code': 'es-ve',
-        'name': 'Venezuelan Spanish',
-        'name_local': 'español de Venezuela',
-    },
-    'et': {
-        'bidi': False,
-        'code': 'et',
-        'name': 'Estonian',
-        'name_local': 'eesti',
-    },
-    'eu': {
-        'bidi': False,
-        'code': 'eu',
-        'name': 'Basque',
-        'name_local': 'Basque',
-    },
-    'fa': {
-        'bidi': True,
-        'code': 'fa',
-        'name': 'Persian',
-        'name_local': 'فارسی',
-    },
-    'fi': {
-        'bidi': False,
-        'code': 'fi',
-        'name': 'Finnish',
-        'name_local': 'suomi',
-    },
-    'fr': {
-        'bidi': False,
-        'code': 'fr',
-        'name': 'French',
-        'name_local': 'français',
-    },
-    'fy': {
-        'bidi': False,
-        'code': 'fy',
-        'name': 'Frisian',
-        'name_local': 'frysk',
-    },
-    'ga': {
-        'bidi': False,
-        'code': 'ga',
-        'name': 'Irish',
-        'name_local': 'Gaeilge',
-    },
-    'gd': {
-        'bidi': False,
-        'code': 'gd',
-        'name': 'Scottish Gaelic',
-        'name_local': 'Gàidhlig',
-    },
-    'gl': {
-        'bidi': False,
-        'code': 'gl',
-        'name': 'Galician',
-        'name_local': 'galego',
-    },
-    'he': {
-        'bidi': True,
-        'code': 'he',
-        'name': 'Hebrew',
-        'name_local': 'עברית',
-    },
-    'hi': {
-        'bidi': False,
-        'code': 'hi',
-        'name': 'Hindi',
-        'name_local': 'हिंदी',
-    },
-    'hr': {
-        'bidi': False,
-        'code': 'hr',
-        'name': 'Croatian',
-        'name_local': 'Hrvatski',
-    },
-    'hsb': {
-        'bidi': False,
-        'code': 'hsb',
-        'name': 'Upper Sorbian',
-        'name_local': 'hornjoserbsce',
-    },
-    'hu': {
-        'bidi': False,
-        'code': 'hu',
-        'name': 'Hungarian',
-        'name_local': 'Magyar',
-    },
-    'hy': {
-        'bidi': False,
-        'code': 'hy',
-        'name': 'Armenian',
-        'name_local': 'հայերեն',
-    },
-    'ia': {
-        'bidi': False,
-        'code': 'ia',
-        'name': 'Interlingua',
-        'name_local': 'Interlingua',
-    },
-    'io': {
-        'bidi': False,
-        'code': 'io',
-        'name': 'Ido',
-        'name_local': 'ido',
-    },
-    'id': {
-        'bidi': False,
-        'code': 'id',
-        'name': 'Indonesian',
-        'name_local': 'Bahasa Indonesia',
-    },
-    'ig': {
-        'bidi': False,
-        'code': 'ig',
-        'name': 'Igbo',
-        'name_local': 'Asụsụ Ìgbò',
-    },
-    'is': {
-        'bidi': False,
-        'code': 'is',
-        'name': 'Icelandic',
-        'name_local': 'Íslenska',
-    },
-    'it': {
-        'bidi': False,
-        'code': 'it',
-        'name': 'Italian',
-        'name_local': 'italiano',
-    },
-    'ja': {
-        'bidi': False,
-        'code': 'ja',
-        'name': 'Japanese',
-        'name_local': '日本語',
-    },
-    'ka': {
-        'bidi': False,
-        'code': 'ka',
-        'name': 'Georgian',
-        'name_local': 'ქართული',
-    },
-    'kab': {
-        'bidi': False,
-        'code': 'kab',
-        'name': 'Kabyle',
-        'name_local': 'taqbaylit',
-    },
-    'kk': {
-        'bidi': False,
-        'code': 'kk',
-        'name': 'Kazakh',
-        'name_local': 'Қазақ',
-    },
-    'km': {
-        'bidi': False,
-        'code': 'km',
-        'name': 'Khmer',
-        'name_local': 'Khmer',
-    },
-    'kn': {
-        'bidi': False,
-        'code': 'kn',
-        'name': 'Kannada',
-        'name_local': 'Kannada',
-    },
-    'ko': {
-        'bidi': False,
-        'code': 'ko',
-        'name': 'Korean',
-        'name_local': '한국어',
-    },
-    'ky': {
-        'bidi': False,
-        'code': 'ky',
-        'name': 'Kyrgyz',
-        'name_local': 'Кыргызча',
-    },
-    'lb': {
-        'bidi': False,
-        'code': 'lb',
-        'name': 'Luxembourgish',
-        'name_local': 'Lëtzebuergesch',
-    },
-    'lt': {
-        'bidi': False,
-        'code': 'lt',
-        'name': 'Lithuanian',
-        'name_local': 'Lietuviškai',
-    },
-    'lv': {
-        'bidi': False,
-        'code': 'lv',
-        'name': 'Latvian',
-        'name_local': 'latviešu',
-    },
-    'mk': {
-        'bidi': False,
-        'code': 'mk',
-        'name': 'Macedonian',
-        'name_local': 'Македонски',
-    },
-    'ml': {
-        'bidi': False,
-        'code': 'ml',
-        'name': 'Malayalam',
-        'name_local': 'മലയാളം',
-    },
-    'mn': {
-        'bidi': False,
-        'code': 'mn',
-        'name': 'Mongolian',
-        'name_local': 'Mongolian',
-    },
-    'mr': {
-        'bidi': False,
-        'code': 'mr',
-        'name': 'Marathi',
-        'name_local': 'मराठी',
-    },
-    'ms': {
-        'bidi': False,
-        'code': 'ms',
-        'name': 'Malay',
-        'name_local': 'Bahasa Melayu',
-    },
-    'my': {
-        'bidi': False,
-        'code': 'my',
-        'name': 'Burmese',
-        'name_local': 'မြန်မာဘာသာ',
-    },
-    'nb': {
-        'bidi': False,
-        'code': 'nb',
-        'name': 'Norwegian Bokmal',
-        'name_local': 'norsk (bokmål)',
-    },
-    'ne': {
-        'bidi': False,
-        'code': 'ne',
-        'name': 'Nepali',
-        'name_local': 'नेपाली',
-    },
-    'nl': {
-        'bidi': False,
-        'code': 'nl',
-        'name': 'Dutch',
-        'name_local': 'Nederlands',
-    },
-    'nn': {
-        'bidi': False,
-        'code': 'nn',
-        'name': 'Norwegian Nynorsk',
-        'name_local': 'norsk (nynorsk)',
-    },
-    'no': {
-        'bidi': False,
-        'code': 'no',
-        'name': 'Norwegian',
-        'name_local': 'norsk',
-    },
-    'os': {
-        'bidi': False,
-        'code': 'os',
-        'name': 'Ossetic',
-        'name_local': 'Ирон',
-    },
-    'pa': {
-        'bidi': False,
-        'code': 'pa',
-        'name': 'Punjabi',
-        'name_local': 'Punjabi',
-    },
-    'pl': {
-        'bidi': False,
-        'code': 'pl',
-        'name': 'Polish',
-        'name_local': 'polski',
-    },
-    'pt': {
-        'bidi': False,
-        'code': 'pt',
-        'name': 'Portuguese',
-        'name_local': 'Português',
-    },
-    'pt-br': {
-        'bidi': False,
-        'code': 'pt-br',
-        'name': 'Brazilian Portuguese',
-        'name_local': 'Português Brasileiro',
-    },
-    'ro': {
-        'bidi': False,
-        'code': 'ro',
-        'name': 'Romanian',
-        'name_local': 'Română',
-    },
-    'ru': {
-        'bidi': False,
-        'code': 'ru',
-        'name': 'Russian',
-        'name_local': 'Русский',
-    },
-    'sk': {
-        'bidi': False,
-        'code': 'sk',
-        'name': 'Slovak',
-        'name_local': 'Slovensky',
-    },
-    'sl': {
-        'bidi': False,
-        'code': 'sl',
-        'name': 'Slovenian',
-        'name_local': 'Slovenščina',
-    },
-    'sq': {
-        'bidi': False,
-        'code': 'sq',
-        'name': 'Albanian',
-        'name_local': 'shqip',
-    },
-    'sr': {
-        'bidi': False,
-        'code': 'sr',
-        'name': 'Serbian',
-        'name_local': 'српски',
-    },
-    'sr-latn': {
-        'bidi': False,
-        'code': 'sr-latn',
-        'name': 'Serbian Latin',
-        'name_local': 'srpski (latinica)',
-    },
-    'sv': {
-        'bidi': False,
-        'code': 'sv',
-        'name': 'Swedish',
-        'name_local': 'svenska',
-    },
-    'sw': {
-        'bidi': False,
-        'code': 'sw',
-        'name': 'Swahili',
-        'name_local': 'Kiswahili',
-    },
-    'ta': {
-        'bidi': False,
-        'code': 'ta',
-        'name': 'Tamil',
-        'name_local': 'தமிழ்',
-    },
-    'te': {
-        'bidi': False,
-        'code': 'te',
-        'name': 'Telugu',
-        'name_local': 'తెలుగు',
-    },
-    'tg': {
-        'bidi': False,
-        'code': 'tg',
-        'name': 'Tajik',
-        'name_local': 'тоҷикӣ',
-    },
-    'th': {
-        'bidi': False,
-        'code': 'th',
-        'name': 'Thai',
-        'name_local': 'ภาษาไทย',
-    },
-    'tk': {
-        'bidi': False,
-        'code': 'tk',
-        'name': 'Turkmen',
-        'name_local': 'Türkmençe',
-    },
-    'tr': {
-        'bidi': False,
-        'code': 'tr',
-        'name': 'Turkish',
-        'name_local': 'Türkçe',
-    },
-    'tt': {
-        'bidi': False,
-        'code': 'tt',
-        'name': 'Tatar',
-        'name_local': 'Татарча',
-    },
-    'udm': {
-        'bidi': False,
-        'code': 'udm',
-        'name': 'Udmurt',
-        'name_local': 'Удмурт',
-    },
-    'uk': {
-        'bidi': False,
-        'code': 'uk',
-        'name': 'Ukrainian',
-        'name_local': 'Українська',
-    },
-    'ur': {
-        'bidi': True,
-        'code': 'ur',
-        'name': 'Urdu',
-        'name_local': 'اردو',
-    },
-    'uz': {
-        'bidi': False,
-        'code': 'uz',
-        'name': 'Uzbek',
-        'name_local': 'oʻzbek tili',
-    },
-    'vi': {
-        'bidi': False,
-        'code': 'vi',
-        'name': 'Vietnamese',
-        'name_local': 'Tiếng Việt',
-    },
-    'zh-cn': {
-        'fallback': ['zh-hans'],
-    },
-    'zh-hans': {
-        'bidi': False,
-        'code': 'zh-hans',
-        'name': 'Simplified Chinese',
-        'name_local': '简体中文',
-    },
-    'zh-hant': {
-        'bidi': False,
-        'code': 'zh-hant',
-        'name': 'Traditional Chinese',
-        'name_local': '繁體中文',
-    },
-    'zh-hk': {
-        'fallback': ['zh-hant'],
-    },
-    'zh-mo': {
-        'fallback': ['zh-hant'],
-    },
-    'zh-my': {
-        'fallback': ['zh-hans'],
-    },
-    'zh-sg': {
-        'fallback': ['zh-hans'],
-    },
-    'zh-tw': {
-        'fallback': ['zh-hant'],
+    "af": {
+        "bidi": False,
+        "code": "af",
+        "name": "Afrikaans",
+        "name_local": "Afrikaans",
+    },
+    "ar": {
+        "bidi": True,
+        "code": "ar",
+        "name": "Arabic",
+        "name_local": "العربيّة",
+    },
+    "ar-dz": {
+        "bidi": True,
+        "code": "ar-dz",
+        "name": "Algerian Arabic",
+        "name_local": "العربية الجزائرية",
+    },
+    "ast": {
+        "bidi": False,
+        "code": "ast",
+        "name": "Asturian",
+        "name_local": "asturianu",
+    },
+    "az": {
+        "bidi": True,
+        "code": "az",
+        "name": "Azerbaijani",
+        "name_local": "Azərbaycanca",
+    },
+    "be": {
+        "bidi": False,
+        "code": "be",
+        "name": "Belarusian",
+        "name_local": "беларуская",
+    },
+    "bg": {
+        "bidi": False,
+        "code": "bg",
+        "name": "Bulgarian",
+        "name_local": "български",
+    },
+    "bn": {
+        "bidi": False,
+        "code": "bn",
+        "name": "Bengali",
+        "name_local": "বাংলা",
+    },
+    "br": {
+        "bidi": False,
+        "code": "br",
+        "name": "Breton",
+        "name_local": "brezhoneg",
+    },
+    "bs": {
+        "bidi": False,
+        "code": "bs",
+        "name": "Bosnian",
+        "name_local": "bosanski",
+    },
+    "ca": {
+        "bidi": False,
+        "code": "ca",
+        "name": "Catalan",
+        "name_local": "català",
+    },
+    "cs": {
+        "bidi": False,
+        "code": "cs",
+        "name": "Czech",
+        "name_local": "česky",
+    },
+    "cy": {
+        "bidi": False,
+        "code": "cy",
+        "name": "Welsh",
+        "name_local": "Cymraeg",
+    },
+    "da": {
+        "bidi": False,
+        "code": "da",
+        "name": "Danish",
+        "name_local": "dansk",
+    },
+    "de": {
+        "bidi": False,
+        "code": "de",
+        "name": "German",
+        "name_local": "Deutsch",
+    },
+    "dsb": {
+        "bidi": False,
+        "code": "dsb",
+        "name": "Lower Sorbian",
+        "name_local": "dolnoserbski",
+    },
+    "el": {
+        "bidi": False,
+        "code": "el",
+        "name": "Greek",
+        "name_local": "Ελληνικά",
+    },
+    "en": {
+        "bidi": False,
+        "code": "en",
+        "name": "English",
+        "name_local": "English",
+    },
+    "en-au": {
+        "bidi": False,
+        "code": "en-au",
+        "name": "Australian English",
+        "name_local": "Australian English",
+    },
+    "en-gb": {
+        "bidi": False,
+        "code": "en-gb",
+        "name": "British English",
+        "name_local": "British English",
+    },
+    "eo": {
+        "bidi": False,
+        "code": "eo",
+        "name": "Esperanto",
+        "name_local": "Esperanto",
+    },
+    "es": {
+        "bidi": False,
+        "code": "es",
+        "name": "Spanish",
+        "name_local": "español",
+    },
+    "es-ar": {
+        "bidi": False,
+        "code": "es-ar",
+        "name": "Argentinian Spanish",
+        "name_local": "español de Argentina",
+    },
+    "es-co": {
+        "bidi": False,
+        "code": "es-co",
+        "name": "Colombian Spanish",
+        "name_local": "español de Colombia",
+    },
+    "es-mx": {
+        "bidi": False,
+        "code": "es-mx",
+        "name": "Mexican Spanish",
+        "name_local": "español de Mexico",
+    },
+    "es-ni": {
+        "bidi": False,
+        "code": "es-ni",
+        "name": "Nicaraguan Spanish",
+        "name_local": "español de Nicaragua",
+    },
+    "es-ve": {
+        "bidi": False,
+        "code": "es-ve",
+        "name": "Venezuelan Spanish",
+        "name_local": "español de Venezuela",
+    },
+    "et": {
+        "bidi": False,
+        "code": "et",
+        "name": "Estonian",
+        "name_local": "eesti",
+    },
+    "eu": {
+        "bidi": False,
+        "code": "eu",
+        "name": "Basque",
+        "name_local": "Basque",
+    },
+    "fa": {
+        "bidi": True,
+        "code": "fa",
+        "name": "Persian",
+        "name_local": "فارسی",
+    },
+    "fi": {
+        "bidi": False,
+        "code": "fi",
+        "name": "Finnish",
+        "name_local": "suomi",
+    },
+    "fr": {
+        "bidi": False,
+        "code": "fr",
+        "name": "French",
+        "name_local": "français",
+    },
+    "fy": {
+        "bidi": False,
+        "code": "fy",
+        "name": "Frisian",
+        "name_local": "frysk",
+    },
+    "ga": {
+        "bidi": False,
+        "code": "ga",
+        "name": "Irish",
+        "name_local": "Gaeilge",
+    },
+    "gd": {
+        "bidi": False,
+        "code": "gd",
+        "name": "Scottish Gaelic",
+        "name_local": "Gàidhlig",
+    },
+    "gl": {
+        "bidi": False,
+        "code": "gl",
+        "name": "Galician",
+        "name_local": "galego",
+    },
+    "he": {
+        "bidi": True,
+        "code": "he",
+        "name": "Hebrew",
+        "name_local": "עברית",
+    },
+    "hi": {
+        "bidi": False,
+        "code": "hi",
+        "name": "Hindi",
+        "name_local": "हिंदी",
+    },
+    "hr": {
+        "bidi": False,
+        "code": "hr",
+        "name": "Croatian",
+        "name_local": "Hrvatski",
+    },
+    "hsb": {
+        "bidi": False,
+        "code": "hsb",
+        "name": "Upper Sorbian",
+        "name_local": "hornjoserbsce",
+    },
+    "hu": {
+        "bidi": False,
+        "code": "hu",
+        "name": "Hungarian",
+        "name_local": "Magyar",
+    },
+    "hy": {
+        "bidi": False,
+        "code": "hy",
+        "name": "Armenian",
+        "name_local": "հայերեն",
+    },
+    "ia": {
+        "bidi": False,
+        "code": "ia",
+        "name": "Interlingua",
+        "name_local": "Interlingua",
+    },
+    "io": {
+        "bidi": False,
+        "code": "io",
+        "name": "Ido",
+        "name_local": "ido",
+    },
+    "id": {
+        "bidi": False,
+        "code": "id",
+        "name": "Indonesian",
+        "name_local": "Bahasa Indonesia",
+    },
+    "ig": {
+        "bidi": False,
+        "code": "ig",
+        "name": "Igbo",
+        "name_local": "Asụsụ Ìgbò",
+    },
+    "is": {
+        "bidi": False,
+        "code": "is",
+        "name": "Icelandic",
+        "name_local": "Íslenska",
+    },
+    "it": {
+        "bidi": False,
+        "code": "it",
+        "name": "Italian",
+        "name_local": "italiano",
+    },
+    "ja": {
+        "bidi": False,
+        "code": "ja",
+        "name": "Japanese",
+        "name_local": "日本語",
+    },
+    "ka": {
+        "bidi": False,
+        "code": "ka",
+        "name": "Georgian",
+        "name_local": "ქართული",
+    },
+    "kab": {
+        "bidi": False,
+        "code": "kab",
+        "name": "Kabyle",
+        "name_local": "taqbaylit",
+    },
+    "kk": {
+        "bidi": False,
+        "code": "kk",
+        "name": "Kazakh",
+        "name_local": "Қазақ",
+    },
+    "km": {
+        "bidi": False,
+        "code": "km",
+        "name": "Khmer",
+        "name_local": "Khmer",
+    },
+    "kn": {
+        "bidi": False,
+        "code": "kn",
+        "name": "Kannada",
+        "name_local": "Kannada",
+    },
+    "ko": {
+        "bidi": False,
+        "code": "ko",
+        "name": "Korean",
+        "name_local": "한국어",
+    },
+    "ky": {
+        "bidi": False,
+        "code": "ky",
+        "name": "Kyrgyz",
+        "name_local": "Кыргызча",
+    },
+    "lb": {
+        "bidi": False,
+        "code": "lb",
+        "name": "Luxembourgish",
+        "name_local": "Lëtzebuergesch",
+    },
+    "lt": {
+        "bidi": False,
+        "code": "lt",
+        "name": "Lithuanian",
+        "name_local": "Lietuviškai",
+    },
+    "lv": {
+        "bidi": False,
+        "code": "lv",
+        "name": "Latvian",
+        "name_local": "latviešu",
+    },
+    "mk": {
+        "bidi": False,
+        "code": "mk",
+        "name": "Macedonian",
+        "name_local": "Македонски",
+    },
+    "ml": {
+        "bidi": False,
+        "code": "ml",
+        "name": "Malayalam",
+        "name_local": "മലയാളം",
+    },
+    "mn": {
+        "bidi": False,
+        "code": "mn",
+        "name": "Mongolian",
+        "name_local": "Mongolian",
+    },
+    "mr": {
+        "bidi": False,
+        "code": "mr",
+        "name": "Marathi",
+        "name_local": "मराठी",
+    },
+    "ms": {
+        "bidi": False,
+        "code": "ms",
+        "name": "Malay",
+        "name_local": "Bahasa Melayu",
+    },
+    "my": {
+        "bidi": False,
+        "code": "my",
+        "name": "Burmese",
+        "name_local": "မြန်မာဘာသာ",
+    },
+    "nb": {
+        "bidi": False,
+        "code": "nb",
+        "name": "Norwegian Bokmal",
+        "name_local": "norsk (bokmål)",
+    },
+    "ne": {
+        "bidi": False,
+        "code": "ne",
+        "name": "Nepali",
+        "name_local": "नेपाली",
+    },
+    "nl": {
+        "bidi": False,
+        "code": "nl",
+        "name": "Dutch",
+        "name_local": "Nederlands",
+    },
+    "nn": {
+        "bidi": False,
+        "code": "nn",
+        "name": "Norwegian Nynorsk",
+        "name_local": "norsk (nynorsk)",
+    },
+    "no": {
+        "bidi": False,
+        "code": "no",
+        "name": "Norwegian",
+        "name_local": "norsk",
+    },
+    "os": {
+        "bidi": False,
+        "code": "os",
+        "name": "Ossetic",
+        "name_local": "Ирон",
+    },
+    "pa": {
+        "bidi": False,
+        "code": "pa",
+        "name": "Punjabi",
+        "name_local": "Punjabi",
+    },
+    "pl": {
+        "bidi": False,
+        "code": "pl",
+        "name": "Polish",
+        "name_local": "polski",
+    },
+    "pt": {
+        "bidi": False,
+        "code": "pt",
+        "name": "Portuguese",
+        "name_local": "Português",
+    },
+    "pt-br": {
+        "bidi": False,
+        "code": "pt-br",
+        "name": "Brazilian Portuguese",
+        "name_local": "Português Brasileiro",
+    },
+    "ro": {
+        "bidi": False,
+        "code": "ro",
+        "name": "Romanian",
+        "name_local": "Română",
+    },
+    "ru": {
+        "bidi": False,
+        "code": "ru",
+        "name": "Russian",
+        "name_local": "Русский",
+    },
+    "sk": {
+        "bidi": False,
+        "code": "sk",
+        "name": "Slovak",
+        "name_local": "Slovensky",
+    },
+    "sl": {
+        "bidi": False,
+        "code": "sl",
+        "name": "Slovenian",
+        "name_local": "Slovenščina",
+    },
+    "sq": {
+        "bidi": False,
+        "code": "sq",
+        "name": "Albanian",
+        "name_local": "shqip",
+    },
+    "sr": {
+        "bidi": False,
+        "code": "sr",
+        "name": "Serbian",
+        "name_local": "српски",
+    },
+    "sr-latn": {
+        "bidi": False,
+        "code": "sr-latn",
+        "name": "Serbian Latin",
+        "name_local": "srpski (latinica)",
+    },
+    "sv": {
+        "bidi": False,
+        "code": "sv",
+        "name": "Swedish",
+        "name_local": "svenska",
+    },
+    "sw": {
+        "bidi": False,
+        "code": "sw",
+        "name": "Swahili",
+        "name_local": "Kiswahili",
+    },
+    "ta": {
+        "bidi": False,
+        "code": "ta",
+        "name": "Tamil",
+        "name_local": "தமிழ்",
+    },
+    "te": {
+        "bidi": False,
+        "code": "te",
+        "name": "Telugu",
+        "name_local": "తెలుగు",
+    },
+    "tg": {
+        "bidi": False,
+        "code": "tg",
+        "name": "Tajik",
+        "name_local": "тоҷикӣ",
+    },
+    "th": {
+        "bidi": False,
+        "code": "th",
+        "name": "Thai",
+        "name_local": "ภาษาไทย",
+    },
+    "tk": {
+        "bidi": False,
+        "code": "tk",
+        "name": "Turkmen",
+        "name_local": "Türkmençe",
+    },
+    "tr": {
+        "bidi": False,
+        "code": "tr",
+        "name": "Turkish",
+        "name_local": "Türkçe",
+    },
+    "tt": {
+        "bidi": False,
+        "code": "tt",
+        "name": "Tatar",
+        "name_local": "Татарча",
+    },
+    "udm": {
+        "bidi": False,
+        "code": "udm",
+        "name": "Udmurt",
+        "name_local": "Удмурт",
+    },
+    "uk": {
+        "bidi": False,
+        "code": "uk",
+        "name": "Ukrainian",
+        "name_local": "Українська",
+    },
+    "ur": {
+        "bidi": True,
+        "code": "ur",
+        "name": "Urdu",
+        "name_local": "اردو",
+    },
+    "uz": {
+        "bidi": False,
+        "code": "uz",
+        "name": "Uzbek",
+        "name_local": "oʻzbek tili",
+    },
+    "vi": {
+        "bidi": False,
+        "code": "vi",
+        "name": "Vietnamese",
+        "name_local": "Tiếng Việt",
+    },
+    "zh-cn": {
+        "fallback": ["zh-hans"],
+    },
+    "zh-hans": {
+        "bidi": False,
+        "code": "zh-hans",
+        "name": "Simplified Chinese",
+        "name_local": "简体中文",
+    },
+    "zh-hant": {
+        "bidi": False,
+        "code": "zh-hant",
+        "name": "Traditional Chinese",
+        "name_local": "繁體中文",
+    },
+    "zh-hk": {
+        "fallback": ["zh-hant"],
+    },
+    "zh-mo": {
+        "fallback": ["zh-hant"],
+    },
+    "zh-my": {
+        "fallback": ["zh-hans"],
+    },
+    "zh-sg": {
+        "fallback": ["zh-hans"],
+    },
+    "zh-tw": {
+        "fallback": ["zh-hant"],
     },
 }

+ 7 - 7
django/conf/locale/ar/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F، Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "j F، Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd‏/m‏/Y'
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d‏/m‏/Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'd‏/m‏/Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 14 - 14
django/conf/locale/ar_DZ/formats.py

@@ -2,28 +2,28 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j F Y'
-SHORT_DATETIME_FORMAT = 'j F Y H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j F Y"
+SHORT_DATETIME_FORMAT = "j F Y H:i"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y/%m/%d',  # '2006/10/25'
+    "%Y/%m/%d",  # '2006/10/25'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M',     # '14:30
-    '%H:%M:%S',  # '14:30:59'
+    "%H:%M",  # '14:30
+    "%H:%M:%S",  # '14:30:59'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y/%m/%d %H:%M',     # '2006/10/25 14:30'
-    '%Y/%m/%d %H:%M:%S',  # '2006/10/25 14:30:59'
+    "%Y/%m/%d %H:%M",  # '2006/10/25 14:30'
+    "%Y/%m/%d %H:%M:%S",  # '2006/10/25 14:30:59'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/az/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j E Y, G:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j E Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j E Y, G:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 6 - 6
django/conf/locale/bg/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i'
+DATE_FORMAT = "d F Y"
+TIME_FORMAT = "H:i"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'd.m.Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '  # Non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = " "  # Non-breaking space
 # NUMBER_GROUPING =

+ 15 - 15
django/conf/locale/bn/formats.py

@@ -2,31 +2,31 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F, Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "j F, Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M, Y'
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M, Y"
 # SHORT_DATETIME_FORMAT =
 FIRST_DAY_OF_WEEK = 6  # Saturday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # 25/10/2016
-    '%d/%m/%y',  # 25/10/16
-    '%d-%m-%Y',  # 25-10-2016
-    '%d-%m-%y',  # 25-10-16
+    "%d/%m/%Y",  # 25/10/2016
+    "%d/%m/%y",  # 25/10/16
+    "%d-%m-%Y",  # 25-10-2016
+    "%d-%m-%y",  # 25-10-16
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',  # 14:30:59
-    '%H:%M',  # 14:30
+    "%H:%M:%S",  # 14:30:59
+    "%H:%M",  # 14:30
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',  # 25/10/2006 14:30:59
-    '%d/%m/%Y %H:%M',  # 25/10/2006 14:30
+    "%d/%m/%Y %H:%M:%S",  # 25/10/2006 14:30:59
+    "%d/%m/%Y %H:%M",  # 25/10/2006 14:30
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 8 - 8
django/conf/locale/bs/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. N Y.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j. N. Y. G:i T'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'Y M j'
+DATE_FORMAT = "j. N Y."
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j. N. Y. G:i T"
+YEAR_MONTH_FORMAT = "F Y."
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "Y M j"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'Y M j'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 17 - 17
django/conf/locale/ca/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\e\s G:i'
-YEAR_MONTH_FORMAT = r'F \d\e\l Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y G:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\e\s G:i"
+YEAR_MONTH_FORMAT = r"F \d\e\l Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y G:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '31/12/2009'
-    '%d/%m/%y',  # '31/12/09'
+    "%d/%m/%Y",  # '31/12/2009'
+    "%d/%m/%y",  # '31/12/09'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 25 - 25
django/conf/locale/cs/formats.py

@@ -2,42 +2,42 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. E Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j. E Y G:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y G:i'
+DATE_FORMAT = "j. E Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j. E Y G:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y G:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '05.01.2006'
-    '%d.%m.%y',  # '05.01.06'
-    '%d. %m. %Y',  # '5. 1. 2006'
-    '%d. %m. %y',  # '5. 1. 06'
+    "%d.%m.%Y",  # '05.01.2006'
+    "%d.%m.%y",  # '05.01.06'
+    "%d. %m. %Y",  # '5. 1. 2006'
+    "%d. %m. %y",  # '5. 1. 06'
     # "%d. %B %Y",  # '25. October 2006'
     # "%d. %b. %Y",  # '25. Oct. 2006'
 ]
 # Kept ISO formats as one is in first position
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',  # '04:30:59'
-    '%H.%M',    # '04.30'
-    '%H:%M',    # '04:30'
+    "%H:%M:%S",  # '04:30:59'
+    "%H.%M",  # '04.30'
+    "%H:%M",  # '04:30'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',    # '05.01.2006 04:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '05.01.2006 04:30:59.000200'
-    '%d.%m.%Y %H.%M',       # '05.01.2006 04.30'
-    '%d.%m.%Y %H:%M',       # '05.01.2006 04:30'
-    '%d. %m. %Y %H:%M:%S',  # '05. 01. 2006 04:30:59'
-    '%d. %m. %Y %H:%M:%S.%f',  # '05. 01. 2006 04:30:59.000200'
-    '%d. %m. %Y %H.%M',     # '05. 01. 2006 04.30'
-    '%d. %m. %Y %H:%M',     # '05. 01. 2006 04:30'
-    '%Y-%m-%d %H.%M',       # '2006-01-05 04.30'
+    "%d.%m.%Y %H:%M:%S",  # '05.01.2006 04:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '05.01.2006 04:30:59.000200'
+    "%d.%m.%Y %H.%M",  # '05.01.2006 04.30'
+    "%d.%m.%Y %H:%M",  # '05.01.2006 04:30'
+    "%d. %m. %Y %H:%M:%S",  # '05. 01. 2006 04:30:59'
+    "%d. %m. %Y %H:%M:%S.%f",  # '05. 01. 2006 04:30:59.000200'
+    "%d. %m. %Y %H.%M",  # '05. 01. 2006 04.30'
+    "%d. %m. %Y %H:%M",  # '05. 01. 2006 04:30'
+    "%Y-%m-%d %H.%M",  # '2006-01-05 04.30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/cy/formats.py

@@ -2,32 +2,32 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'                   # '25 Hydref 2006'
-TIME_FORMAT = 'P'                       # '2:30 y.b.'
-DATETIME_FORMAT = 'j F Y, P'            # '25 Hydref 2006, 2:30 y.b.'
-YEAR_MONTH_FORMAT = 'F Y'               # 'Hydref 2006'
-MONTH_DAY_FORMAT = 'j F'                # '25 Hydref'
-SHORT_DATE_FORMAT = 'd/m/Y'             # '25/10/2006'
-SHORT_DATETIME_FORMAT = 'd/m/Y P'       # '25/10/2006 2:30 y.b.'
-FIRST_DAY_OF_WEEK = 1                   # 'Dydd Llun'
+DATE_FORMAT = "j F Y"  # '25 Hydref 2006'
+TIME_FORMAT = "P"  # '2:30 y.b.'
+DATETIME_FORMAT = "j F Y, P"  # '25 Hydref 2006, 2:30 y.b.'
+YEAR_MONTH_FORMAT = "F Y"  # 'Hydref 2006'
+MONTH_DAY_FORMAT = "j F"  # '25 Hydref'
+SHORT_DATE_FORMAT = "d/m/Y"  # '25/10/2006'
+SHORT_DATETIME_FORMAT = "d/m/Y P"  # '25/10/2006 2:30 y.b.'
+FIRST_DAY_OF_WEEK = 1  # 'Dydd Llun'
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',                # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',             # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',                   # '2006-10-25 14:30'
-    '%d/%m/%Y %H:%M:%S',                # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',             # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',                   # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',                # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',             # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',                   # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 13 - 13
django/conf/locale/da/formats.py

@@ -2,25 +2,25 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',                         # '25.10.2006'
+    "%d.%m.%Y",  # '25.10.2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',                # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',             # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',                   # '25.10.2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 14 - 14
django/conf/locale/de/formats.py

@@ -2,28 +2,28 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
     # "%d. %B %Y",  # '25. October 2006'
     # "%d. %b. %Y",  # '25. Oct. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',    # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',       # '25.10.2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 14 - 14
django/conf/locale/de_CH/formats.py

@@ -2,27 +2,27 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
     # "%d. %B %Y",  # '25. October 2006'
     # "%d. %b. %Y",  # '25. Oct. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',    # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',       # '25.10.2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
 ]
 
 # these are the separators for non-monetary numbers. For monetary numbers,
@@ -30,6 +30,6 @@ DATETIME_INPUT_FORMATS = [
 # ' (single quote).
 # For details, please refer to the documentation and the following link:
 # https://www.bk.admin.ch/bk/de/home/dokumentation/sprachen/hilfsmittel-textredaktion/schreibweisungen.html
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/el/formats.py

@@ -2,33 +2,33 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd/m/Y'
-TIME_FORMAT = 'P'
-DATETIME_FORMAT = 'd/m/Y P'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y P'
+DATE_FORMAT = "d/m/Y"
+TIME_FORMAT = "P"
+DATETIME_FORMAT = "d/m/Y P"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y P"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%Y-%m-%d',  # '2006-10-25'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%Y-%m-%d",  # '2006-10-25'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',  # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 32 - 32
django/conf/locale/en/formats.py

@@ -4,19 +4,19 @@
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
 
 # Formatting for date objects.
-DATE_FORMAT = 'N j, Y'
+DATE_FORMAT = "N j, Y"
 # Formatting for time objects.
-TIME_FORMAT = 'P'
+TIME_FORMAT = "P"
 # Formatting for datetime objects.
-DATETIME_FORMAT = 'N j, Y, P'
+DATETIME_FORMAT = "N j, Y, P"
 # Formatting for date objects when only the year and month are relevant.
-YEAR_MONTH_FORMAT = 'F Y'
+YEAR_MONTH_FORMAT = "F Y"
 # Formatting for date objects when only the month and day are relevant.
-MONTH_DAY_FORMAT = 'F j'
+MONTH_DAY_FORMAT = "F j"
 # Short formatting for date objects.
-SHORT_DATE_FORMAT = 'm/d/Y'
+SHORT_DATE_FORMAT = "m/d/Y"
 # Short formatting for datetime objects.
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
+SHORT_DATETIME_FORMAT = "m/d/Y P"
 # First day of week, to be used on calendars.
 # 0 means Sunday, 1 means Monday...
 FIRST_DAY_OF_WEEK = 0
@@ -27,39 +27,39 @@ FIRST_DAY_OF_WEEK = 0
 # Note that these format strings are different from the ones to display dates.
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%m/%d/%Y',  # '10/25/2006'
-    '%m/%d/%y',  # '10/25/06'
-    '%b %d %Y',  # 'Oct 25 2006'
-    '%b %d, %Y',  # 'Oct 25, 2006'
-    '%d %b %Y',  # '25 Oct 2006'
-    '%d %b, %Y',  # '25 Oct, 2006'
-    '%B %d %Y',  # 'October 25 2006'
-    '%B %d, %Y',  # 'October 25, 2006'
-    '%d %B %Y',  # '25 October 2006'
-    '%d %B, %Y',  # '25 October, 2006'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
+    "%b %d %Y",  # 'Oct 25 2006'
+    "%b %d, %Y",  # 'Oct 25, 2006'
+    "%d %b %Y",  # '25 Oct 2006'
+    "%d %b, %Y",  # '25 Oct, 2006'
+    "%B %d %Y",  # 'October 25 2006'
+    "%B %d, %Y",  # 'October 25, 2006'
+    "%d %B %Y",  # '25 October 2006'
+    "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
 ]
 
 # Decimal separator symbol.
-DECIMAL_SEPARATOR = '.'
+DECIMAL_SEPARATOR = "."
 # Thousand separator symbol.
-THOUSAND_SEPARATOR = ','
+THOUSAND_SEPARATOR = ","
 # Number of digits that will be together, when splitting them by
 # THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands.
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/en_AU/formats.py

@@ -2,20 +2,20 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j M Y'                   # '25 Oct 2006'
-TIME_FORMAT = 'P'                       # '2:30 p.m.'
-DATETIME_FORMAT = 'j M Y, P'            # '25 Oct 2006, 2:30 p.m.'
-YEAR_MONTH_FORMAT = 'F Y'               # 'October 2006'
-MONTH_DAY_FORMAT = 'j F'                # '25 October'
-SHORT_DATE_FORMAT = 'd/m/Y'             # '25/10/2006'
-SHORT_DATETIME_FORMAT = 'd/m/Y P'       # '25/10/2006 2:30 p.m.'
-FIRST_DAY_OF_WEEK = 0                   # Sunday
+DATE_FORMAT = "j M Y"  # '25 Oct 2006'
+TIME_FORMAT = "P"  # '2:30 p.m.'
+DATETIME_FORMAT = "j M Y, P"  # '25 Oct 2006, 2:30 p.m.'
+YEAR_MONTH_FORMAT = "F Y"  # 'October 2006'
+MONTH_DAY_FORMAT = "j F"  # '25 October'
+SHORT_DATE_FORMAT = "d/m/Y"  # '25/10/2006'
+SHORT_DATETIME_FORMAT = "d/m/Y P"  # '25/10/2006 2:30 p.m.'
+FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
     # "%b %d %Y",  # 'Oct 25 2006'
     # "%b %d, %Y",  # 'Oct 25, 2006'
     # "%d %b %Y",  # '25 Oct 2006'
@@ -26,16 +26,16 @@ DATE_INPUT_FORMATS = [
     # "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',                # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',             # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',                   # '2006-10-25 14:30'
-    '%d/%m/%Y %H:%M:%S',                # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',             # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',                   # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',                # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',             # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',                   # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/en_GB/formats.py

@@ -2,20 +2,20 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j M Y'                   # '25 Oct 2006'
-TIME_FORMAT = 'P'                       # '2:30 p.m.'
-DATETIME_FORMAT = 'j M Y, P'            # '25 Oct 2006, 2:30 p.m.'
-YEAR_MONTH_FORMAT = 'F Y'               # 'October 2006'
-MONTH_DAY_FORMAT = 'j F'                # '25 October'
-SHORT_DATE_FORMAT = 'd/m/Y'             # '25/10/2006'
-SHORT_DATETIME_FORMAT = 'd/m/Y P'       # '25/10/2006 2:30 p.m.'
-FIRST_DAY_OF_WEEK = 1                   # Monday
+DATE_FORMAT = "j M Y"  # '25 Oct 2006'
+TIME_FORMAT = "P"  # '2:30 p.m.'
+DATETIME_FORMAT = "j M Y, P"  # '25 Oct 2006, 2:30 p.m.'
+YEAR_MONTH_FORMAT = "F Y"  # 'October 2006'
+MONTH_DAY_FORMAT = "j F"  # '25 October'
+SHORT_DATE_FORMAT = "d/m/Y"  # '25/10/2006'
+SHORT_DATETIME_FORMAT = "d/m/Y P"  # '25/10/2006 2:30 p.m.'
+FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
     # "%b %d %Y",  # 'Oct 25 2006'
     # "%b %d, %Y",  # 'Oct 25, 2006'
     # "%d %b %Y",  # '25 Oct 2006'
@@ -26,16 +26,16 @@ DATE_INPUT_FORMATS = [
     # "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',                # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',             # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',                   # '2006-10-25 14:30'
-    '%d/%m/%Y %H:%M:%S',                # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',             # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',                   # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',                # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',             # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',                   # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 29 - 32
django/conf/locale/eo/formats.py

@@ -2,46 +2,43 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j\-\a \d\e F Y'         # '26-a de julio 1887'
-TIME_FORMAT = 'H:i'                     # '18:59'
-DATETIME_FORMAT = r'j\-\a \d\e F Y\, \j\e H:i'  # '26-a de julio 1887, je 18:59'
-YEAR_MONTH_FORMAT = r'F \d\e Y'         # 'julio de 1887'
-MONTH_DAY_FORMAT = r'j\-\a \d\e F'      # '26-a de julio'
-SHORT_DATE_FORMAT = 'Y-m-d'             # '1887-07-26'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'     # '1887-07-26 18:59'
+DATE_FORMAT = r"j\-\a \d\e F Y"  # '26-a de julio 1887'
+TIME_FORMAT = "H:i"  # '18:59'
+DATETIME_FORMAT = r"j\-\a \d\e F Y\, \j\e H:i"  # '26-a de julio 1887, je 18:59'
+YEAR_MONTH_FORMAT = r"F \d\e Y"  # 'julio de 1887'
+MONTH_DAY_FORMAT = r"j\-\a \d\e F"  # '26-a de julio'
+SHORT_DATE_FORMAT = "Y-m-d"  # '1887-07-26'
+SHORT_DATETIME_FORMAT = "Y-m-d H:i"  # '1887-07-26 18:59'
 FIRST_DAY_OF_WEEK = 1  # Monday (lundo)
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',                         # '1887-07-26'
-    '%y-%m-%d',                         # '87-07-26'
-    '%Y %m %d',                         # '1887 07 26'
-    '%Y.%m.%d',                         # '1887.07.26'
-    '%d-a de %b %Y',                    # '26-a de jul 1887'
-    '%d %b %Y',                         # '26 jul 1887'
-    '%d-a de %B %Y',                    # '26-a de julio 1887'
-    '%d %B %Y',                         # '26 julio 1887'
-    '%d %m %Y',                         # '26 07 1887'
-    '%d/%m/%Y',                         # '26/07/1887'
+    "%Y-%m-%d",  # '1887-07-26'
+    "%y-%m-%d",  # '87-07-26'
+    "%Y %m %d",  # '1887 07 26'
+    "%Y.%m.%d",  # '1887.07.26'
+    "%d-a de %b %Y",  # '26-a de jul 1887'
+    "%d %b %Y",  # '26 jul 1887'
+    "%d-a de %B %Y",  # '26-a de julio 1887'
+    "%d %B %Y",  # '26 julio 1887'
+    "%d %m %Y",  # '26 07 1887'
+    "%d/%m/%Y",  # '26/07/1887'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',                         # '18:59:00'
-    '%H:%M',                            # '18:59'
+    "%H:%M:%S",  # '18:59:00'
+    "%H:%M",  # '18:59'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',                # '1887-07-26 18:59:00'
-    '%Y-%m-%d %H:%M',                   # '1887-07-26 18:59'
-
-    '%Y.%m.%d %H:%M:%S',                # '1887.07.26 18:59:00'
-    '%Y.%m.%d %H:%M',                   # '1887.07.26 18:59'
-
-    '%d/%m/%Y %H:%M:%S',                # '26/07/1887 18:59:00'
-    '%d/%m/%Y %H:%M',                   # '26/07/1887 18:59'
-
-    '%y-%m-%d %H:%M:%S',                # '87-07-26 18:59:00'
-    '%y-%m-%d %H:%M',                   # '87-07-26 18:59'
+    "%Y-%m-%d %H:%M:%S",  # '1887-07-26 18:59:00'
+    "%Y-%m-%d %H:%M",  # '1887-07-26 18:59'
+    "%Y.%m.%d %H:%M:%S",  # '1887.07.26 18:59:00'
+    "%Y.%m.%d %H:%M",  # '1887.07.26 18:59'
+    "%d/%m/%Y %H:%M:%S",  # '26/07/1887 18:59:00'
+    "%d/%m/%Y %H:%M",  # '26/07/1887 18:59'
+    "%y-%m-%d %H:%M:%S",  # '87-07-26 18:59:00'
+    "%y-%m-%d %H:%M",  # '87-07-26 18:59'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/es/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '31/12/2009'
-    '%d/%m/%y',  # '31/12/09'
+    "%d/%m/%Y",  # '31/12/2009'
+    "%d/%m/%y",  # '31/12/09'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/es_AR/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j N Y'
-TIME_FORMAT = r'H:i'
-DATETIME_FORMAT = r'j N Y H:i'
-YEAR_MONTH_FORMAT = r'F Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = r'd/m/Y'
-SHORT_DATETIME_FORMAT = r'd/m/Y H:i'
+DATE_FORMAT = r"j N Y"
+TIME_FORMAT = r"H:i"
+DATETIME_FORMAT = r"j N Y H:i"
+YEAR_MONTH_FORMAT = r"F Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = r"d/m/Y"
+SHORT_DATETIME_FORMAT = r"d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 0  # 0: Sunday, 1: Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '31/12/2009'
-    '%d/%m/%y',  # '31/12/09'
+    "%d/%m/%Y",  # '31/12/2009'
+    "%d/%m/%y",  # '31/12/09'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 18 - 19
django/conf/locale/es_CO/formats.py

@@ -1,27 +1,26 @@
 # This file is distributed under the same license as the Django package.
 #
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 1
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%Y%m%d',                # '20061025'
-
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%Y%m%d",  # '20061025'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 18 - 18
django/conf/locale/es_MX/formats.py

@@ -1,26 +1,26 @@
 # This file is distributed under the same license as the Django package.
 #
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday: ISO 8601
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%Y%m%d',                           # '20061025'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%Y%m%d",  # '20061025'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = '.'   # ',' is also official (less common): NOM-008-SCFI-2002
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."  # ',' is also official (less common): NOM-008-SCFI-2002
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 18 - 19
django/conf/locale/es_NI/formats.py

@@ -1,27 +1,26 @@
 # This file is distributed under the same license as the Django package.
 #
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday: ISO 8601
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%Y%m%d',                          # '20061025'
-
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%Y%m%d",  # '20061025'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/es_PR/formats.py

@@ -1,27 +1,27 @@
 # This file is distributed under the same license as the Django package.
 #
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \a \l\a\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '31/12/2009'
-    '%d/%m/%y',  # '31/12/09'
+    "%d/%m/%Y",  # '31/12/2009'
+    "%d/%m/%y",  # '31/12/09'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',
-    '%d/%m/%Y %H:%M:%S.%f',
-    '%d/%m/%Y %H:%M',
-    '%d/%m/%y %H:%M:%S',
-    '%d/%m/%y %H:%M:%S.%f',
-    '%d/%m/%y %H:%M',
+    "%d/%m/%Y %H:%M:%S",
+    "%d/%m/%Y %H:%M:%S.%f",
+    "%d/%m/%Y %H:%M",
+    "%d/%m/%y %H:%M:%S",
+    "%d/%m/%y %H:%M:%S.%f",
+    "%d/%m/%y %H:%M",
 ]
 
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 6 - 6
django/conf/locale/et/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'G:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "G:i"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'd.m.Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '  # Non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = " "  # Non-breaking space
 # NUMBER_GROUPING =

+ 9 - 9
django/conf/locale/eu/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'Y\k\o N j\a'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'Y\k\o N j\a, H:i'
-YEAR_MONTH_FORMAT = r'Y\k\o F'
-MONTH_DAY_FORMAT = r'F\r\e\n j\a'
-SHORT_DATE_FORMAT = 'Y-m-d'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
+DATE_FORMAT = r"Y\k\o N j\a"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"Y\k\o N j\a, H:i"
+YEAR_MONTH_FORMAT = r"Y\k\o F"
+MONTH_DAY_FORMAT = r"F\r\e\n j\a"
+SHORT_DATE_FORMAT = "Y-m-d"
+SHORT_DATETIME_FORMAT = "Y-m-d H:i"
 FIRST_DAY_OF_WEEK = 1  # Astelehena
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ FIRST_DAY_OF_WEEK = 1  # Astelehena
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 9 - 9
django/conf/locale/fa/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j F Y، ساعت G:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y/n/j'
-SHORT_DATETIME_FORMAT = 'Y/n/j،‏ G:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j F Y، ساعت G:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "Y/n/j"
+SHORT_DATETIME_FORMAT = "Y/n/j،‏ G:i"
 FIRST_DAY_OF_WEEK = 6
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ FIRST_DAY_OF_WEEK = 6
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 20 - 21
django/conf/locale/fi/formats.py

@@ -2,36 +2,35 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. E Y'
-TIME_FORMAT = 'G.i'
-DATETIME_FORMAT = r'j. E Y \k\e\l\l\o G.i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.n.Y'
-SHORT_DATETIME_FORMAT = 'j.n.Y G.i'
+DATE_FORMAT = "j. E Y"
+TIME_FORMAT = "G.i"
+DATETIME_FORMAT = r"j. E Y \k\e\l\l\o G.i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.n.Y"
+SHORT_DATETIME_FORMAT = "j.n.Y G.i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '20.3.2014'
-    '%d.%m.%y',  # '20.3.14'
+    "%d.%m.%Y",  # '20.3.2014'
+    "%d.%m.%y",  # '20.3.14'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H.%M.%S',     # '20.3.2014 14.30.59'
-    '%d.%m.%Y %H.%M.%S.%f',  # '20.3.2014 14.30.59.000200'
-    '%d.%m.%Y %H.%M',        # '20.3.2014 14.30'
-
-    '%d.%m.%y %H.%M.%S',     # '20.3.14 14.30.59'
-    '%d.%m.%y %H.%M.%S.%f',  # '20.3.14 14.30.59.000200'
-    '%d.%m.%y %H.%M',        # '20.3.14 14.30'
+    "%d.%m.%Y %H.%M.%S",  # '20.3.2014 14.30.59'
+    "%d.%m.%Y %H.%M.%S.%f",  # '20.3.2014 14.30.59.000200'
+    "%d.%m.%Y %H.%M",  # '20.3.2014 14.30'
+    "%d.%m.%y %H.%M.%S",  # '20.3.14 14.30.59'
+    "%d.%m.%y %H.%M.%S.%f",  # '20.3.14 14.30.59.000200'
+    "%d.%m.%y %H.%M",  # '20.3.14 14.30'
 ]
 TIME_INPUT_FORMATS = [
-    '%H.%M.%S',     # '14.30.59'
-    '%H.%M.%S.%f',  # '14.30.59.000200'
-    '%H.%M',        # '14.30'
+    "%H.%M.%S",  # '14.30.59'
+    "%H.%M.%S.%f",  # '14.30.59.000200'
+    "%H.%M",  # '14.30'
 ]
 
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # Non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # Non-breaking space
 NUMBER_GROUPING = 3

+ 19 - 19
django/conf/locale/fr/formats.py

@@ -2,32 +2,32 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j N Y'
-SHORT_DATETIME_FORMAT = 'j N Y H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j N Y"
+SHORT_DATETIME_FORMAT = "j N Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%d.%m.%Y',  # Swiss [fr_CH] '25.10.2006'
-    '%d.%m.%y',  # Swiss [fr_CH] '25.10.06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%d.%m.%Y",  # Swiss [fr_CH] '25.10.2006'
+    "%d.%m.%y",  # Swiss [fr_CH] '25.10.06'
     # '%d %B %Y', '%d %b %Y', # '25 octobre 2006', '25 oct. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
-    '%d.%m.%Y %H:%M:%S',     # Swiss [fr_CH), '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # Swiss (fr_CH), '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # Swiss (fr_CH), '25.10.2006 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # Swiss [fr_CH), '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # Swiss (fr_CH), '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # Swiss (fr_CH), '25.10.2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 6 - 6
django/conf/locale/ga/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "H:i"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'j M Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 8 - 8
django/conf/locale/gd/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'h:ia'
-DATETIME_FORMAT = 'j F Y h:ia'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "h:ia"
+DATETIME_FORMAT = "j F Y h:ia"
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-SHORT_DATETIME_FORMAT = 'j M Y h:ia'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
+SHORT_DATETIME_FORMAT = "j M Y h:ia"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ FIRST_DAY_OF_WEEK = 1  # Monday
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 9 - 9
django/conf/locale/gl/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y \á\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'd-m-Y, H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y \á\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d-m-Y"
+SHORT_DATETIME_FORMAT = "d-m-Y, H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ FIRST_DAY_OF_WEEK = 1  # Monday
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 9 - 9
django/conf/locale/he/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j בF Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j בF Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j בF'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = "j בF Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j בF Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j בF"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 # FIRST_DAY_OF_WEEK =
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 6 - 6
django/conf/locale/hi/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d-m-Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'd-m-Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 29 - 29
django/conf/locale/hr/formats.py

@@ -2,43 +2,43 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. E Y.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. E Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
+DATE_FORMAT = "j. E Y."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. E Y. H:i"
+YEAR_MONTH_FORMAT = "F Y."
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.m.Y."
+SHORT_DATETIME_FORMAT = "j.m.Y. H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',                     # '2006-10-25'
-    '%d.%m.%Y.',  # '25.10.2006.'
-    '%d.%m.%y.',  # '25.10.06.'
-    '%d. %m. %Y.',  # '25. 10. 2006.'
-    '%d. %m. %y.',  # '25. 10. 06.'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d.%m.%Y.",  # '25.10.2006.'
+    "%d.%m.%y.",  # '25.10.06.'
+    "%d. %m. %Y.",  # '25. 10. 2006.'
+    "%d. %m. %y.",  # '25. 10. 06.'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',        # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',     # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',           # '2006-10-25 14:30'
-    '%d.%m.%Y. %H:%M:%S',       # '25.10.2006. 14:30:59'
-    '%d.%m.%Y. %H:%M:%S.%f',    # '25.10.2006. 14:30:59.000200'
-    '%d.%m.%Y. %H:%M',          # '25.10.2006. 14:30'
-    '%d.%m.%y. %H:%M:%S',       # '25.10.06. 14:30:59'
-    '%d.%m.%y. %H:%M:%S.%f',    # '25.10.06. 14:30:59.000200'
-    '%d.%m.%y. %H:%M',          # '25.10.06. 14:30'
-    '%d. %m. %Y. %H:%M:%S',     # '25. 10. 2006. 14:30:59'
-    '%d. %m. %Y. %H:%M:%S.%f',  # '25. 10. 2006. 14:30:59.000200'
-    '%d. %m. %Y. %H:%M',        # '25. 10. 2006. 14:30'
-    '%d. %m. %y. %H:%M:%S',     # '25. 10. 06. 14:30:59'
-    '%d. %m. %y. %H:%M:%S.%f',  # '25. 10. 06. 14:30:59.000200'
-    '%d. %m. %y. %H:%M',        # '25. 10. 06. 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y. %H:%M:%S",  # '25.10.2006. 14:30:59'
+    "%d.%m.%Y. %H:%M:%S.%f",  # '25.10.2006. 14:30:59.000200'
+    "%d.%m.%Y. %H:%M",  # '25.10.2006. 14:30'
+    "%d.%m.%y. %H:%M:%S",  # '25.10.06. 14:30:59'
+    "%d.%m.%y. %H:%M:%S.%f",  # '25.10.06. 14:30:59.000200'
+    "%d.%m.%y. %H:%M",  # '25.10.06. 14:30'
+    "%d. %m. %Y. %H:%M:%S",  # '25. 10. 2006. 14:30:59'
+    "%d. %m. %Y. %H:%M:%S.%f",  # '25. 10. 2006. 14:30:59.000200'
+    "%d. %m. %Y. %H:%M",  # '25. 10. 2006. 14:30'
+    "%d. %m. %y. %H:%M:%S",  # '25. 10. 06. 14:30:59'
+    "%d. %m. %y. %H:%M:%S.%f",  # '25. 10. 06. 14:30:59.000200'
+    "%d. %m. %y. %H:%M",  # '25. 10. 06. 14:30'
 ]
 
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 15 - 15
django/conf/locale/hu/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'Y. F j.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'Y. F j. H:i'
-YEAR_MONTH_FORMAT = 'Y. F'
-MONTH_DAY_FORMAT = 'F j.'
-SHORT_DATE_FORMAT = 'Y.m.d.'
-SHORT_DATETIME_FORMAT = 'Y.m.d. H:i'
+DATE_FORMAT = "Y. F j."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "Y. F j. H:i"
+YEAR_MONTH_FORMAT = "Y. F"
+MONTH_DAY_FORMAT = "F j."
+SHORT_DATE_FORMAT = "Y.m.d."
+SHORT_DATETIME_FORMAT = "Y.m.d. H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y.%m.%d.',  # '2006.10.25.'
+    "%Y.%m.%d.",  # '2006.10.25.'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',  # '14:30:59'
-    '%H:%M',    # '14:30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M",  # '14:30'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y.%m.%d. %H:%M:%S',   # '2006.10.25. 14:30:59'
-    '%Y.%m.%d. %H:%M:%S.%f',  # '2006.10.25. 14:30:59.000200'
-    '%Y.%m.%d. %H:%M',      # '2006.10.25. 14:30'
+    "%Y.%m.%d. %H:%M:%S",  # '2006.10.25. 14:30:59'
+    "%Y.%m.%d. %H:%M:%S.%f",  # '2006.10.25. 14:30:59.000200'
+    "%Y.%m.%d. %H:%M",  # '2006.10.25. 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '  # Non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = " "  # Non-breaking space
 NUMBER_GROUPING = 3

+ 30 - 30
django/conf/locale/id/formats.py

@@ -2,48 +2,48 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j N Y'
+DATE_FORMAT = "j N Y"
 DATETIME_FORMAT = "j N Y, G.i"
-TIME_FORMAT = 'G.i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'd-m-Y G.i'
+TIME_FORMAT = "G.i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d-m-Y"
+SHORT_DATETIME_FORMAT = "d-m-Y G.i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d-%m-%Y',  # '25-10-2009'
-    '%d/%m/%Y',  # '25/10/2009'
-    '%d-%m-%y',  # '25-10-09'
-    '%d/%m/%y',  # '25/10/09'
-    '%d %b %Y',                         # '25 Oct 2006',
-    '%d %B %Y',                         # '25 October 2006'
-    '%m/%d/%y',  # '10/25/06'
-    '%m/%d/%Y',  # '10/25/2009'
+    "%d-%m-%Y",  # '25-10-2009'
+    "%d/%m/%Y",  # '25/10/2009'
+    "%d-%m-%y",  # '25-10-09'
+    "%d/%m/%y",  # '25/10/09'
+    "%d %b %Y",  # '25 Oct 2006',
+    "%d %B %Y",  # '25 October 2006'
+    "%m/%d/%y",  # '10/25/06'
+    "%m/%d/%Y",  # '10/25/2009'
 ]
 
 TIME_INPUT_FORMATS = [
-    '%H.%M.%S',                         # '14.30.59'
-    '%H.%M',                            # '14.30'
+    "%H.%M.%S",  # '14.30.59'
+    "%H.%M",  # '14.30'
 ]
 
 DATETIME_INPUT_FORMATS = [
-    '%d-%m-%Y %H.%M.%S',                # '25-10-2009 14.30.59'
-    '%d-%m-%Y %H.%M.%S.%f',             # '25-10-2009 14.30.59.000200'
-    '%d-%m-%Y %H.%M',                   # '25-10-2009 14.30'
-    '%d-%m-%y %H.%M.%S',                # '25-10-09' 14.30.59'
-    '%d-%m-%y %H.%M.%S.%f',             # '25-10-09' 14.30.59.000200'
-    '%d-%m-%y %H.%M',                   # '25-10-09' 14.30'
-    '%m/%d/%y %H.%M.%S',                # '10/25/06 14.30.59'
-    '%m/%d/%y %H.%M.%S.%f',             # '10/25/06 14.30.59.000200'
-    '%m/%d/%y %H.%M',                   # '10/25/06 14.30'
-    '%m/%d/%Y %H.%M.%S',                # '25/10/2009 14.30.59'
-    '%m/%d/%Y %H.%M.%S.%f',             # '25/10/2009 14.30.59.000200'
-    '%m/%d/%Y %H.%M',                   # '25/10/2009 14.30'
+    "%d-%m-%Y %H.%M.%S",  # '25-10-2009 14.30.59'
+    "%d-%m-%Y %H.%M.%S.%f",  # '25-10-2009 14.30.59.000200'
+    "%d-%m-%Y %H.%M",  # '25-10-2009 14.30'
+    "%d-%m-%y %H.%M.%S",  # '25-10-09' 14.30.59'
+    "%d-%m-%y %H.%M.%S.%f",  # '25-10-09' 14.30.59.000200'
+    "%d-%m-%y %H.%M",  # '25-10-09' 14.30'
+    "%m/%d/%y %H.%M.%S",  # '10/25/06 14.30.59'
+    "%m/%d/%y %H.%M.%S.%f",  # '10/25/06 14.30.59.000200'
+    "%m/%d/%y %H.%M",  # '10/25/06 14.30'
+    "%m/%d/%Y %H.%M.%S",  # '25/10/2009 14.30.59'
+    "%m/%d/%Y %H.%M.%S.%f",  # '25/10/2009 14.30.59.000200'
+    "%m/%d/%Y %H.%M",  # '25/10/2009 14.30'
 ]
 
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 19 - 19
django/conf/locale/ig/formats.py

@@ -2,31 +2,31 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'P'
-DATETIME_FORMAT = 'j F Y P'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "P"
+DATETIME_FORMAT = "j F Y P"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%Y',              # '25.10.2006'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y',              # '25.10.06'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y",  # '25.10.06'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 7 - 7
django/conf/locale/is/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
 # DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.n.Y'
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.n.Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'j.n.Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 30 - 30
django/conf/locale/it/formats.py

@@ -2,42 +2,42 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'  # 25 Ottobre 2006
-TIME_FORMAT = 'H:i'  # 14:30
-DATETIME_FORMAT = 'l d F Y H:i'  # Mercoledì 25 Ottobre 2006 14:30
-YEAR_MONTH_FORMAT = 'F Y'  # Ottobre 2006
-MONTH_DAY_FORMAT = 'j F'  # 25 Ottobre
-SHORT_DATE_FORMAT = 'd/m/Y'  # 25/12/2009
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'  # 25/10/2009 14:30
+DATE_FORMAT = "d F Y"  # 25 Ottobre 2006
+TIME_FORMAT = "H:i"  # 14:30
+DATETIME_FORMAT = "l d F Y H:i"  # Mercoledì 25 Ottobre 2006 14:30
+YEAR_MONTH_FORMAT = "F Y"  # Ottobre 2006
+MONTH_DAY_FORMAT = "j F"  # 25 Ottobre
+SHORT_DATE_FORMAT = "d/m/Y"  # 25/12/2009
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"  # 25/10/2009 14:30
 FIRST_DAY_OF_WEEK = 1  # Lunedì
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%Y/%m/%d',  # '2006/10/25'
-    '%d-%m-%Y',  # '25-10-2006'
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d-%m-%y',  # '25-10-06'
-    '%d/%m/%y',  # '25/10/06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%Y/%m/%d",  # '2006/10/25'
+    "%d-%m-%Y",  # '25-10-2006'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d-%m-%y",  # '25-10-06'
+    "%d/%m/%y",  # '25/10/06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',  # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d-%m-%Y %H:%M:%S',     # '25-10-2006 14:30:59'
-    '%d-%m-%Y %H:%M:%S.%f',  # '25-10-2006 14:30:59.000200'
-    '%d-%m-%Y %H:%M',        # '25-10-2006 14:30'
-    '%d-%m-%y %H:%M:%S',     # '25-10-06 14:30:59'
-    '%d-%m-%y %H:%M:%S.%f',  # '25-10-06 14:30:59.000200'
-    '%d-%m-%y %H:%M',        # '25-10-06 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d-%m-%Y %H:%M:%S",  # '25-10-2006 14:30:59'
+    "%d-%m-%Y %H:%M:%S.%f",  # '25-10-2006 14:30:59.000200'
+    "%d-%m-%Y %H:%M",  # '25-10-2006 14:30'
+    "%d-%m-%y %H:%M:%S",  # '25-10-06 14:30:59'
+    "%d-%m-%y %H:%M:%S.%f",  # '25-10-06 14:30:59.000200'
+    "%d-%m-%y %H:%M",  # '25-10-06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 9 - 9
django/conf/locale/ja/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'Y年n月j日'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'Y年n月j日G:i'
-YEAR_MONTH_FORMAT = 'Y年n月'
-MONTH_DAY_FORMAT = 'n月j日'
-SHORT_DATE_FORMAT = 'Y/m/d'
-SHORT_DATETIME_FORMAT = 'Y/m/d G:i'
+DATE_FORMAT = "Y年n月j日"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "Y年n月j日G:i"
+YEAR_MONTH_FORMAT = "Y年n月"
+MONTH_DAY_FORMAT = "n月j日"
+SHORT_DATE_FORMAT = "Y/m/d"
+SHORT_DATETIME_FORMAT = "Y/m/d G:i"
 # FIRST_DAY_OF_WEEK =
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ SHORT_DATETIME_FORMAT = 'Y/m/d G:i'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 # NUMBER_GROUPING =

+ 28 - 28
django/conf/locale/ka/formats.py

@@ -2,24 +2,24 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'l, j F, Y'
-TIME_FORMAT = 'h:i a'
-DATETIME_FORMAT = 'j F, Y h:i a'
-YEAR_MONTH_FORMAT = 'F, Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j.M.Y'
-SHORT_DATETIME_FORMAT = 'j.M.Y H:i'
+DATE_FORMAT = "l, j F, Y"
+TIME_FORMAT = "h:i a"
+DATETIME_FORMAT = "j F, Y h:i a"
+YEAR_MONTH_FORMAT = "F, Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j.M.Y"
+SHORT_DATETIME_FORMAT = "j.M.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # (Monday)
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%m/%d/%Y',  # '10/25/2006'
-    '%m/%d/%y',  # '10/25/06'
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
     # "%d %b %Y",  # '25 Oct 2006'
     # "%d %b, %Y",  # '25 Oct, 2006'
     # "%d %b. %Y",  # '25 Oct. 2006'
@@ -27,22 +27,22 @@ DATE_INPUT_FORMATS = [
     # "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
+DECIMAL_SEPARATOR = "."
 THOUSAND_SEPARATOR = " "
 NUMBER_GROUPING = 3

+ 8 - 8
django/conf/locale/km/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j ខែ F ឆ្នាំ Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j ខែ F ឆ្នាំ Y, G:i'
+DATE_FORMAT = "j ខែ F ឆ្នាំ Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j ខែ F ឆ្នាំ Y, G:i"
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-SHORT_DATETIME_FORMAT = 'j M Y, G:i'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
+SHORT_DATETIME_FORMAT = "j M Y, G:i"
 # FIRST_DAY_OF_WEEK =
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ SHORT_DATETIME_FORMAT = 'j M Y, G:i'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 4 - 4
django/conf/locale/kn/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'h:i A'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "h:i A"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 

+ 29 - 30
django/conf/locale/ko/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'Y년 n월 j일'
-TIME_FORMAT = 'A g:i'
-DATETIME_FORMAT = 'Y년 n월 j일 g:i A'
-YEAR_MONTH_FORMAT = 'Y년 n월'
-MONTH_DAY_FORMAT = 'n월 j일'
-SHORT_DATE_FORMAT = 'Y-n-j.'
-SHORT_DATETIME_FORMAT = 'Y-n-j H:i'
+DATE_FORMAT = "Y년 n월 j일"
+TIME_FORMAT = "A g:i"
+DATETIME_FORMAT = "Y년 n월 j일 g:i A"
+YEAR_MONTH_FORMAT = "Y년 n월"
+MONTH_DAY_FORMAT = "n월 j일"
+SHORT_DATE_FORMAT = "Y-n-j."
+SHORT_DATETIME_FORMAT = "Y-n-j H:i"
 # FIRST_DAY_OF_WEEK =
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%m/%d/%Y',  # '10/25/2006'
-    '%m/%d/%y',  # '10/25/06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
     # "%b %d %Y",  # 'Oct 25 2006'
     # "%b %d, %Y",  # 'Oct 25, 2006'
     # "%d %b %Y",  # '25 Oct 2006'
@@ -26,30 +26,29 @@ DATE_INPUT_FORMATS = [
     # "%B %d, %Y",  #'October 25, 2006'
     # "%d %B %Y",  # '25 October 2006'
     # "%d %B, %Y",  # '25 October, 2006'
-    '%Y년 %m월 %d일',                   # '2006년 10월 25일', with localized suffix.
+    "%Y년 %m월 %d일",  # '2006년 10월 25일', with localized suffix.
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
-    '%H시 %M분 %S초',   # '14시 30분 59초'
-    '%H시 %M분',        # '14시 30분'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
+    "%H시 %M분 %S초",  # '14시 30분 59초'
+    "%H시 %M분",  # '14시 30분'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
-
-    '%Y년 %m월 %d일 %H시 %M분 %S초',  # '2006년 10월 25일 14시 30분 59초'
-    '%Y년 %m월 %d일 %H시 %M분',       # '2006년 10월 25일 14시 30분'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
+    "%Y년 %m월 %d일 %H시 %M분 %S초",  # '2006년 10월 25일 14시 30분 59초'
+    "%Y년 %m월 %d일 %H시 %M분",  # '2006년 10월 25일 14시 30분'
 ]
 
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 19 - 19
django/conf/locale/ky/formats.py

@@ -2,31 +2,31 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y ж.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j E Y ж. G:i'
-YEAR_MONTH_FORMAT = 'F Y ж.'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j E Y ж."
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j E Y ж. G:i"
+YEAR_MONTH_FORMAT = "F Y ж."
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Дүйшөмбү, Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%Y',              # '25.10.2006'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y',              # '25.10.06'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y",  # '25.10.06'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 30 - 30
django/conf/locale/lt/formats.py

@@ -2,44 +2,44 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'Y \m. E j \d.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'Y \m. E j \d., H:i'
-YEAR_MONTH_FORMAT = r'Y \m. F'
-MONTH_DAY_FORMAT = r'E j \d.'
-SHORT_DATE_FORMAT = 'Y-m-d'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
+DATE_FORMAT = r"Y \m. E j \d."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"Y \m. E j \d., H:i"
+YEAR_MONTH_FORMAT = r"Y \m. F"
+MONTH_DAY_FORMAT = r"E j \d."
+SHORT_DATE_FORMAT = "Y-m-d"
+SHORT_DATETIME_FORMAT = "Y-m-d H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
-    '%H.%M.%S',     # '14.30.59'
-    '%H.%M.%S.%f',  # '14.30.59.000200'
-    '%H.%M',        # '14.30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
+    "%H.%M.%S",  # '14.30.59'
+    "%H.%M.%S.%f",  # '14.30.59.000200'
+    "%H.%M",  # '14.30'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y %H.%M.%S',     # '25.10.06 14.30.59'
-    '%d.%m.%y %H.%M.%S.%f',  # '25.10.06 14.30.59.000200'
-    '%d.%m.%y %H.%M',        # '25.10.06 14.30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y %H.%M.%S",  # '25.10.06 14.30.59'
+    "%d.%m.%y %H.%M.%S.%f",  # '25.10.06 14.30.59.000200'
+    "%d.%m.%y %H.%M",  # '25.10.06 14.30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 30 - 30
django/conf/locale/lv/formats.py

@@ -2,45 +2,45 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'Y. \g\a\d\a j. F'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'Y. \g\a\d\a j. F, H:i'
-YEAR_MONTH_FORMAT = r'Y. \g. F'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = r'j.m.Y'
-SHORT_DATETIME_FORMAT = 'j.m.Y H:i'
+DATE_FORMAT = r"Y. \g\a\d\a j. F"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"Y. \g\a\d\a j. F, H:i"
+YEAR_MONTH_FORMAT = r"Y. \g. F"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = r"j.m.Y"
+SHORT_DATETIME_FORMAT = "j.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
-    '%H.%M.%S',     # '14.30.59'
-    '%H.%M.%S.%f',  # '14.30.59.000200'
-    '%H.%M',        # '14.30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
+    "%H.%M.%S",  # '14.30.59'
+    "%H.%M.%S.%f",  # '14.30.59.000200'
+    "%H.%M",  # '14.30'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y %H.%M.%S',     # '25.10.06 14.30.59'
-    '%d.%m.%y %H.%M.%S.%f',  # '25.10.06 14.30.59.000200'
-    '%d.%m.%y %H.%M',        # '25.10.06 14.30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y %H.%M.%S",  # '25.10.06 14.30.59'
+    "%d.%m.%y %H.%M.%S.%f",  # '25.10.06 14.30.59.000200'
+    "%d.%m.%y %H.%M",  # '25.10.06 14.30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '  # Non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = " "  # Non-breaking space
 NUMBER_GROUPING = 3

+ 25 - 25
django/conf/locale/mk/formats.py

@@ -2,39 +2,39 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y'
-SHORT_DATETIME_FORMAT = 'j.m.Y H:i'
+DATE_FORMAT = "d F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.m.Y"
+SHORT_DATETIME_FORMAT = "j.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
-    '%d. %m. %Y',  # '25. 10. 2006'
-    '%d. %m. %y',  # '25. 10. 06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
+    "%d. %m. %Y",  # '25. 10. 2006'
+    "%d. %m. %y",  # '25. 10. 06'
 ]
 
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',       # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',    # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',          # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',       # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',    # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',          # '25.10.06 14:30'
-    '%d. %m. %Y %H:%M:%S',     # '25. 10. 2006 14:30:59'
-    '%d. %m. %Y %H:%M:%S.%f',  # '25. 10. 2006 14:30:59.000200'
-    '%d. %m. %Y %H:%M',        # '25. 10. 2006 14:30'
-    '%d. %m. %y %H:%M:%S',     # '25. 10. 06 14:30:59'
-    '%d. %m. %y %H:%M:%S.%f',  # '25. 10. 06 14:30:59.000200'
-    '%d. %m. %y %H:%M',        # '25. 10. 06 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d. %m. %Y %H:%M:%S",  # '25. 10. 2006 14:30:59'
+    "%d. %m. %Y %H:%M:%S.%f",  # '25. 10. 2006 14:30:59.000200'
+    "%d. %m. %Y %H:%M",  # '25. 10. 2006 14:30'
+    "%d. %m. %y %H:%M:%S",  # '25. 10. 06 14:30:59'
+    "%d. %m. %y %H:%M:%S.%f",  # '25. 10. 06 14:30:59.000200'
+    "%d. %m. %y %H:%M",  # '25. 10. 06 14:30'
 ]
 
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/ml/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'N j, Y'
-TIME_FORMAT = 'P'
-DATETIME_FORMAT = 'N j, Y, P'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'F j'
-SHORT_DATE_FORMAT = 'm/d/Y'
-SHORT_DATETIME_FORMAT = 'm/d/Y P'
+DATE_FORMAT = "N j, Y"
+TIME_FORMAT = "P"
+DATETIME_FORMAT = "N j, Y, P"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "F j"
+SHORT_DATE_FORMAT = "m/d/Y"
+SHORT_DATETIME_FORMAT = "m/d/Y P"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%m/%d/%Y',  # '10/25/2006'
-    '%m/%d/%y',  # '10/25/06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
     # "%b %d %Y",  # 'Oct 25 2006'
     # "%b %d, %Y",  # 'Oct 25, 2006'
     # "%d %b %Y",  # '25 Oct 2006'
@@ -28,16 +28,16 @@ DATE_INPUT_FORMATS = [
     # "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 3 - 3
django/conf/locale/mn/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "d F Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
 # MONTH_DAY_FORMAT =
-SHORT_DATE_FORMAT = 'j M Y'
+SHORT_DATE_FORMAT = "j M Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 

+ 26 - 26
django/conf/locale/ms/formats.py

@@ -2,37 +2,37 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j M Y'                   # '25 Oct 2006'
-TIME_FORMAT = 'P'                       # '2:30 p.m.'
-DATETIME_FORMAT = 'j M Y, P'            # '25 Oct 2006, 2:30 p.m.'
-YEAR_MONTH_FORMAT = 'F Y'               # 'October 2006'
-MONTH_DAY_FORMAT = 'j F'                # '25 October'
-SHORT_DATE_FORMAT = 'd/m/Y'             # '25/10/2006'
-SHORT_DATETIME_FORMAT = 'd/m/Y P'       # '25/10/2006 2:30 p.m.'
-FIRST_DAY_OF_WEEK = 0                   # Sunday
+DATE_FORMAT = "j M Y"  # '25 Oct 2006'
+TIME_FORMAT = "P"  # '2:30 p.m.'
+DATETIME_FORMAT = "j M Y, P"  # '25 Oct 2006, 2:30 p.m.'
+YEAR_MONTH_FORMAT = "F Y"  # 'October 2006'
+MONTH_DAY_FORMAT = "j F"  # '25 October'
+SHORT_DATE_FORMAT = "d/m/Y"  # '25/10/2006'
+SHORT_DATETIME_FORMAT = "d/m/Y P"  # '25/10/2006 2:30 p.m.'
+FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',                         # '2006-10-25'
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%d %b %Y',  # '25 Oct 2006'
-    '%d %b, %Y',  # '25 Oct, 2006'
-    '%d %B %Y',  # '25 October 2006'
-    '%d %B, %Y',  # '25 October, 2006'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%d %b %Y",  # '25 Oct 2006'
+    "%d %b, %Y",  # '25 Oct, 2006'
+    "%d %B %Y",  # '25 October 2006'
+    "%d %B, %Y",  # '25 October, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',                # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',             # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',                   # '2006-10-25 14:30'
-    '%d/%m/%Y %H:%M:%S',                # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',             # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',                   # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',                # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',             # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',                   # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/nb/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
     # "%d. %b %Y",  # '25. okt 2006'
     # "%d %b %Y",  # '25 okt 2006'
     # "%d. %b. %Y",  # '25. okt. 2006'
@@ -26,16 +26,16 @@ DATE_INPUT_FORMATS = [
     # "%d %B %Y",  # '25 oktober 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 51 - 51
django/conf/locale/nl/formats.py

@@ -2,23 +2,23 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'                   # '20 januari 2009'
-TIME_FORMAT = 'H:i'                     # '15:23'
-DATETIME_FORMAT = 'j F Y H:i'           # '20 januari 2009 15:23'
-YEAR_MONTH_FORMAT = 'F Y'               # 'januari 2009'
-MONTH_DAY_FORMAT = 'j F'                # '20 januari'
-SHORT_DATE_FORMAT = 'j-n-Y'             # '20-1-2009'
-SHORT_DATETIME_FORMAT = 'j-n-Y H:i'     # '20-1-2009 15:23'
-FIRST_DAY_OF_WEEK = 1                   # Monday (in Dutch 'maandag')
+DATE_FORMAT = "j F Y"  # '20 januari 2009'
+TIME_FORMAT = "H:i"  # '15:23'
+DATETIME_FORMAT = "j F Y H:i"  # '20 januari 2009 15:23'
+YEAR_MONTH_FORMAT = "F Y"  # 'januari 2009'
+MONTH_DAY_FORMAT = "j F"  # '20 januari'
+SHORT_DATE_FORMAT = "j-n-Y"  # '20-1-2009'
+SHORT_DATETIME_FORMAT = "j-n-Y H:i"  # '20-1-2009 15:23'
+FIRST_DAY_OF_WEEK = 1  # Monday (in Dutch 'maandag')
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d-%m-%Y',  # '20-01-2009'
-    '%d-%m-%y',  # '20-01-09'
-    '%d/%m/%Y',  # '20/01/2009'
-    '%d/%m/%y',  # '20/01/09'
-    '%Y/%m/%d',                         # '2009/01/20'
+    "%d-%m-%Y",  # '20-01-2009'
+    "%d-%m-%y",  # '20-01-09'
+    "%d/%m/%Y",  # '20/01/2009'
+    "%d/%m/%y",  # '20/01/09'
+    "%Y/%m/%d",  # '2009/01/20'
     # "%d %b %Y",  # '20 jan 2009'
     # "%d %b %y",  # '20 jan 09'
     # "%d %B %Y",  # '20 januari 2009'
@@ -26,67 +26,67 @@ DATE_INPUT_FORMATS = [
 ]
 # Kept ISO formats as one is in first position
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',                         # '15:23:35'
-    '%H:%M:%S.%f',                      # '15:23:35.000200'
-    '%H.%M:%S',                         # '15.23:35'
-    '%H.%M:%S.%f',                      # '15.23:35.000200'
-    '%H.%M',                            # '15.23'
-    '%H:%M',                            # '15:23'
+    "%H:%M:%S",  # '15:23:35'
+    "%H:%M:%S.%f",  # '15:23:35.000200'
+    "%H.%M:%S",  # '15.23:35'
+    "%H.%M:%S.%f",  # '15.23:35.000200'
+    "%H.%M",  # '15.23'
+    "%H:%M",  # '15:23'
 ]
 DATETIME_INPUT_FORMATS = [
     # With time in %H:%M:%S :
-    '%d-%m-%Y %H:%M:%S',  # '20-01-2009 15:23:35'
-    '%d-%m-%y %H:%M:%S',  # '20-01-09 15:23:35'
-    '%Y-%m-%d %H:%M:%S',  # '2009-01-20 15:23:35'
-    '%d/%m/%Y %H:%M:%S',  # '20/01/2009 15:23:35'
-    '%d/%m/%y %H:%M:%S',  # '20/01/09 15:23:35'
-    '%Y/%m/%d %H:%M:%S',  # '2009/01/20 15:23:35'
+    "%d-%m-%Y %H:%M:%S",  # '20-01-2009 15:23:35'
+    "%d-%m-%y %H:%M:%S",  # '20-01-09 15:23:35'
+    "%Y-%m-%d %H:%M:%S",  # '2009-01-20 15:23:35'
+    "%d/%m/%Y %H:%M:%S",  # '20/01/2009 15:23:35'
+    "%d/%m/%y %H:%M:%S",  # '20/01/09 15:23:35'
+    "%Y/%m/%d %H:%M:%S",  # '2009/01/20 15:23:35'
     # "%d %b %Y %H:%M:%S",  # '20 jan 2009 15:23:35'
     # "%d %b %y %H:%M:%S",  # '20 jan 09 15:23:35'
     # "%d %B %Y %H:%M:%S",  # '20 januari 2009 15:23:35'
     # "%d %B %y %H:%M:%S",  # '20 januari 2009 15:23:35'
     # With time in %H:%M:%S.%f :
-    '%d-%m-%Y %H:%M:%S.%f',  # '20-01-2009 15:23:35.000200'
-    '%d-%m-%y %H:%M:%S.%f',  # '20-01-09 15:23:35.000200'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2009-01-20 15:23:35.000200'
-    '%d/%m/%Y %H:%M:%S.%f',  # '20/01/2009 15:23:35.000200'
-    '%d/%m/%y %H:%M:%S.%f',  # '20/01/09 15:23:35.000200'
-    '%Y/%m/%d %H:%M:%S.%f',  # '2009/01/20 15:23:35.000200'
+    "%d-%m-%Y %H:%M:%S.%f",  # '20-01-2009 15:23:35.000200'
+    "%d-%m-%y %H:%M:%S.%f",  # '20-01-09 15:23:35.000200'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2009-01-20 15:23:35.000200'
+    "%d/%m/%Y %H:%M:%S.%f",  # '20/01/2009 15:23:35.000200'
+    "%d/%m/%y %H:%M:%S.%f",  # '20/01/09 15:23:35.000200'
+    "%Y/%m/%d %H:%M:%S.%f",  # '2009/01/20 15:23:35.000200'
     # With time in %H.%M:%S :
-    '%d-%m-%Y %H.%M:%S',  # '20-01-2009 15.23:35'
-    '%d-%m-%y %H.%M:%S',  # '20-01-09 15.23:35'
-    '%d/%m/%Y %H.%M:%S',  # '20/01/2009 15.23:35'
-    '%d/%m/%y %H.%M:%S',  # '20/01/09 15.23:35'
+    "%d-%m-%Y %H.%M:%S",  # '20-01-2009 15.23:35'
+    "%d-%m-%y %H.%M:%S",  # '20-01-09 15.23:35'
+    "%d/%m/%Y %H.%M:%S",  # '20/01/2009 15.23:35'
+    "%d/%m/%y %H.%M:%S",  # '20/01/09 15.23:35'
     # "%d %b %Y %H.%M:%S",  # '20 jan 2009 15.23:35'
     # "%d %b %y %H.%M:%S",  # '20 jan 09 15.23:35'
     # "%d %B %Y %H.%M:%S",  # '20 januari 2009 15.23:35'
     # "%d %B %y %H.%M:%S",  # '20 januari 2009 15.23:35'
     # With time in %H.%M:%S.%f :
-    '%d-%m-%Y %H.%M:%S.%f',  # '20-01-2009 15.23:35.000200'
-    '%d-%m-%y %H.%M:%S.%f',  # '20-01-09 15.23:35.000200'
-    '%d/%m/%Y %H.%M:%S.%f',  # '20/01/2009 15.23:35.000200'
-    '%d/%m/%y %H.%M:%S.%f',  # '20/01/09 15.23:35.000200'
+    "%d-%m-%Y %H.%M:%S.%f",  # '20-01-2009 15.23:35.000200'
+    "%d-%m-%y %H.%M:%S.%f",  # '20-01-09 15.23:35.000200'
+    "%d/%m/%Y %H.%M:%S.%f",  # '20/01/2009 15.23:35.000200'
+    "%d/%m/%y %H.%M:%S.%f",  # '20/01/09 15.23:35.000200'
     # With time in %H:%M :
-    '%d-%m-%Y %H:%M',  # '20-01-2009 15:23'
-    '%d-%m-%y %H:%M',  # '20-01-09 15:23'
-    '%Y-%m-%d %H:%M',  # '2009-01-20 15:23'
-    '%d/%m/%Y %H:%M',  # '20/01/2009 15:23'
-    '%d/%m/%y %H:%M',  # '20/01/09 15:23'
-    '%Y/%m/%d %H:%M',  # '2009/01/20 15:23'
+    "%d-%m-%Y %H:%M",  # '20-01-2009 15:23'
+    "%d-%m-%y %H:%M",  # '20-01-09 15:23'
+    "%Y-%m-%d %H:%M",  # '2009-01-20 15:23'
+    "%d/%m/%Y %H:%M",  # '20/01/2009 15:23'
+    "%d/%m/%y %H:%M",  # '20/01/09 15:23'
+    "%Y/%m/%d %H:%M",  # '2009/01/20 15:23'
     # "%d %b %Y %H:%M",  # '20 jan 2009 15:23'
     # "%d %b %y %H:%M",  # '20 jan 09 15:23'
     # "%d %B %Y %H:%M",  # '20 januari 2009 15:23'
     # "%d %B %y %H:%M",  # '20 januari 2009 15:23'
     # With time in %H.%M :
-    '%d-%m-%Y %H.%M',  # '20-01-2009 15.23'
-    '%d-%m-%y %H.%M',  # '20-01-09 15.23'
-    '%d/%m/%Y %H.%M',  # '20/01/2009 15.23'
-    '%d/%m/%y %H.%M',  # '20/01/09 15.23'
+    "%d-%m-%Y %H.%M",  # '20-01-2009 15.23'
+    "%d-%m-%y %H.%M",  # '20-01-09 15.23'
+    "%d/%m/%Y %H.%M",  # '20/01/2009 15.23'
+    "%d/%m/%y %H.%M",  # '20/01/09 15.23'
     # "%d %b %Y %H.%M",  # '20 jan 2009 15.23'
     # "%d %b %y %H.%M",  # '20 jan 09 15.23'
     # "%d %B %Y %H.%M",  # '20 januari 2009 15.23'
     # "%d %B %y %H.%M",  # '20 januari 2009 15.23'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/nn/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
     # "%d. %b %Y",  # '25. okt 2006'
     # "%d %b %Y",  # '25 okt 2006'
     # "%d. %b. %Y",  # '25. okt. 2006'
@@ -26,16 +26,16 @@ DATE_INPUT_FORMATS = [
     # "%d %B %Y",  # '25 oktober 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 15 - 15
django/conf/locale/pl/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j E Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j E'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'd-m-Y  H:i'
+DATE_FORMAT = "j E Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j E Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j E"
+SHORT_DATE_FORMAT = "d-m-Y"
+SHORT_DATETIME_FORMAT = "d-m-Y  H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
-    '%y-%m-%d',                 # '06-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
+    "%y-%m-%d",  # '06-10-25'
     # "%d. %B %Y",  # '25. października 2006'
     # "%d. %b. %Y",  # '25. paź. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = ' '
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = " "
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/pt/formats.py

@@ -2,38 +2,38 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y à\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y à\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',  # '2006-10-25'
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
     # "%d de %b de %Y",  # '25 de Out de 2006'
     # "%d de %b, %Y",  # '25 Out, 2006'
     # "%d de %B de %Y",  # '25 de Outubro de 2006'
     # "%d de %B, %Y",  # '25 de Outubro, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',  # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/pt_BR/formats.py

@@ -2,33 +2,33 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j \d\e F \d\e Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'j \d\e F \d\e Y à\s H:i'
-YEAR_MONTH_FORMAT = r'F \d\e Y'
-MONTH_DAY_FORMAT = r'j \d\e F'
-SHORT_DATE_FORMAT = 'd/m/Y'
-SHORT_DATETIME_FORMAT = 'd/m/Y H:i'
+DATE_FORMAT = r"j \d\e F \d\e Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"j \d\e F \d\e Y à\s H:i"
+YEAR_MONTH_FORMAT = r"F \d\e Y"
+MONTH_DAY_FORMAT = r"j \d\e F"
+SHORT_DATE_FORMAT = "d/m/Y"
+SHORT_DATETIME_FORMAT = "d/m/Y H:i"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
     # "%d de %b de %Y",  # '24 de Out de 2006'
     # "%d de %b, %Y",  # '25 Out, 2006'
     # "%d de %B de %Y",  # '25 de Outubro de 2006'
     # "%d de %B, %Y",  # '25 de Outubro, 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
-    '%d/%m/%y %H:%M:%S',     # '25/10/06 14:30:59'
-    '%d/%m/%y %H:%M:%S.%f',  # '25/10/06 14:30:59.000200'
-    '%d/%m/%y %H:%M',        # '25/10/06 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
+    "%d/%m/%y %H:%M:%S",  # '25/10/06 14:30:59'
+    "%d/%m/%y %H:%M:%S.%f",  # '25/10/06 14:30:59.000200'
+    "%d/%m/%y %H:%M",  # '25/10/06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 20 - 20
django/conf/locale/ro/formats.py

@@ -2,34 +2,34 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j F Y, H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y, H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j F Y, H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y, H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',
-    '%d.%b.%Y',
-    '%d %B %Y',
-    '%A, %d %B %Y',
+    "%d.%m.%Y",
+    "%d.%b.%Y",
+    "%d %B %Y",
+    "%A, %d %B %Y",
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M',
-    '%H:%M:%S',
-    '%H:%M:%S.%f',
+    "%H:%M",
+    "%H:%M:%S",
+    "%H:%M:%S.%f",
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y, %H:%M',
-    '%d.%m.%Y, %H:%M:%S',
-    '%d.%B.%Y, %H:%M',
-    '%d.%B.%Y, %H:%M:%S',
+    "%d.%m.%Y, %H:%M",
+    "%d.%m.%Y, %H:%M:%S",
+    "%d.%B.%Y, %H:%M",
+    "%d.%B.%Y, %H:%M:%S",
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/ru/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y г.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j E Y г. G:i'
-YEAR_MONTH_FORMAT = 'F Y г.'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j E Y г."
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j E Y г. G:i"
+YEAR_MONTH_FORMAT = "F Y г."
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 15 - 15
django/conf/locale/sk/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j. F Y G:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y G:i'
+DATE_FORMAT = "j. F Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j. F Y G:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y G:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
-    '%y-%m-%d',                 # '06-10-25'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
+    "%y-%m-%d",  # '06-10-25'
     # "%d. %B %Y",  # '25. October 2006'
     # "%d. %b. %Y",  # '25. Oct. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 29 - 29
django/conf/locale/sl/formats.py

@@ -2,43 +2,43 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd. F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j. M. Y'
-SHORT_DATETIME_FORMAT = 'j.n.Y. H:i'
+DATE_FORMAT = "d. F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y. H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j. M. Y"
+SHORT_DATETIME_FORMAT = "j.n.Y. H:i"
 FIRST_DAY_OF_WEEK = 0
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
-    '%d-%m-%Y',                     # '25-10-2006'
-    '%d. %m. %Y',  # '25. 10. 2006'
-    '%d. %m. %y',  # '25. 10. 06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
+    "%d-%m-%Y",  # '25-10-2006'
+    "%d. %m. %Y",  # '25. 10. 2006'
+    "%d. %m. %y",  # '25. 10. 06'
 ]
 
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',            # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',         # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',               # '25.10.2006 14:30'
-    '%d.%m.%y %H:%M:%S',            # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',         # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',                # '25.10.06 14:30'
-    '%d-%m-%Y %H:%M:%S',            # '25-10-2006 14:30:59'
-    '%d-%m-%Y %H:%M:%S.%f',         # '25-10-2006 14:30:59.000200'
-    '%d-%m-%Y %H:%M',               # '25-10-2006 14:30'
-    '%d. %m. %Y %H:%M:%S',          # '25. 10. 2006 14:30:59'
-    '%d. %m. %Y %H:%M:%S.%f',       # '25. 10. 2006 14:30:59.000200'
-    '%d. %m. %Y %H:%M',             # '25. 10. 2006 14:30'
-    '%d. %m. %y %H:%M:%S',          # '25. 10. 06 14:30:59'
-    '%d. %m. %y %H:%M:%S.%f',       # '25. 10. 06 14:30:59.000200'
-    '%d. %m. %y %H:%M',             # '25. 10. 06 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d-%m-%Y %H:%M:%S",  # '25-10-2006 14:30:59'
+    "%d-%m-%Y %H:%M:%S.%f",  # '25-10-2006 14:30:59.000200'
+    "%d-%m-%Y %H:%M",  # '25-10-2006 14:30'
+    "%d. %m. %Y %H:%M:%S",  # '25. 10. 2006 14:30:59'
+    "%d. %m. %Y %H:%M:%S.%f",  # '25. 10. 2006 14:30:59.000200'
+    "%d. %m. %Y %H:%M",  # '25. 10. 2006 14:30'
+    "%d. %m. %y %H:%M:%S",  # '25. 10. 06 14:30:59'
+    "%d. %m. %y %H:%M:%S.%f",  # '25. 10. 06 14:30:59.000200'
+    "%d. %m. %y %H:%M",  # '25. 10. 06 14:30'
 ]
 
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 7 - 7
django/conf/locale/sq/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'g.i.A'
+DATE_FORMAT = "d F Y"
+TIME_FORMAT = "g.i.A"
 # DATETIME_FORMAT =
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y-m-d'
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "Y-m-d"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 
@@ -16,6 +16,6 @@ SHORT_DATE_FORMAT = 'Y-m-d'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 25 - 25
django/conf/locale/sr/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
+DATE_FORMAT = "j. F Y."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y. H:i"
+YEAR_MONTH_FORMAT = "F Y."
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.m.Y."
+SHORT_DATETIME_FORMAT = "j.m.Y. H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y.',  # '25.10.2006.'
-    '%d.%m.%y.',  # '25.10.06.'
-    '%d. %m. %Y.',  # '25. 10. 2006.'
-    '%d. %m. %y.',  # '25. 10. 06.'
+    "%d.%m.%Y.",  # '25.10.2006.'
+    "%d.%m.%y.",  # '25.10.06.'
+    "%d. %m. %Y.",  # '25. 10. 2006.'
+    "%d. %m. %y.",  # '25. 10. 06.'
     # "%d. %b %y.",  # '25. Oct 06.'
     # "%d. %B %y.",  # '25. October 06.'
     # "%d. %b '%y.",  # '25. Oct '06.'
@@ -26,19 +26,19 @@ DATE_INPUT_FORMATS = [
     # "%d. %B %Y.",  # '25. October 2006.'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y. %H:%M:%S',       # '25.10.2006. 14:30:59'
-    '%d.%m.%Y. %H:%M:%S.%f',    # '25.10.2006. 14:30:59.000200'
-    '%d.%m.%Y. %H:%M',          # '25.10.2006. 14:30'
-    '%d.%m.%y. %H:%M:%S',       # '25.10.06. 14:30:59'
-    '%d.%m.%y. %H:%M:%S.%f',    # '25.10.06. 14:30:59.000200'
-    '%d.%m.%y. %H:%M',          # '25.10.06. 14:30'
-    '%d. %m. %Y. %H:%M:%S',     # '25. 10. 2006. 14:30:59'
-    '%d. %m. %Y. %H:%M:%S.%f',  # '25. 10. 2006. 14:30:59.000200'
-    '%d. %m. %Y. %H:%M',        # '25. 10. 2006. 14:30'
-    '%d. %m. %y. %H:%M:%S',     # '25. 10. 06. 14:30:59'
-    '%d. %m. %y. %H:%M:%S.%f',  # '25. 10. 06. 14:30:59.000200'
-    '%d. %m. %y. %H:%M',        # '25. 10. 06. 14:30'
+    "%d.%m.%Y. %H:%M:%S",  # '25.10.2006. 14:30:59'
+    "%d.%m.%Y. %H:%M:%S.%f",  # '25.10.2006. 14:30:59.000200'
+    "%d.%m.%Y. %H:%M",  # '25.10.2006. 14:30'
+    "%d.%m.%y. %H:%M:%S",  # '25.10.06. 14:30:59'
+    "%d.%m.%y. %H:%M:%S.%f",  # '25.10.06. 14:30:59.000200'
+    "%d.%m.%y. %H:%M",  # '25.10.06. 14:30'
+    "%d. %m. %Y. %H:%M:%S",  # '25. 10. 2006. 14:30:59'
+    "%d. %m. %Y. %H:%M:%S.%f",  # '25. 10. 2006. 14:30:59.000200'
+    "%d. %m. %Y. %H:%M",  # '25. 10. 2006. 14:30'
+    "%d. %m. %y. %H:%M:%S",  # '25. 10. 06. 14:30:59'
+    "%d. %m. %y. %H:%M:%S.%f",  # '25. 10. 06. 14:30:59.000200'
+    "%d. %m. %y. %H:%M",  # '25. 10. 06. 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 25 - 25
django/conf/locale/sr_Latn/formats.py

@@ -2,22 +2,22 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j. F Y.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j. F Y. H:i'
-YEAR_MONTH_FORMAT = 'F Y.'
-MONTH_DAY_FORMAT = 'j. F'
-SHORT_DATE_FORMAT = 'j.m.Y.'
-SHORT_DATETIME_FORMAT = 'j.m.Y. H:i'
+DATE_FORMAT = "j. F Y."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j. F Y. H:i"
+YEAR_MONTH_FORMAT = "F Y."
+MONTH_DAY_FORMAT = "j. F"
+SHORT_DATE_FORMAT = "j.m.Y."
+SHORT_DATETIME_FORMAT = "j.m.Y. H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y.',  # '25.10.2006.'
-    '%d.%m.%y.',  # '25.10.06.'
-    '%d. %m. %Y.',  # '25. 10. 2006.'
-    '%d. %m. %y.',  # '25. 10. 06.'
+    "%d.%m.%Y.",  # '25.10.2006.'
+    "%d.%m.%y.",  # '25.10.06.'
+    "%d. %m. %Y.",  # '25. 10. 2006.'
+    "%d. %m. %y.",  # '25. 10. 06.'
     # "%d. %b %y.",  # '25. Oct 06.'
     # "%d. %B %y.",  # '25. October 06.'
     # "%d. %b '%y.",  # '25. Oct '06.'
@@ -26,19 +26,19 @@ DATE_INPUT_FORMATS = [
     # "%d. %B %Y.",  # '25. October 2006.'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y. %H:%M:%S',       # '25.10.2006. 14:30:59'
-    '%d.%m.%Y. %H:%M:%S.%f',    # '25.10.2006. 14:30:59.000200'
-    '%d.%m.%Y. %H:%M',          # '25.10.2006. 14:30'
-    '%d.%m.%y. %H:%M:%S',       # '25.10.06. 14:30:59'
-    '%d.%m.%y. %H:%M:%S.%f',    # '25.10.06. 14:30:59.000200'
-    '%d.%m.%y. %H:%M',          # '25.10.06. 14:30'
-    '%d. %m. %Y. %H:%M:%S',     # '25. 10. 2006. 14:30:59'
-    '%d. %m. %Y. %H:%M:%S.%f',  # '25. 10. 2006. 14:30:59.000200'
-    '%d. %m. %Y. %H:%M',        # '25. 10. 2006. 14:30'
-    '%d. %m. %y. %H:%M:%S',     # '25. 10. 06. 14:30:59'
-    '%d. %m. %y. %H:%M:%S.%f',  # '25. 10. 06. 14:30:59.000200'
-    '%d. %m. %y. %H:%M',        # '25. 10. 06. 14:30'
+    "%d.%m.%Y. %H:%M:%S",  # '25.10.2006. 14:30:59'
+    "%d.%m.%Y. %H:%M:%S.%f",  # '25.10.2006. 14:30:59.000200'
+    "%d.%m.%Y. %H:%M",  # '25.10.2006. 14:30'
+    "%d.%m.%y. %H:%M:%S",  # '25.10.06. 14:30:59'
+    "%d.%m.%y. %H:%M:%S.%f",  # '25.10.06. 14:30:59.000200'
+    "%d.%m.%y. %H:%M",  # '25.10.06. 14:30'
+    "%d. %m. %Y. %H:%M:%S",  # '25. 10. 2006. 14:30:59'
+    "%d. %m. %Y. %H:%M:%S.%f",  # '25. 10. 2006. 14:30:59.000200'
+    "%d. %m. %Y. %H:%M",  # '25. 10. 2006. 14:30'
+    "%d. %m. %y. %H:%M:%S",  # '25. 10. 06. 14:30:59'
+    "%d. %m. %y. %H:%M:%S.%f",  # '25. 10. 06. 14:30:59.000200'
+    "%d. %m. %y. %H:%M",  # '25. 10. 06. 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 21 - 21
django/conf/locale/sv/formats.py

@@ -2,34 +2,34 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'j F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'Y-m-d'
-SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "j F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "Y-m-d"
+SHORT_DATETIME_FORMAT = "Y-m-d H:i"
 FIRST_DAY_OF_WEEK = 1
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 # Kept ISO formats as they are in first position
 DATE_INPUT_FORMATS = [
-    '%Y-%m-%d',              # '2006-10-25'
-    '%m/%d/%Y',              # '10/25/2006'
-    '%m/%d/%y',              # '10/25/06'
+    "%Y-%m-%d",  # '2006-10-25'
+    "%m/%d/%Y",  # '10/25/2006'
+    "%m/%d/%y",  # '10/25/06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%Y-%m-%d %H:%M:%S',     # '2006-10-25 14:30:59'
-    '%Y-%m-%d %H:%M:%S.%f',  # '2006-10-25 14:30:59.000200'
-    '%Y-%m-%d %H:%M',        # '2006-10-25 14:30'
-    '%m/%d/%Y %H:%M:%S',     # '10/25/2006 14:30:59'
-    '%m/%d/%Y %H:%M:%S.%f',  # '10/25/2006 14:30:59.000200'
-    '%m/%d/%Y %H:%M',        # '10/25/2006 14:30'
-    '%m/%d/%y %H:%M:%S',     # '10/25/06 14:30:59'
-    '%m/%d/%y %H:%M:%S.%f',  # '10/25/06 14:30:59.000200'
-    '%m/%d/%y %H:%M',        # '10/25/06 14:30'
+    "%Y-%m-%d %H:%M:%S",  # '2006-10-25 14:30:59'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2006-10-25 14:30:59.000200'
+    "%Y-%m-%d %H:%M",  # '2006-10-25 14:30'
+    "%m/%d/%Y %H:%M:%S",  # '10/25/2006 14:30:59'
+    "%m/%d/%Y %H:%M:%S.%f",  # '10/25/2006 14:30:59.000200'
+    "%m/%d/%Y %H:%M",  # '10/25/2006 14:30'
+    "%m/%d/%y %H:%M:%S",  # '10/25/06 14:30:59'
+    "%m/%d/%y %H:%M:%S.%f",  # '10/25/06 14:30:59.000200'
+    "%m/%d/%y %H:%M",  # '10/25/06 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 4 - 4
django/conf/locale/ta/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F, Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "j F, Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M, Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M, Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 

+ 4 - 4
django/conf/locale/te/formats.py

@@ -2,12 +2,12 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'g:i A'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "g:i A"
 # DATETIME_FORMAT =
 # YEAR_MONTH_FORMAT =
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
 # SHORT_DATETIME_FORMAT =
 # FIRST_DAY_OF_WEEK =
 

+ 19 - 19
django/conf/locale/tg/formats.py

@@ -2,31 +2,31 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y г.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j E Y г. G:i'
-YEAR_MONTH_FORMAT = 'F Y г.'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j E Y г."
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j E Y г. G:i"
+YEAR_MONTH_FORMAT = "F Y г."
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%Y',              # '25.10.2006'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y',              # '25.10.06'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y",  # '25.10.06'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 18 - 18
django/conf/locale/th/formats.py

@@ -2,32 +2,32 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j F Y'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j F Y, G:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'j M Y'
-SHORT_DATETIME_FORMAT = 'j M Y, G:i'
+DATE_FORMAT = "j F Y"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j F Y, G:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "j M Y"
+SHORT_DATETIME_FORMAT = "j M Y, G:i"
 FIRST_DAY_OF_WEEK = 0  # Sunday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # 25/10/2006
-    '%d %b %Y',  # 25 ต.ค. 2006
-    '%d %B %Y',  # 25 ตุลาคม 2006
+    "%d/%m/%Y",  # 25/10/2006
+    "%d %b %Y",  # 25 ต.ค. 2006
+    "%d %B %Y",  # 25 ตุลาคม 2006
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',  # 14:30:59
-    '%H:%M:%S.%f',  # 14:30:59.000200
-    '%H:%M',  # 14:30
+    "%H:%M:%S",  # 14:30:59
+    "%H:%M:%S.%f",  # 14:30:59.000200
+    "%H:%M",  # 14:30
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',  # 25/10/2006 14:30:59
-    '%d/%m/%Y %H:%M:%S.%f',  # 25/10/2006 14:30:59.000200
-    '%d/%m/%Y %H:%M',  # 25/10/2006 14:30
+    "%d/%m/%Y %H:%M:%S",  # 25/10/2006 14:30:59
+    "%d/%m/%Y %H:%M:%S.%f",  # 25/10/2006 14:30:59.000200
+    "%d/%m/%Y %H:%M",  # 25/10/2006 14:30
 ]
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ','
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ","
 NUMBER_GROUPING = 3

+ 19 - 19
django/conf/locale/tk/formats.py

@@ -2,31 +2,31 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'j E Y г.'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = 'j E Y г. G:i'
-YEAR_MONTH_FORMAT = 'F Y г.'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "j E Y г."
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = "j E Y г. G:i"
+YEAR_MONTH_FORMAT = "F Y г."
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d.%m.%y',  # '25.10.06'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y",  # '25.10.06'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d.%m.%Y',              # '25.10.2006'
-    '%d.%m.%y %H:%M:%S',     # '25.10.06 14:30:59'
-    '%d.%m.%y %H:%M:%S.%f',  # '25.10.06 14:30:59.000200'
-    '%d.%m.%y %H:%M',        # '25.10.06 14:30'
-    '%d.%m.%y',              # '25.10.06'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d.%m.%y %H:%M:%S",  # '25.10.06 14:30:59'
+    "%d.%m.%y %H:%M:%S.%f",  # '25.10.06 14:30:59.000200'
+    "%d.%m.%y %H:%M",  # '25.10.06 14:30'
+    "%d.%m.%y",  # '25.10.06'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 15 - 15
django/conf/locale/tr/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd F Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'd F Y H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'd F'
-SHORT_DATE_FORMAT = 'd M Y'
-SHORT_DATETIME_FORMAT = 'd M Y H:i'
+DATE_FORMAT = "d F Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "d F Y H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "d F"
+SHORT_DATE_FORMAT = "d M Y"
+SHORT_DATETIME_FORMAT = "d M Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Pazartesi
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d/%m/%Y',  # '25/10/2006'
-    '%d/%m/%y',  # '25/10/06'
-    '%y-%m-%d',                 # '06-10-25'
+    "%d/%m/%Y",  # '25/10/2006'
+    "%d/%m/%y",  # '25/10/06'
+    "%y-%m-%d",  # '06-10-25'
     # "%d %B %Y",  # '25 Ekim 2006'
     # "%d %b. %Y",  # '25 Eki. 2006'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d/%m/%Y %H:%M:%S',     # '25/10/2006 14:30:59'
-    '%d/%m/%Y %H:%M:%S.%f',  # '25/10/2006 14:30:59.000200'
-    '%d/%m/%Y %H:%M',        # '25/10/2006 14:30'
+    "%d/%m/%Y %H:%M:%S",  # '25/10/2006 14:30:59'
+    "%d/%m/%Y %H:%M:%S.%f",  # '25/10/2006 14:30:59.000200'
+    "%d/%m/%Y %H:%M",  # '25/10/2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 NUMBER_GROUPING = 3

+ 20 - 20
django/conf/locale/uk/formats.py

@@ -2,34 +2,34 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'd E Y р.'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = 'd E Y р. H:i'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'd F'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = "d E Y р."
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = "d E Y р. H:i"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "d F"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',  # '25.10.2006'
-    '%d %B %Y',  # '25 October 2006'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d %B %Y",  # '25 October 2006'
 ]
 TIME_INPUT_FORMATS = [
-    '%H:%M:%S',     # '14:30:59'
-    '%H:%M:%S.%f',  # '14:30:59.000200'
-    '%H:%M',        # '14:30'
+    "%H:%M:%S",  # '14:30:59'
+    "%H:%M:%S.%f",  # '14:30:59.000200'
+    "%H:%M",  # '14:30'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d %B %Y %H:%M:%S',     # '25 October 2006 14:30:59'
-    '%d %B %Y %H:%M:%S.%f',  # '25 October 2006 14:30:59.000200'
-    '%d %B %Y %H:%M',        # '25 October 2006 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d %B %Y %H:%M:%S",  # '25 October 2006 14:30:59'
+    "%d %B %Y %H:%M:%S.%f",  # '25 October 2006 14:30:59.000200'
+    "%d %B %Y %H:%M",  # '25 October 2006 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 17 - 17
django/conf/locale/uz/formats.py

@@ -2,29 +2,29 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'j-E, Y-\y\i\l'
-TIME_FORMAT = 'G:i'
-DATETIME_FORMAT = r'j-E, Y-\y\i\l G:i'
-YEAR_MONTH_FORMAT = r'F Y-\y\i\l'
-MONTH_DAY_FORMAT = 'j-E'
-SHORT_DATE_FORMAT = 'd.m.Y'
-SHORT_DATETIME_FORMAT = 'd.m.Y H:i'
+DATE_FORMAT = r"j-E, Y-\y\i\l"
+TIME_FORMAT = "G:i"
+DATETIME_FORMAT = r"j-E, Y-\y\i\l G:i"
+YEAR_MONTH_FORMAT = r"F Y-\y\i\l"
+MONTH_DAY_FORMAT = "j-E"
+SHORT_DATE_FORMAT = "d.m.Y"
+SHORT_DATETIME_FORMAT = "d.m.Y H:i"
 FIRST_DAY_OF_WEEK = 1  # Monday
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%d.%m.%Y',       # '25.10.2006'
-    '%d-%B, %Y-yil',  # '25-Oktabr, 2006-yil'
+    "%d.%m.%Y",  # '25.10.2006'
+    "%d-%B, %Y-yil",  # '25-Oktabr, 2006-yil'
 ]
 DATETIME_INPUT_FORMATS = [
-    '%d.%m.%Y %H:%M:%S',     # '25.10.2006 14:30:59'
-    '%d.%m.%Y %H:%M:%S.%f',  # '25.10.2006 14:30:59.000200'
-    '%d.%m.%Y %H:%M',        # '25.10.2006 14:30'
-    '%d-%B, %Y-yil %H:%M:%S',     # '25-Oktabr, 2006-yil 14:30:59'
-    '%d-%B, %Y-yil %H:%M:%S.%f',  # '25-Oktabr, 2006-yil 14:30:59.000200'
-    '%d-%B, %Y-yil %H:%M',        # '25-Oktabr, 2006-yil 14:30'
+    "%d.%m.%Y %H:%M:%S",  # '25.10.2006 14:30:59'
+    "%d.%m.%Y %H:%M:%S.%f",  # '25.10.2006 14:30:59.000200'
+    "%d.%m.%Y %H:%M",  # '25.10.2006 14:30'
+    "%d-%B, %Y-yil %H:%M:%S",  # '25-Oktabr, 2006-yil 14:30:59'
+    "%d-%B, %Y-yil %H:%M:%S.%f",  # '25-Oktabr, 2006-yil 14:30:59.000200'
+    "%d-%B, %Y-yil %H:%M",  # '25-Oktabr, 2006-yil 14:30'
 ]
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '\xa0'  # non-breaking space
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "\xa0"  # non-breaking space
 NUMBER_GROUPING = 3

+ 9 - 9
django/conf/locale/vi/formats.py

@@ -2,13 +2,13 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = r'\N\gà\y d \t\há\n\g n \nă\m Y'
-TIME_FORMAT = 'H:i'
-DATETIME_FORMAT = r'H:i \N\gà\y d \t\há\n\g n \nă\m Y'
-YEAR_MONTH_FORMAT = 'F Y'
-MONTH_DAY_FORMAT = 'j F'
-SHORT_DATE_FORMAT = 'd-m-Y'
-SHORT_DATETIME_FORMAT = 'H:i d-m-Y'
+DATE_FORMAT = r"\N\gà\y d \t\há\n\g n \nă\m Y"
+TIME_FORMAT = "H:i"
+DATETIME_FORMAT = r"H:i \N\gà\y d \t\há\n\g n \nă\m Y"
+YEAR_MONTH_FORMAT = "F Y"
+MONTH_DAY_FORMAT = "j F"
+SHORT_DATE_FORMAT = "d-m-Y"
+SHORT_DATETIME_FORMAT = "H:i d-m-Y"
 # FIRST_DAY_OF_WEEK =
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
@@ -16,6 +16,6 @@ SHORT_DATETIME_FORMAT = 'H:i d-m-Y'
 # DATE_INPUT_FORMATS =
 # TIME_INPUT_FORMATS =
 # DATETIME_INPUT_FORMATS =
-DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
+DECIMAL_SEPARATOR = ","
+THOUSAND_SEPARATOR = "."
 # NUMBER_GROUPING =

+ 25 - 25
django/conf/locale/zh_Hans/formats.py

@@ -2,41 +2,41 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'Y年n月j日'                # 2016年9月5日
-TIME_FORMAT = 'H:i'                     # 20:45
-DATETIME_FORMAT = 'Y年n月j日 H:i'        # 2016年9月5日 20:45
-YEAR_MONTH_FORMAT = 'Y年n月'             # 2016年9月
-MONTH_DAY_FORMAT = 'm月j日'              # 9月5日
-SHORT_DATE_FORMAT = 'Y年n月j日'          # 2016年9月5日
-SHORT_DATETIME_FORMAT = 'Y年n月j日 H:i'  # 2016年9月5日 20:45
-FIRST_DAY_OF_WEEK = 1                   # 星期一 (Monday)
+DATE_FORMAT = "Y年n月j日"  # 2016年9月5日
+TIME_FORMAT = "H:i"  # 20:45
+DATETIME_FORMAT = "Y年n月j日 H:i"  # 2016年9月5日 20:45
+YEAR_MONTH_FORMAT = "Y年n月"  # 2016年9月
+MONTH_DAY_FORMAT = "m月j日"  # 9月5日
+SHORT_DATE_FORMAT = "Y年n月j日"  # 2016年9月5日
+SHORT_DATETIME_FORMAT = "Y年n月j日 H:i"  # 2016年9月5日 20:45
+FIRST_DAY_OF_WEEK = 1  # 星期一 (Monday)
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y/%m/%d',     # '2016/09/05'
-    '%Y-%m-%d',     # '2016-09-05'
-    '%Y年%n月%j日',  # '2016年9月5日'
+    "%Y/%m/%d",  # '2016/09/05'
+    "%Y-%m-%d",  # '2016-09-05'
+    "%Y年%n月%j日",  # '2016年9月5日'
 ]
 
 TIME_INPUT_FORMATS = [
-    '%H:%M',        # '20:45'
-    '%H:%M:%S',     # '20:45:29'
-    '%H:%M:%S.%f',  # '20:45:29.000200'
+    "%H:%M",  # '20:45'
+    "%H:%M:%S",  # '20:45:29'
+    "%H:%M:%S.%f",  # '20:45:29.000200'
 ]
 
 DATETIME_INPUT_FORMATS = [
-    '%Y/%m/%d %H:%M',           # '2016/09/05 20:45'
-    '%Y-%m-%d %H:%M',           # '2016-09-05 20:45'
-    '%Y年%n月%j日 %H:%M',        # '2016年9月5日 14:45'
-    '%Y/%m/%d %H:%M:%S',        # '2016/09/05 20:45:29'
-    '%Y-%m-%d %H:%M:%S',        # '2016-09-05 20:45:29'
-    '%Y年%n月%j日 %H:%M:%S',     # '2016年9月5日 20:45:29'
-    '%Y/%m/%d %H:%M:%S.%f',     # '2016/09/05 20:45:29.000200'
-    '%Y-%m-%d %H:%M:%S.%f',     # '2016-09-05 20:45:29.000200'
-    '%Y年%n月%j日 %H:%n:%S.%f',  # '2016年9月5日 20:45:29.000200'
+    "%Y/%m/%d %H:%M",  # '2016/09/05 20:45'
+    "%Y-%m-%d %H:%M",  # '2016-09-05 20:45'
+    "%Y年%n月%j日 %H:%M",  # '2016年9月5日 14:45'
+    "%Y/%m/%d %H:%M:%S",  # '2016/09/05 20:45:29'
+    "%Y-%m-%d %H:%M:%S",  # '2016-09-05 20:45:29'
+    "%Y年%n月%j日 %H:%M:%S",  # '2016年9月5日 20:45:29'
+    "%Y/%m/%d %H:%M:%S.%f",  # '2016/09/05 20:45:29.000200'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2016-09-05 20:45:29.000200'
+    "%Y年%n月%j日 %H:%n:%S.%f",  # '2016年9月5日 20:45:29.000200'
 ]
 
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ''
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ""
 NUMBER_GROUPING = 4

+ 25 - 25
django/conf/locale/zh_Hant/formats.py

@@ -2,41 +2,41 @@
 #
 # The *_FORMAT strings use the Django date format syntax,
 # see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
-DATE_FORMAT = 'Y年n月j日'                # 2016年9月5日
-TIME_FORMAT = 'H:i'                     # 20:45
-DATETIME_FORMAT = 'Y年n月j日 H:i'        # 2016年9月5日 20:45
-YEAR_MONTH_FORMAT = 'Y年n月'             # 2016年9月
-MONTH_DAY_FORMAT = 'm月j日'              # 9月5日
-SHORT_DATE_FORMAT = 'Y年n月j日'          # 2016年9月5日
-SHORT_DATETIME_FORMAT = 'Y年n月j日 H:i'  # 2016年9月5日 20:45
-FIRST_DAY_OF_WEEK = 1                   # 星期一 (Monday)
+DATE_FORMAT = "Y年n月j日"  # 2016年9月5日
+TIME_FORMAT = "H:i"  # 20:45
+DATETIME_FORMAT = "Y年n月j日 H:i"  # 2016年9月5日 20:45
+YEAR_MONTH_FORMAT = "Y年n月"  # 2016年9月
+MONTH_DAY_FORMAT = "m月j日"  # 9月5日
+SHORT_DATE_FORMAT = "Y年n月j日"  # 2016年9月5日
+SHORT_DATETIME_FORMAT = "Y年n月j日 H:i"  # 2016年9月5日 20:45
+FIRST_DAY_OF_WEEK = 1  # 星期一 (Monday)
 
 # The *_INPUT_FORMATS strings use the Python strftime format syntax,
 # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior
 DATE_INPUT_FORMATS = [
-    '%Y/%m/%d',     # '2016/09/05'
-    '%Y-%m-%d',     # '2016-09-05'
-    '%Y年%n月%j日',  # '2016年9月5日'
+    "%Y/%m/%d",  # '2016/09/05'
+    "%Y-%m-%d",  # '2016-09-05'
+    "%Y年%n月%j日",  # '2016年9月5日'
 ]
 
 TIME_INPUT_FORMATS = [
-    '%H:%M',        # '20:45'
-    '%H:%M:%S',     # '20:45:29'
-    '%H:%M:%S.%f',  # '20:45:29.000200'
+    "%H:%M",  # '20:45'
+    "%H:%M:%S",  # '20:45:29'
+    "%H:%M:%S.%f",  # '20:45:29.000200'
 ]
 
 DATETIME_INPUT_FORMATS = [
-    '%Y/%m/%d %H:%M',           # '2016/09/05 20:45'
-    '%Y-%m-%d %H:%M',           # '2016-09-05 20:45'
-    '%Y年%n月%j日 %H:%M',        # '2016年9月5日 14:45'
-    '%Y/%m/%d %H:%M:%S',        # '2016/09/05 20:45:29'
-    '%Y-%m-%d %H:%M:%S',        # '2016-09-05 20:45:29'
-    '%Y年%n月%j日 %H:%M:%S',     # '2016年9月5日 20:45:29'
-    '%Y/%m/%d %H:%M:%S.%f',     # '2016/09/05 20:45:29.000200'
-    '%Y-%m-%d %H:%M:%S.%f',     # '2016-09-05 20:45:29.000200'
-    '%Y年%n月%j日 %H:%n:%S.%f',  # '2016年9月5日 20:45:29.000200'
+    "%Y/%m/%d %H:%M",  # '2016/09/05 20:45'
+    "%Y-%m-%d %H:%M",  # '2016-09-05 20:45'
+    "%Y年%n月%j日 %H:%M",  # '2016年9月5日 14:45'
+    "%Y/%m/%d %H:%M:%S",  # '2016/09/05 20:45:29'
+    "%Y-%m-%d %H:%M:%S",  # '2016-09-05 20:45:29'
+    "%Y年%n月%j日 %H:%M:%S",  # '2016年9月5日 20:45:29'
+    "%Y/%m/%d %H:%M:%S.%f",  # '2016/09/05 20:45:29.000200'
+    "%Y-%m-%d %H:%M:%S.%f",  # '2016-09-05 20:45:29.000200'
+    "%Y年%n月%j日 %H:%n:%S.%f",  # '2016年9月5日 20:45:29.000200'
 ]
 
-DECIMAL_SEPARATOR = '.'
-THOUSAND_SEPARATOR = ''
+DECIMAL_SEPARATOR = "."
+THOUSAND_SEPARATOR = ""
 NUMBER_GROUPING = 4

+ 1 - 1
django/conf/urls/__init__.py

@@ -1,7 +1,7 @@
 from django.urls import include
 from django.views import defaults
 
-__all__ = ['handler400', 'handler403', 'handler404', 'handler500', 'include']
+__all__ = ["handler400", "handler403", "handler404", "handler500", "include"]
 
 handler400 = defaults.bad_request
 handler403 = defaults.permission_denied

+ 1 - 1
django/conf/urls/i18n.py

@@ -35,5 +35,5 @@ def is_language_prefix_patterns_used(urlconf):
 
 
 urlpatterns = [
-    path('setlang/', set_language, name='set_language'),
+    path("setlang/", set_language, name="set_language"),
 ]

+ 3 - 1
django/conf/urls/static.py

@@ -24,5 +24,7 @@ def static(prefix, view=serve, **kwargs):
         # No-op if not in debug mode or a non-local prefix.
         return []
     return [
-        re_path(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
+        re_path(
+            r"^%s(?P<path>.*)$" % re.escape(prefix.lstrip("/")), view, kwargs=kwargs
+        ),
     ]

+ 37 - 11
django/contrib/admin/__init__.py

@@ -1,24 +1,50 @@
 from django.contrib.admin.decorators import action, display, register
 from django.contrib.admin.filters import (
-    AllValuesFieldListFilter, BooleanFieldListFilter, ChoicesFieldListFilter,
-    DateFieldListFilter, EmptyFieldListFilter, FieldListFilter, ListFilter,
-    RelatedFieldListFilter, RelatedOnlyFieldListFilter, SimpleListFilter,
+    AllValuesFieldListFilter,
+    BooleanFieldListFilter,
+    ChoicesFieldListFilter,
+    DateFieldListFilter,
+    EmptyFieldListFilter,
+    FieldListFilter,
+    ListFilter,
+    RelatedFieldListFilter,
+    RelatedOnlyFieldListFilter,
+    SimpleListFilter,
 )
 from django.contrib.admin.options import (
-    HORIZONTAL, VERTICAL, ModelAdmin, StackedInline, TabularInline,
+    HORIZONTAL,
+    VERTICAL,
+    ModelAdmin,
+    StackedInline,
+    TabularInline,
 )
 from django.contrib.admin.sites import AdminSite, site
 from django.utils.module_loading import autodiscover_modules
 
 __all__ = [
-    "action", "display", "register", "ModelAdmin", "HORIZONTAL", "VERTICAL",
-    "StackedInline", "TabularInline", "AdminSite", "site", "ListFilter",
-    "SimpleListFilter", "FieldListFilter", "BooleanFieldListFilter",
-    "RelatedFieldListFilter", "ChoicesFieldListFilter", "DateFieldListFilter",
-    "AllValuesFieldListFilter", "EmptyFieldListFilter",
-    "RelatedOnlyFieldListFilter", "autodiscover",
+    "action",
+    "display",
+    "register",
+    "ModelAdmin",
+    "HORIZONTAL",
+    "VERTICAL",
+    "StackedInline",
+    "TabularInline",
+    "AdminSite",
+    "site",
+    "ListFilter",
+    "SimpleListFilter",
+    "FieldListFilter",
+    "BooleanFieldListFilter",
+    "RelatedFieldListFilter",
+    "ChoicesFieldListFilter",
+    "DateFieldListFilter",
+    "AllValuesFieldListFilter",
+    "EmptyFieldListFilter",
+    "RelatedOnlyFieldListFilter",
+    "autodiscover",
 ]
 
 
 def autodiscover():
-    autodiscover_modules('admin', register_to=site)
+    autodiscover_modules("admin", register_to=site)

+ 39 - 24
django/contrib/admin/actions.py

@@ -8,12 +8,13 @@ from django.contrib.admin.decorators import action
 from django.contrib.admin.utils import model_ngettext
 from django.core.exceptions import PermissionDenied
 from django.template.response import TemplateResponse
-from django.utils.translation import gettext as _, gettext_lazy
+from django.utils.translation import gettext as _
+from django.utils.translation import gettext_lazy
 
 
 @action(
-    permissions=['delete'],
-    description=gettext_lazy('Delete selected %(verbose_name_plural)s'),
+    permissions=["delete"],
+    description=gettext_lazy("Delete selected %(verbose_name_plural)s"),
 )
 def delete_selected(modeladmin, request, queryset):
     """
@@ -30,11 +31,16 @@ def delete_selected(modeladmin, request, queryset):
 
     # Populate deletable_objects, a data structure of all related objects that
     # will also be deleted.
-    deletable_objects, model_count, perms_needed, protected = modeladmin.get_deleted_objects(queryset, request)
+    (
+        deletable_objects,
+        model_count,
+        perms_needed,
+        protected,
+    ) = modeladmin.get_deleted_objects(queryset, request)
 
     # The user has already confirmed the deletion.
     # Do the deletion and return None to display the change list view again.
-    if request.POST.get('post') and not protected:
+    if request.POST.get("post") and not protected:
         if perms_needed:
             raise PermissionDenied
         n = queryset.count()
@@ -43,9 +49,12 @@ def delete_selected(modeladmin, request, queryset):
                 obj_display = str(obj)
                 modeladmin.log_deletion(request, obj, obj_display)
             modeladmin.delete_queryset(request, queryset)
-            modeladmin.message_user(request, _("Successfully deleted %(count)d %(items)s.") % {
-                "count": n, "items": model_ngettext(modeladmin.opts, n)
-            }, messages.SUCCESS)
+            modeladmin.message_user(
+                request,
+                _("Successfully deleted %(count)d %(items)s.")
+                % {"count": n, "items": model_ngettext(modeladmin.opts, n)},
+                messages.SUCCESS,
+            )
         # Return None to display the change list page again.
         return None
 
@@ -58,24 +67,30 @@ def delete_selected(modeladmin, request, queryset):
 
     context = {
         **modeladmin.admin_site.each_context(request),
-        'title': title,
-        'subtitle': None,
-        'objects_name': str(objects_name),
-        'deletable_objects': [deletable_objects],
-        'model_count': dict(model_count).items(),
-        'queryset': queryset,
-        'perms_lacking': perms_needed,
-        'protected': protected,
-        'opts': opts,
-        'action_checkbox_name': helpers.ACTION_CHECKBOX_NAME,
-        'media': modeladmin.media,
+        "title": title,
+        "subtitle": None,
+        "objects_name": str(objects_name),
+        "deletable_objects": [deletable_objects],
+        "model_count": dict(model_count).items(),
+        "queryset": queryset,
+        "perms_lacking": perms_needed,
+        "protected": protected,
+        "opts": opts,
+        "action_checkbox_name": helpers.ACTION_CHECKBOX_NAME,
+        "media": modeladmin.media,
     }
 
     request.current_app = modeladmin.admin_site.name
 
     # Display the confirmation page
-    return TemplateResponse(request, modeladmin.delete_selected_confirmation_template or [
-        "admin/%s/%s/delete_selected_confirmation.html" % (app_label, opts.model_name),
-        "admin/%s/delete_selected_confirmation.html" % app_label,
-        "admin/delete_selected_confirmation.html"
-    ], context)
+    return TemplateResponse(
+        request,
+        modeladmin.delete_selected_confirmation_template
+        or [
+            "admin/%s/%s/delete_selected_confirmation.html"
+            % (app_label, opts.model_name),
+            "admin/%s/delete_selected_confirmation.html" % app_label,
+            "admin/delete_selected_confirmation.html",
+        ],
+        context,
+    )

+ 3 - 3
django/contrib/admin/apps.py

@@ -7,9 +7,9 @@ from django.utils.translation import gettext_lazy as _
 class SimpleAdminConfig(AppConfig):
     """Simple AppConfig which does not do automatic discovery."""
 
-    default_auto_field = 'django.db.models.AutoField'
-    default_site = 'django.contrib.admin.sites.AdminSite'
-    name = 'django.contrib.admin'
+    default_auto_field = "django.db.models.AutoField"
+    default_site = "django.contrib.admin.sites.AdminSite"
+    name = "django.contrib.admin"
     verbose_name = _("Administration")
 
     def ready(self):

File diff suppressed because it is too large
+ 381 - 237
django/contrib/admin/checks.py


+ 15 - 7
django/contrib/admin/decorators.py

@@ -17,19 +17,23 @@ def action(function=None, *, permissions=None, description=None):
         make_published.allowed_permissions = ['publish']
         make_published.short_description = 'Mark selected stories as published'
     """
+
     def decorator(func):
         if permissions is not None:
             func.allowed_permissions = permissions
         if description is not None:
             func.short_description = description
         return func
+
     if function is None:
         return decorator
     else:
         return decorator(function)
 
 
-def display(function=None, *, boolean=None, ordering=None, description=None, empty_value=None):
+def display(
+    function=None, *, boolean=None, ordering=None, description=None, empty_value=None
+):
     """
     Conveniently add attributes to a display function::
 
@@ -50,11 +54,12 @@ def display(function=None, *, boolean=None, ordering=None, description=None, emp
         is_published.admin_order_field = '-publish_date'
         is_published.short_description = 'Is Published?'
     """
+
     def decorator(func):
         if boolean is not None and empty_value is not None:
             raise ValueError(
-                'The boolean and empty_value arguments to the @display '
-                'decorator are mutually exclusive.'
+                "The boolean and empty_value arguments to the @display "
+                "decorator are mutually exclusive."
             )
         if boolean is not None:
             func.boolean = boolean
@@ -65,6 +70,7 @@ def display(function=None, *, boolean=None, ordering=None, description=None, emp
         if empty_value is not None:
             func.empty_value_display = empty_value
         return func
+
     if function is None:
         return decorator
     else:
@@ -83,21 +89,23 @@ def register(*models, site=None):
     The `site` kwarg is an admin site to use instead of the default admin site.
     """
     from django.contrib.admin import ModelAdmin
-    from django.contrib.admin.sites import AdminSite, site as default_site
+    from django.contrib.admin.sites import AdminSite
+    from django.contrib.admin.sites import site as default_site
 
     def _model_admin_wrapper(admin_class):
         if not models:
-            raise ValueError('At least one model must be passed to register.')
+            raise ValueError("At least one model must be passed to register.")
 
         admin_site = site or default_site
 
         if not isinstance(admin_site, AdminSite):
-            raise ValueError('site must subclass AdminSite')
+            raise ValueError("site must subclass AdminSite")
 
         if not issubclass(admin_class, ModelAdmin):
-            raise ValueError('Wrapped class must subclass ModelAdmin.')
+            raise ValueError("Wrapped class must subclass ModelAdmin.")
 
         admin_site.register(models, admin_class=admin_class)
 
         return admin_class
+
     return _model_admin_wrapper

+ 2 - 0
django/contrib/admin/exceptions.py

@@ -3,9 +3,11 @@ from django.core.exceptions import SuspiciousOperation
 
 class DisallowedModelAdminLookup(SuspiciousOperation):
     """Invalid filter was passed to admin view via URL querystring"""
+
     pass
 
 
 class DisallowedModelAdminToField(SuspiciousOperation):
     """Invalid to_field was passed to admin view via URL query string"""
+
     pass

+ 185 - 113
django/contrib/admin/filters.py

@@ -9,7 +9,9 @@ import datetime
 
 from django.contrib.admin.options import IncorrectLookupParameters
 from django.contrib.admin.utils import (
-    get_model_from_relation, prepare_lookup_value, reverse_field_path,
+    get_model_from_relation,
+    prepare_lookup_value,
+    reverse_field_path,
 )
 from django.core.exceptions import ImproperlyConfigured, ValidationError
 from django.db import models
@@ -19,7 +21,7 @@ from django.utils.translation import gettext_lazy as _
 
 class ListFilter:
     title = None  # Human-readable title to appear in the right sidebar.
-    template = 'admin/filter.html'
+    template = "admin/filter.html"
 
     def __init__(self, request, params, model, model_admin):
         # This dictionary will eventually contain the request's query string
@@ -35,7 +37,9 @@ class ListFilter:
         """
         Return True if some choices would be output for this filter.
         """
-        raise NotImplementedError('subclasses of ListFilter must provide a has_output() method')
+        raise NotImplementedError(
+            "subclasses of ListFilter must provide a has_output() method"
+        )
 
     def choices(self, changelist):
         """
@@ -43,20 +47,26 @@ class ListFilter:
 
         `changelist` is the ChangeList to be displayed.
         """
-        raise NotImplementedError('subclasses of ListFilter must provide a choices() method')
+        raise NotImplementedError(
+            "subclasses of ListFilter must provide a choices() method"
+        )
 
     def queryset(self, request, queryset):
         """
         Return the filtered queryset.
         """
-        raise NotImplementedError('subclasses of ListFilter must provide a queryset() method')
+        raise NotImplementedError(
+            "subclasses of ListFilter must provide a queryset() method"
+        )
 
     def expected_parameters(self):
         """
         Return the list of parameter names that are expected from the
         request's query string and that will be used by this filter.
         """
-        raise NotImplementedError('subclasses of ListFilter must provide an expected_parameters() method')
+        raise NotImplementedError(
+            "subclasses of ListFilter must provide an expected_parameters() method"
+        )
 
 
 class SimpleListFilter(ListFilter):
@@ -94,8 +104,8 @@ class SimpleListFilter(ListFilter):
         Must be overridden to return a list of tuples (value, verbose value)
         """
         raise NotImplementedError(
-            'The SimpleListFilter.lookups() method must be overridden to '
-            'return a list of tuples (value, verbose value).'
+            "The SimpleListFilter.lookups() method must be overridden to "
+            "return a list of tuples (value, verbose value)."
         )
 
     def expected_parameters(self):
@@ -103,32 +113,36 @@ class SimpleListFilter(ListFilter):
 
     def choices(self, changelist):
         yield {
-            'selected': self.value() is None,
-            'query_string': changelist.get_query_string(remove=[self.parameter_name]),
-            'display': _('All'),
+            "selected": self.value() is None,
+            "query_string": changelist.get_query_string(remove=[self.parameter_name]),
+            "display": _("All"),
         }
         for lookup, title in self.lookup_choices:
             yield {
-                'selected': self.value() == str(lookup),
-                'query_string': changelist.get_query_string({self.parameter_name: lookup}),
-                'display': title,
+                "selected": self.value() == str(lookup),
+                "query_string": changelist.get_query_string(
+                    {self.parameter_name: lookup}
+                ),
+                "display": title,
             }
 
 
 class FieldListFilter(ListFilter):
     _field_list_filters = []
     _take_priority_index = 0
-    list_separator = ','
+    list_separator = ","
 
     def __init__(self, field, request, params, model, model_admin, field_path):
         self.field = field
         self.field_path = field_path
-        self.title = getattr(field, 'verbose_name', field_path)
+        self.title = getattr(field, "verbose_name", field_path)
         super().__init__(request, params, model, model_admin)
         for p in self.expected_parameters():
             if p in params:
                 value = params.pop(p)
-                self.used_parameters[p] = prepare_lookup_value(p, value, self.list_separator)
+                self.used_parameters[p] = prepare_lookup_value(
+                    p, value, self.list_separator
+                )
 
     def has_output(self):
         return True
@@ -148,7 +162,8 @@ class FieldListFilter(ListFilter):
             # of fields with some custom filters. The first found in the list
             # is used in priority.
             cls._field_list_filters.insert(
-                cls._take_priority_index, (test, list_filter_class))
+                cls._take_priority_index, (test, list_filter_class)
+            )
             cls._take_priority_index += 1
         else:
             cls._field_list_filters.append((test, list_filter_class))
@@ -157,19 +172,21 @@ class FieldListFilter(ListFilter):
     def create(cls, field, request, params, model, model_admin, field_path):
         for test, list_filter_class in cls._field_list_filters:
             if test(field):
-                return list_filter_class(field, request, params, model, model_admin, field_path=field_path)
+                return list_filter_class(
+                    field, request, params, model, model_admin, field_path=field_path
+                )
 
 
 class RelatedFieldListFilter(FieldListFilter):
     def __init__(self, field, request, params, model, model_admin, field_path):
         other_model = get_model_from_relation(field)
-        self.lookup_kwarg = '%s__%s__exact' % (field_path, field.target_field.name)
-        self.lookup_kwarg_isnull = '%s__isnull' % field_path
+        self.lookup_kwarg = "%s__%s__exact" % (field_path, field.target_field.name)
+        self.lookup_kwarg_isnull = "%s__isnull" % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
         self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull)
         super().__init__(field, request, params, model, model_admin, field_path)
         self.lookup_choices = self.field_choices(field, request, model_admin)
-        if hasattr(field, 'verbose_name'):
+        if hasattr(field, "verbose_name"):
             self.lookup_title = field.verbose_name
         else:
             self.lookup_title = other_model._meta.verbose_name
@@ -209,21 +226,27 @@ class RelatedFieldListFilter(FieldListFilter):
 
     def choices(self, changelist):
         yield {
-            'selected': self.lookup_val is None and not self.lookup_val_isnull,
-            'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]),
-            'display': _('All'),
+            "selected": self.lookup_val is None and not self.lookup_val_isnull,
+            "query_string": changelist.get_query_string(
+                remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]
+            ),
+            "display": _("All"),
         }
         for pk_val, val in self.lookup_choices:
             yield {
-                'selected': self.lookup_val == str(pk_val),
-                'query_string': changelist.get_query_string({self.lookup_kwarg: pk_val}, [self.lookup_kwarg_isnull]),
-                'display': val,
+                "selected": self.lookup_val == str(pk_val),
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg: pk_val}, [self.lookup_kwarg_isnull]
+                ),
+                "display": val,
             }
         if self.include_empty_choice:
             yield {
-                'selected': bool(self.lookup_val_isnull),
-                'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]),
-                'display': self.empty_value_display,
+                "selected": bool(self.lookup_val_isnull),
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg]
+                ),
+                "display": self.empty_value_display,
             }
 
 
@@ -232,14 +255,19 @@ FieldListFilter.register(lambda f: f.remote_field, RelatedFieldListFilter)
 
 class BooleanFieldListFilter(FieldListFilter):
     def __init__(self, field, request, params, model, model_admin, field_path):
-        self.lookup_kwarg = '%s__exact' % field_path
-        self.lookup_kwarg2 = '%s__isnull' % field_path
+        self.lookup_kwarg = "%s__exact" % field_path
+        self.lookup_kwarg2 = "%s__isnull" % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
         self.lookup_val2 = params.get(self.lookup_kwarg2)
         super().__init__(field, request, params, model, model_admin, field_path)
-        if (self.used_parameters and self.lookup_kwarg in self.used_parameters and
-                self.used_parameters[self.lookup_kwarg] in ('1', '0')):
-            self.used_parameters[self.lookup_kwarg] = bool(int(self.used_parameters[self.lookup_kwarg]))
+        if (
+            self.used_parameters
+            and self.lookup_kwarg in self.used_parameters
+            and self.used_parameters[self.lookup_kwarg] in ("1", "0")
+        ):
+            self.used_parameters[self.lookup_kwarg] = bool(
+                int(self.used_parameters[self.lookup_kwarg])
+            )
 
     def expected_parameters(self):
         return [self.lookup_kwarg, self.lookup_kwarg2]
@@ -247,30 +275,36 @@ class BooleanFieldListFilter(FieldListFilter):
     def choices(self, changelist):
         field_choices = dict(self.field.flatchoices)
         for lookup, title in (
-            (None, _('All')),
-            ('1', field_choices.get(True, _('Yes'))),
-            ('0', field_choices.get(False, _('No'))),
+            (None, _("All")),
+            ("1", field_choices.get(True, _("Yes"))),
+            ("0", field_choices.get(False, _("No"))),
         ):
             yield {
-                'selected': self.lookup_val == lookup and not self.lookup_val2,
-                'query_string': changelist.get_query_string({self.lookup_kwarg: lookup}, [self.lookup_kwarg2]),
-                'display': title,
+                "selected": self.lookup_val == lookup and not self.lookup_val2,
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg: lookup}, [self.lookup_kwarg2]
+                ),
+                "display": title,
             }
         if self.field.null:
             yield {
-                'selected': self.lookup_val2 == 'True',
-                'query_string': changelist.get_query_string({self.lookup_kwarg2: 'True'}, [self.lookup_kwarg]),
-                'display': field_choices.get(None, _('Unknown')),
+                "selected": self.lookup_val2 == "True",
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg2: "True"}, [self.lookup_kwarg]
+                ),
+                "display": field_choices.get(None, _("Unknown")),
             }
 
 
-FieldListFilter.register(lambda f: isinstance(f, models.BooleanField), BooleanFieldListFilter)
+FieldListFilter.register(
+    lambda f: isinstance(f, models.BooleanField), BooleanFieldListFilter
+)
 
 
 class ChoicesFieldListFilter(FieldListFilter):
     def __init__(self, field, request, params, model, model_admin, field_path):
-        self.lookup_kwarg = '%s__exact' % field_path
-        self.lookup_kwarg_isnull = '%s__isnull' % field_path
+        self.lookup_kwarg = "%s__exact" % field_path
+        self.lookup_kwarg_isnull = "%s__isnull" % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
         self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull)
         super().__init__(field, request, params, model, model_admin, field_path)
@@ -280,25 +314,31 @@ class ChoicesFieldListFilter(FieldListFilter):
 
     def choices(self, changelist):
         yield {
-            'selected': self.lookup_val is None,
-            'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]),
-            'display': _('All')
+            "selected": self.lookup_val is None,
+            "query_string": changelist.get_query_string(
+                remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]
+            ),
+            "display": _("All"),
         }
-        none_title = ''
+        none_title = ""
         for lookup, title in self.field.flatchoices:
             if lookup is None:
                 none_title = title
                 continue
             yield {
-                'selected': str(lookup) == self.lookup_val,
-                'query_string': changelist.get_query_string({self.lookup_kwarg: lookup}, [self.lookup_kwarg_isnull]),
-                'display': title,
+                "selected": str(lookup) == self.lookup_val,
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg: lookup}, [self.lookup_kwarg_isnull]
+                ),
+                "display": title,
             }
         if none_title:
             yield {
-                'selected': bool(self.lookup_val_isnull),
-                'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]),
-                'display': none_title,
+                "selected": bool(self.lookup_val_isnull),
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg]
+                ),
+                "display": none_title,
             }
 
 
@@ -307,8 +347,10 @@ FieldListFilter.register(lambda f: bool(f.choices), ChoicesFieldListFilter)
 
 class DateFieldListFilter(FieldListFilter):
     def __init__(self, field, request, params, model, model_admin, field_path):
-        self.field_generic = '%s__' % field_path
-        self.date_params = {k: v for k, v in params.items() if k.startswith(self.field_generic)}
+        self.field_generic = "%s__" % field_path
+        self.date_params = {
+            k: v for k, v in params.items() if k.startswith(self.field_generic)
+        }
 
         now = timezone.now()
         # When time zone support is enabled, convert "now" to the user's time
@@ -318,7 +360,7 @@ class DateFieldListFilter(FieldListFilter):
 
         if isinstance(field, models.DateTimeField):
             today = now.replace(hour=0, minute=0, second=0, microsecond=0)
-        else:       # field is a models.DateField
+        else:  # field is a models.DateField
             today = now.date()
         tomorrow = today + datetime.timedelta(days=1)
         if today.month == 12:
@@ -327,32 +369,44 @@ class DateFieldListFilter(FieldListFilter):
             next_month = today.replace(month=today.month + 1, day=1)
         next_year = today.replace(year=today.year + 1, month=1, day=1)
 
-        self.lookup_kwarg_since = '%s__gte' % field_path
-        self.lookup_kwarg_until = '%s__lt' % field_path
+        self.lookup_kwarg_since = "%s__gte" % field_path
+        self.lookup_kwarg_until = "%s__lt" % field_path
         self.links = (
-            (_('Any date'), {}),
-            (_('Today'), {
-                self.lookup_kwarg_since: str(today),
-                self.lookup_kwarg_until: str(tomorrow),
-            }),
-            (_('Past 7 days'), {
-                self.lookup_kwarg_since: str(today - datetime.timedelta(days=7)),
-                self.lookup_kwarg_until: str(tomorrow),
-            }),
-            (_('This month'), {
-                self.lookup_kwarg_since: str(today.replace(day=1)),
-                self.lookup_kwarg_until: str(next_month),
-            }),
-            (_('This year'), {
-                self.lookup_kwarg_since: str(today.replace(month=1, day=1)),
-                self.lookup_kwarg_until: str(next_year),
-            }),
+            (_("Any date"), {}),
+            (
+                _("Today"),
+                {
+                    self.lookup_kwarg_since: str(today),
+                    self.lookup_kwarg_until: str(tomorrow),
+                },
+            ),
+            (
+                _("Past 7 days"),
+                {
+                    self.lookup_kwarg_since: str(today - datetime.timedelta(days=7)),
+                    self.lookup_kwarg_until: str(tomorrow),
+                },
+            ),
+            (
+                _("This month"),
+                {
+                    self.lookup_kwarg_since: str(today.replace(day=1)),
+                    self.lookup_kwarg_until: str(next_month),
+                },
+            ),
+            (
+                _("This year"),
+                {
+                    self.lookup_kwarg_since: str(today.replace(month=1, day=1)),
+                    self.lookup_kwarg_until: str(next_year),
+                },
+            ),
         )
         if field.null:
-            self.lookup_kwarg_isnull = '%s__isnull' % field_path
+            self.lookup_kwarg_isnull = "%s__isnull" % field_path
             self.links += (
-                (_('No date'), {self.field_generic + 'isnull': 'True'}),
-                (_('Has date'), {self.field_generic + 'isnull': 'False'}),
+                (_("No date"), {self.field_generic + "isnull": "True"}),
+                (_("Has date"), {self.field_generic + "isnull": "False"}),
             )
         super().__init__(field, request, params, model, model_admin, field_path)
 
@@ -365,14 +419,15 @@ class DateFieldListFilter(FieldListFilter):
     def choices(self, changelist):
         for title, param_dict in self.links:
             yield {
-                'selected': self.date_params == param_dict,
-                'query_string': changelist.get_query_string(param_dict, [self.field_generic]),
-                'display': title,
+                "selected": self.date_params == param_dict,
+                "query_string": changelist.get_query_string(
+                    param_dict, [self.field_generic]
+                ),
+                "display": title,
             }
 
 
-FieldListFilter.register(
-    lambda f: isinstance(f, models.DateField), DateFieldListFilter)
+FieldListFilter.register(lambda f: isinstance(f, models.DateField), DateFieldListFilter)
 
 
 # This should be registered last, because it's a last resort. For example,
@@ -381,7 +436,7 @@ FieldListFilter.register(
 class AllValuesFieldListFilter(FieldListFilter):
     def __init__(self, field, request, params, model, model_admin, field_path):
         self.lookup_kwarg = field_path
-        self.lookup_kwarg_isnull = '%s__isnull' % field_path
+        self.lookup_kwarg_isnull = "%s__isnull" % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
         self.lookup_val_isnull = params.get(self.lookup_kwarg_isnull)
         self.empty_value_display = model_admin.get_empty_value_display()
@@ -391,7 +446,9 @@ class AllValuesFieldListFilter(FieldListFilter):
             queryset = model_admin.get_queryset(request)
         else:
             queryset = parent_model._default_manager.all()
-        self.lookup_choices = queryset.distinct().order_by(field.name).values_list(field.name, flat=True)
+        self.lookup_choices = (
+            queryset.distinct().order_by(field.name).values_list(field.name, flat=True)
+        )
         super().__init__(field, request, params, model, model_admin, field_path)
 
     def expected_parameters(self):
@@ -399,9 +456,11 @@ class AllValuesFieldListFilter(FieldListFilter):
 
     def choices(self, changelist):
         yield {
-            'selected': self.lookup_val is None and self.lookup_val_isnull is None,
-            'query_string': changelist.get_query_string(remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]),
-            'display': _('All'),
+            "selected": self.lookup_val is None and self.lookup_val_isnull is None,
+            "query_string": changelist.get_query_string(
+                remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]
+            ),
+            "display": _("All"),
         }
         include_none = False
         for val in self.lookup_choices:
@@ -410,15 +469,19 @@ class AllValuesFieldListFilter(FieldListFilter):
                 continue
             val = str(val)
             yield {
-                'selected': self.lookup_val == val,
-                'query_string': changelist.get_query_string({self.lookup_kwarg: val}, [self.lookup_kwarg_isnull]),
-                'display': val,
+                "selected": self.lookup_val == val,
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg: val}, [self.lookup_kwarg_isnull]
+                ),
+                "display": val,
             }
         if include_none:
             yield {
-                'selected': bool(self.lookup_val_isnull),
-                'query_string': changelist.get_query_string({self.lookup_kwarg_isnull: 'True'}, [self.lookup_kwarg]),
-                'display': self.empty_value_display,
+                "selected": bool(self.lookup_val_isnull),
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg_isnull: "True"}, [self.lookup_kwarg]
+                ),
+                "display": self.empty_value_display,
             }
 
 
@@ -427,9 +490,15 @@ FieldListFilter.register(lambda f: True, AllValuesFieldListFilter)
 
 class RelatedOnlyFieldListFilter(RelatedFieldListFilter):
     def field_choices(self, field, request, model_admin):
-        pk_qs = model_admin.get_queryset(request).distinct().values_list('%s__pk' % self.field_path, flat=True)
+        pk_qs = (
+            model_admin.get_queryset(request)
+            .distinct()
+            .values_list("%s__pk" % self.field_path, flat=True)
+        )
         ordering = self.field_admin_ordering(field, request, model_admin)
-        return field.get_choices(include_blank=False, limit_choices_to={'pk__in': pk_qs}, ordering=ordering)
+        return field.get_choices(
+            include_blank=False, limit_choices_to={"pk__in": pk_qs}, ordering=ordering
+        )
 
 
 class EmptyFieldListFilter(FieldListFilter):
@@ -437,28 +506,29 @@ class EmptyFieldListFilter(FieldListFilter):
         if not field.empty_strings_allowed and not field.null:
             raise ImproperlyConfigured(
                 "The list filter '%s' cannot be used with field '%s' which "
-                "doesn't allow empty strings and nulls." % (
+                "doesn't allow empty strings and nulls."
+                % (
                     self.__class__.__name__,
                     field.name,
                 )
             )
-        self.lookup_kwarg = '%s__isempty' % field_path
+        self.lookup_kwarg = "%s__isempty" % field_path
         self.lookup_val = params.get(self.lookup_kwarg)
         super().__init__(field, request, params, model, model_admin, field_path)
 
     def queryset(self, request, queryset):
         if self.lookup_kwarg not in self.used_parameters:
             return queryset
-        if self.lookup_val not in ('0', '1'):
+        if self.lookup_val not in ("0", "1"):
             raise IncorrectLookupParameters
 
         lookup_conditions = []
         if self.field.empty_strings_allowed:
-            lookup_conditions.append((self.field_path, ''))
+            lookup_conditions.append((self.field_path, ""))
         if self.field.null:
-            lookup_conditions.append((f'{self.field_path}__isnull', True))
+            lookup_conditions.append((f"{self.field_path}__isnull", True))
         lookup_condition = models.Q(*lookup_conditions, _connector=models.Q.OR)
-        if self.lookup_val == '1':
+        if self.lookup_val == "1":
             return queryset.filter(lookup_condition)
         return queryset.exclude(lookup_condition)
 
@@ -467,12 +537,14 @@ class EmptyFieldListFilter(FieldListFilter):
 
     def choices(self, changelist):
         for lookup, title in (
-            (None, _('All')),
-            ('1', _('Empty')),
-            ('0', _('Not empty')),
+            (None, _("All")),
+            ("1", _("Empty")),
+            ("0", _("Not empty")),
         ):
             yield {
-                'selected': self.lookup_val == lookup,
-                'query_string': changelist.get_query_string({self.lookup_kwarg: lookup}),
-                'display': title,
+                "selected": self.lookup_val == lookup,
+                "query_string": changelist.get_query_string(
+                    {self.lookup_kwarg: lookup}
+                ),
+                "display": title,
             }

+ 7 - 6
django/contrib/admin/forms.py

@@ -7,24 +7,25 @@ class AdminAuthenticationForm(AuthenticationForm):
     """
     A custom authentication form used in the admin app.
     """
+
     error_messages = {
         **AuthenticationForm.error_messages,
-        'invalid_login': _(
+        "invalid_login": _(
             "Please enter the correct %(username)s and password for a staff "
             "account. Note that both fields may be case-sensitive."
         ),
     }
-    required_css_class = 'required'
+    required_css_class = "required"
 
     def confirm_login_allowed(self, user):
         super().confirm_login_allowed(user)
         if not user.is_staff:
             raise ValidationError(
-                self.error_messages['invalid_login'],
-                code='invalid_login',
-                params={'username': self.username_field.verbose_name}
+                self.error_messages["invalid_login"],
+                code="invalid_login",
+                params={"username": self.username_field.verbose_name},
             )
 
 
 class AdminPasswordChangeForm(PasswordChangeForm):
-    required_css_class = 'required'
+    required_css_class = "required"

+ 191 - 91
django/contrib/admin/helpers.py

@@ -2,43 +2,57 @@ import json
 
 from django import forms
 from django.contrib.admin.utils import (
-    display_for_field, flatten_fieldsets, help_text_for_field, label_for_field,
-    lookup_field, quote,
+    display_for_field,
+    flatten_fieldsets,
+    help_text_for_field,
+    label_for_field,
+    lookup_field,
+    quote,
 )
 from django.core.exceptions import ObjectDoesNotExist
 from django.db.models.fields.related import (
-    ForeignObjectRel, ManyToManyRel, OneToOneField,
+    ForeignObjectRel,
+    ManyToManyRel,
+    OneToOneField,
 )
 from django.forms.utils import flatatt
 from django.template.defaultfilters import capfirst, linebreaksbr
 from django.urls import NoReverseMatch, reverse
 from django.utils.html import conditional_escape, format_html
 from django.utils.safestring import mark_safe
-from django.utils.translation import gettext, gettext_lazy as _
+from django.utils.translation import gettext
+from django.utils.translation import gettext_lazy as _
 
-ACTION_CHECKBOX_NAME = '_selected_action'
+ACTION_CHECKBOX_NAME = "_selected_action"
 
 
 class ActionForm(forms.Form):
-    action = forms.ChoiceField(label=_('Action:'))
+    action = forms.ChoiceField(label=_("Action:"))
     select_across = forms.BooleanField(
-        label='',
+        label="",
         required=False,
         initial=0,
-        widget=forms.HiddenInput({'class': 'select-across'}),
+        widget=forms.HiddenInput({"class": "select-across"}),
     )
 
 
-checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False)
+checkbox = forms.CheckboxInput({"class": "action-select"}, lambda value: False)
 
 
 class AdminForm:
-    def __init__(self, form, fieldsets, prepopulated_fields, readonly_fields=None, model_admin=None):
+    def __init__(
+        self,
+        form,
+        fieldsets,
+        prepopulated_fields,
+        readonly_fields=None,
+        model_admin=None,
+    ):
         self.form, self.fieldsets = form, fieldsets
-        self.prepopulated_fields = [{
-            'field': form[field_name],
-            'dependencies': [form[f] for f in dependencies]
-        } for field_name, dependencies in prepopulated_fields.items()]
+        self.prepopulated_fields = [
+            {"field": form[field_name], "dependencies": [form[f] for f in dependencies]}
+            for field_name, dependencies in prepopulated_fields.items()
+        ]
         self.model_admin = model_admin
         if readonly_fields is None:
             readonly_fields = ()
@@ -46,18 +60,19 @@ class AdminForm:
 
     def __repr__(self):
         return (
-            f'<{self.__class__.__qualname__}: '
-            f'form={self.form.__class__.__qualname__} '
-            f'fieldsets={self.fieldsets!r}>'
+            f"<{self.__class__.__qualname__}: "
+            f"form={self.form.__class__.__qualname__} "
+            f"fieldsets={self.fieldsets!r}>"
         )
 
     def __iter__(self):
         for name, options in self.fieldsets:
             yield Fieldset(
-                self.form, name,
+                self.form,
+                name,
                 readonly_fields=self.readonly_fields,
                 model_admin=self.model_admin,
-                **options
+                **options,
             )
 
     @property
@@ -77,24 +92,34 @@ class AdminForm:
 
 
 class Fieldset:
-    def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(),
-                 description=None, model_admin=None):
+    def __init__(
+        self,
+        form,
+        name=None,
+        readonly_fields=(),
+        fields=(),
+        classes=(),
+        description=None,
+        model_admin=None,
+    ):
         self.form = form
         self.name, self.fields = name, fields
-        self.classes = ' '.join(classes)
+        self.classes = " ".join(classes)
         self.description = description
         self.model_admin = model_admin
         self.readonly_fields = readonly_fields
 
     @property
     def media(self):
-        if 'collapse' in self.classes:
-            return forms.Media(js=['admin/js/collapse.js'])
+        if "collapse" in self.classes:
+            return forms.Media(js=["admin/js/collapse.js"])
         return forms.Media()
 
     def __iter__(self):
         for field in self.fields:
-            yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin)
+            yield Fieldline(
+                self.form, field, self.readonly_fields, model_admin=self.model_admin
+            )
 
 
 class Fieldline:
@@ -116,15 +141,19 @@ class Fieldline:
     def __iter__(self):
         for i, field in enumerate(self.fields):
             if field in self.readonly_fields:
-                yield AdminReadonlyField(self.form, field, is_first=(i == 0), model_admin=self.model_admin)
+                yield AdminReadonlyField(
+                    self.form, field, is_first=(i == 0), model_admin=self.model_admin
+                )
             else:
                 yield AdminField(self.form, field, is_first=(i == 0))
 
     def errors(self):
         return mark_safe(
-            '\n'.join(
-                self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields
-            ).strip('\n')
+            "\n".join(
+                self.form[f].errors.as_ul()
+                for f in self.fields
+                if f not in self.readonly_fields
+            ).strip("\n")
         )
 
 
@@ -139,18 +168,19 @@ class AdminField:
         classes = []
         contents = conditional_escape(self.field.label)
         if self.is_checkbox:
-            classes.append('vCheckboxLabel')
+            classes.append("vCheckboxLabel")
 
         if self.field.field.required:
-            classes.append('required')
+            classes.append("required")
         if not self.is_first:
-            classes.append('inline')
-        attrs = {'class': ' '.join(classes)} if classes else {}
+            classes.append("inline")
+        attrs = {"class": " ".join(classes)} if classes else {}
         # checkboxes should not have a label suffix as the checkbox appears
         # to the left of the label.
         return self.field.label_tag(
-            contents=mark_safe(contents), attrs=attrs,
-            label_suffix='' if self.is_checkbox else None,
+            contents=mark_safe(contents),
+            attrs=attrs,
+            label_suffix="" if self.is_checkbox else None,
         )
 
     def errors(self):
@@ -163,7 +193,7 @@ class AdminReadonlyField:
         # {{ field.name }} must be a useful class name to identify the field.
         # For convenience, store other field-related data here too.
         if callable(field):
-            class_name = field.__name__ if field.__name__ != '<lambda>' else ''
+            class_name = field.__name__ if field.__name__ != "<lambda>" else ""
         else:
             class_name = field
 
@@ -183,11 +213,11 @@ class AdminReadonlyField:
             is_hidden = False
 
         self.field = {
-            'name': class_name,
-            'label': label,
-            'help_text': help_text,
-            'field': field,
-            'is_hidden': is_hidden,
+            "name": class_name,
+            "label": label,
+            "help_text": help_text,
+            "field": field,
+            "is_hidden": is_hidden,
         }
         self.form = form
         self.model_admin = model_admin
@@ -200,11 +230,16 @@ class AdminReadonlyField:
         attrs = {}
         if not self.is_first:
             attrs["class"] = "inline"
-        label = self.field['label']
-        return format_html('<label{}>{}{}</label>', flatatt(attrs), capfirst(label), self.form.label_suffix)
+        label = self.field["label"]
+        return format_html(
+            "<label{}>{}{}</label>",
+            flatatt(attrs),
+            capfirst(label),
+            self.form.label_suffix,
+        )
 
     def get_admin_url(self, remote_field, remote_obj):
-        url_name = 'admin:%s_%s_change' % (
+        url_name = "admin:%s_%s_change" % (
             remote_field.model._meta.app_label,
             remote_field.model._meta.model_name,
         )
@@ -220,7 +255,12 @@ class AdminReadonlyField:
 
     def contents(self):
         from django.contrib.admin.templatetags.admin_list import _boolean_icon
-        field, obj, model_admin = self.field['field'], self.form.instance, self.model_admin
+
+        field, obj, model_admin = (
+            self.field["field"],
+            self.form.instance,
+            self.model_admin,
+        )
         try:
             f, attr, value = lookup_field(field, obj, model_admin)
         except (AttributeError, ValueError, ObjectDoesNotExist):
@@ -230,10 +270,10 @@ class AdminReadonlyField:
                 widget = self.form[field].field.widget
                 # This isn't elegant but suffices for contrib.auth's
                 # ReadOnlyPasswordHashWidget.
-                if getattr(widget, 'read_only', False):
+                if getattr(widget, "read_only", False):
                     return widget.render(field, value)
             if f is None:
-                if getattr(attr, 'boolean', False):
+                if getattr(attr, "boolean", False):
                     result_repr = _boolean_icon(value)
                 else:
                     if hasattr(value, "__html__"):
@@ -244,8 +284,8 @@ class AdminReadonlyField:
                 if isinstance(f.remote_field, ManyToManyRel) and value is not None:
                     result_repr = ", ".join(map(str, value.all()))
                 elif (
-                    isinstance(f.remote_field, (ForeignObjectRel, OneToOneField)) and
-                    value is not None
+                    isinstance(f.remote_field, (ForeignObjectRel, OneToOneField))
+                    and value is not None
                 ):
                     result_repr = self.get_admin_url(f.remote_field, value)
                 else:
@@ -258,10 +298,20 @@ class InlineAdminFormSet:
     """
     A wrapper around an inline formset for use in the admin system.
     """
-    def __init__(self, inline, formset, fieldsets, prepopulated_fields=None,
-                 readonly_fields=None, model_admin=None, has_add_permission=True,
-                 has_change_permission=True, has_delete_permission=True,
-                 has_view_permission=True):
+
+    def __init__(
+        self,
+        inline,
+        formset,
+        fieldsets,
+        prepopulated_fields=None,
+        readonly_fields=None,
+        model_admin=None,
+        has_add_permission=True,
+        has_change_permission=True,
+        has_delete_permission=True,
+        has_view_permission=True,
+    ):
         self.opts = inline
         self.formset = formset
         self.fieldsets = fieldsets
@@ -272,7 +322,7 @@ class InlineAdminFormSet:
         if prepopulated_fields is None:
             prepopulated_fields = {}
         self.prepopulated_fields = prepopulated_fields
-        self.classes = ' '.join(inline.classes) if inline.classes else ''
+        self.classes = " ".join(inline.classes) if inline.classes else ""
         self.has_add_permission = has_add_permission
         self.has_change_permission = has_change_permission
         self.has_delete_permission = has_delete_permission
@@ -282,25 +332,43 @@ class InlineAdminFormSet:
         if self.has_change_permission:
             readonly_fields_for_editing = self.readonly_fields
         else:
-            readonly_fields_for_editing = self.readonly_fields + flatten_fieldsets(self.fieldsets)
+            readonly_fields_for_editing = self.readonly_fields + flatten_fieldsets(
+                self.fieldsets
+            )
 
-        for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()):
+        for form, original in zip(
+            self.formset.initial_forms, self.formset.get_queryset()
+        ):
             view_on_site_url = self.opts.get_view_on_site_url(original)
             yield InlineAdminForm(
-                self.formset, form, self.fieldsets, self.prepopulated_fields,
-                original, readonly_fields_for_editing, model_admin=self.opts,
+                self.formset,
+                form,
+                self.fieldsets,
+                self.prepopulated_fields,
+                original,
+                readonly_fields_for_editing,
+                model_admin=self.opts,
                 view_on_site_url=view_on_site_url,
             )
         for form in self.formset.extra_forms:
             yield InlineAdminForm(
-                self.formset, form, self.fieldsets, self.prepopulated_fields,
-                None, self.readonly_fields, model_admin=self.opts,
+                self.formset,
+                form,
+                self.fieldsets,
+                self.prepopulated_fields,
+                None,
+                self.readonly_fields,
+                model_admin=self.opts,
             )
         if self.has_add_permission:
             yield InlineAdminForm(
-                self.formset, self.formset.empty_form,
-                self.fieldsets, self.prepopulated_fields, None,
-                self.readonly_fields, model_admin=self.opts,
+                self.formset,
+                self.formset.empty_form,
+                self.fieldsets,
+                self.prepopulated_fields,
+                None,
+                self.readonly_fields,
+                model_admin=self.opts,
             )
 
     def fields(self):
@@ -317,42 +385,49 @@ class InlineAdminFormSet:
                 if form_field is not None:
                     widget_is_hidden = form_field.widget.is_hidden
                 yield {
-                    'name': field_name,
-                    'label': meta_labels.get(field_name) or label_for_field(
+                    "name": field_name,
+                    "label": meta_labels.get(field_name)
+                    or label_for_field(
                         field_name,
                         self.opts.model,
                         self.opts,
                         form=empty_form,
                     ),
-                    'widget': {'is_hidden': widget_is_hidden},
-                    'required': False,
-                    'help_text': meta_help_texts.get(field_name) or help_text_for_field(field_name, self.opts.model),
+                    "widget": {"is_hidden": widget_is_hidden},
+                    "required": False,
+                    "help_text": meta_help_texts.get(field_name)
+                    or help_text_for_field(field_name, self.opts.model),
                 }
             else:
                 form_field = empty_form.fields[field_name]
                 label = form_field.label
                 if label is None:
-                    label = label_for_field(field_name, self.opts.model, self.opts, form=empty_form)
+                    label = label_for_field(
+                        field_name, self.opts.model, self.opts, form=empty_form
+                    )
                 yield {
-                    'name': field_name,
-                    'label': label,
-                    'widget': form_field.widget,
-                    'required': form_field.required,
-                    'help_text': form_field.help_text,
+                    "name": field_name,
+                    "label": label,
+                    "widget": form_field.widget,
+                    "required": form_field.required,
+                    "help_text": form_field.help_text,
                 }
 
     def inline_formset_data(self):
         verbose_name = self.opts.verbose_name
-        return json.dumps({
-            'name': '#%s' % self.formset.prefix,
-            'options': {
-                'prefix': self.formset.prefix,
-                'addText': gettext('Add another %(verbose_name)s') % {
-                    'verbose_name': capfirst(verbose_name),
+        return json.dumps(
+            {
+                "name": "#%s" % self.formset.prefix,
+                "options": {
+                    "prefix": self.formset.prefix,
+                    "addText": gettext("Add another %(verbose_name)s")
+                    % {
+                        "verbose_name": capfirst(verbose_name),
+                    },
+                    "deleteText": gettext("Remove"),
                 },
-                'deleteText': gettext('Remove'),
             }
-        })
+        )
 
     @property
     def forms(self):
@@ -374,31 +449,51 @@ class InlineAdminForm(AdminForm):
     """
     A wrapper around an inline form for use in the admin system.
     """
-    def __init__(self, formset, form, fieldsets, prepopulated_fields, original,
-                 readonly_fields=None, model_admin=None, view_on_site_url=None):
+
+    def __init__(
+        self,
+        formset,
+        form,
+        fieldsets,
+        prepopulated_fields,
+        original,
+        readonly_fields=None,
+        model_admin=None,
+        view_on_site_url=None,
+    ):
         self.formset = formset
         self.model_admin = model_admin
         self.original = original
         self.show_url = original and view_on_site_url is not None
         self.absolute_url = view_on_site_url
-        super().__init__(form, fieldsets, prepopulated_fields, readonly_fields, model_admin)
+        super().__init__(
+            form, fieldsets, prepopulated_fields, readonly_fields, model_admin
+        )
 
     def __iter__(self):
         for name, options in self.fieldsets:
             yield InlineFieldset(
-                self.formset, self.form, name, self.readonly_fields,
-                model_admin=self.model_admin, **options
+                self.formset,
+                self.form,
+                name,
+                self.readonly_fields,
+                model_admin=self.model_admin,
+                **options,
             )
 
     def needs_explicit_pk_field(self):
         return (
             # Auto fields are editable, so check for auto or non-editable pk.
-            self.form._meta.model._meta.auto_field or not self.form._meta.model._meta.pk.editable or
+            self.form._meta.model._meta.auto_field
+            or not self.form._meta.model._meta.pk.editable
+            or
             # Also search any parents for an auto field. (The pk info is
             # propagated to child models so that does not need to be checked
             # in parents.)
-            any(parent._meta.auto_field or not parent._meta.model._meta.pk.editable
-                for parent in self.form._meta.model._meta.get_parent_list())
+            any(
+                parent._meta.auto_field or not parent._meta.model._meta.pk.editable
+                for parent in self.form._meta.model._meta.get_parent_list()
+            )
         )
 
     def pk_field(self):
@@ -413,10 +508,12 @@ class InlineAdminForm(AdminForm):
 
     def deletion_field(self):
         from django.forms.formsets import DELETION_FIELD_NAME
+
         return AdminField(self.form, DELETION_FIELD_NAME, False)
 
     def ordering_field(self):
         from django.forms.formsets import ORDERING_FIELD_NAME
+
         return AdminField(self.form, ORDERING_FIELD_NAME, False)
 
 
@@ -429,11 +526,14 @@ class InlineFieldset(Fieldset):
         fk = getattr(self.formset, "fk", None)
         for field in self.fields:
             if not fk or fk.name != field:
-                yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin)
+                yield Fieldline(
+                    self.form, field, self.readonly_fields, model_admin=self.model_admin
+                )
 
 
 class AdminErrorList(forms.utils.ErrorList):
     """Store errors for the form/formsets in an add/change view."""
+
     def __init__(self, form, inline_formsets):
         super().__init__()
 

+ 54 - 24
django/contrib/admin/migrations/0001_initial.py

@@ -7,40 +7,70 @@ class Migration(migrations.Migration):
 
     dependencies = [
         migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('contenttypes', '__first__'),
+        ("contenttypes", "__first__"),
     ]
 
     operations = [
         migrations.CreateModel(
-            name='LogEntry',
+            name="LogEntry",
             fields=[
-                ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
-                ('action_time', models.DateTimeField(auto_now=True, verbose_name='action time')),
-                ('object_id', models.TextField(null=True, verbose_name='object id', blank=True)),
-                ('object_repr', models.CharField(max_length=200, verbose_name='object repr')),
-                ('action_flag', models.PositiveSmallIntegerField(verbose_name='action flag')),
-                ('change_message', models.TextField(verbose_name='change message', blank=True)),
-                ('content_type', models.ForeignKey(
-                    on_delete=models.SET_NULL,
-                    blank=True, null=True,
-                    to='contenttypes.ContentType',
-                    verbose_name='content type',
-                )),
-                ('user', models.ForeignKey(
-                    to=settings.AUTH_USER_MODEL,
-                    on_delete=models.CASCADE,
-                    verbose_name='user',
-                )),
+                (
+                    "id",
+                    models.AutoField(
+                        verbose_name="ID",
+                        serialize=False,
+                        auto_created=True,
+                        primary_key=True,
+                    ),
+                ),
+                (
+                    "action_time",
+                    models.DateTimeField(auto_now=True, verbose_name="action time"),
+                ),
+                (
+                    "object_id",
+                    models.TextField(null=True, verbose_name="object id", blank=True),
+                ),
+                (
+                    "object_repr",
+                    models.CharField(max_length=200, verbose_name="object repr"),
+                ),
+                (
+                    "action_flag",
+                    models.PositiveSmallIntegerField(verbose_name="action flag"),
+                ),
+                (
+                    "change_message",
+                    models.TextField(verbose_name="change message", blank=True),
+                ),
+                (
+                    "content_type",
+                    models.ForeignKey(
+                        on_delete=models.SET_NULL,
+                        blank=True,
+                        null=True,
+                        to="contenttypes.ContentType",
+                        verbose_name="content type",
+                    ),
+                ),
+                (
+                    "user",
+                    models.ForeignKey(
+                        to=settings.AUTH_USER_MODEL,
+                        on_delete=models.CASCADE,
+                        verbose_name="user",
+                    ),
+                ),
             ],
             options={
-                'ordering': ['-action_time'],
-                'db_table': 'django_admin_log',
-                'verbose_name': 'log entry',
-                'verbose_name_plural': 'log entries',
+                "ordering": ["-action_time"],
+                "db_table": "django_admin_log",
+                "verbose_name": "log entry",
+                "verbose_name_plural": "log entries",
             },
             bases=(models.Model,),
             managers=[
-                ('objects', django.contrib.admin.models.LogEntryManager()),
+                ("objects", django.contrib.admin.models.LogEntryManager()),
             ],
         ),
     ]

+ 4 - 4
django/contrib/admin/migrations/0002_logentry_remove_auto_add.py

@@ -5,16 +5,16 @@ from django.utils import timezone
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('admin', '0001_initial'),
+        ("admin", "0001_initial"),
     ]
 
     # No database changes; removes auto_add and adds default/editable.
     operations = [
         migrations.AlterField(
-            model_name='logentry',
-            name='action_time',
+            model_name="logentry",
+            name="action_time",
             field=models.DateTimeField(
-                verbose_name='action time',
+                verbose_name="action time",
                 default=timezone.now,
                 editable=False,
             ),

+ 5 - 5
django/contrib/admin/migrations/0003_logentry_add_action_flag_choices.py

@@ -4,17 +4,17 @@ from django.db import migrations, models
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('admin', '0002_logentry_remove_auto_add'),
+        ("admin", "0002_logentry_remove_auto_add"),
     ]
 
     # No database changes; adds choices to action_flag.
     operations = [
         migrations.AlterField(
-            model_name='logentry',
-            name='action_flag',
+            model_name="logentry",
+            name="action_flag",
             field=models.PositiveSmallIntegerField(
-                choices=[(1, 'Addition'), (2, 'Change'), (3, 'Deletion')],
-                verbose_name='action flag',
+                choices=[(1, "Addition"), (2, "Change"), (3, "Deletion")],
+                verbose_name="action flag",
             ),
         ),
     ]

+ 85 - 46
django/contrib/admin/models.py

@@ -7,23 +7,32 @@ from django.db import models
 from django.urls import NoReverseMatch, reverse
 from django.utils import timezone
 from django.utils.text import get_text_list
-from django.utils.translation import gettext, gettext_lazy as _
+from django.utils.translation import gettext
+from django.utils.translation import gettext_lazy as _
 
 ADDITION = 1
 CHANGE = 2
 DELETION = 3
 
 ACTION_FLAG_CHOICES = (
-    (ADDITION, _('Addition')),
-    (CHANGE, _('Change')),
-    (DELETION, _('Deletion')),
+    (ADDITION, _("Addition")),
+    (CHANGE, _("Change")),
+    (DELETION, _("Deletion")),
 )
 
 
 class LogEntryManager(models.Manager):
     use_in_migrations = True
 
-    def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''):
+    def log_action(
+        self,
+        user_id,
+        content_type_id,
+        object_id,
+        object_repr,
+        action_flag,
+        change_message="",
+    ):
         if isinstance(change_message, list):
             change_message = json.dumps(change_message)
         return self.model.objects.create(
@@ -38,51 +47,54 @@ class LogEntryManager(models.Manager):
 
 class LogEntry(models.Model):
     action_time = models.DateTimeField(
-        _('action time'),
+        _("action time"),
         default=timezone.now,
         editable=False,
     )
     user = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         models.CASCADE,
-        verbose_name=_('user'),
+        verbose_name=_("user"),
     )
     content_type = models.ForeignKey(
         ContentType,
         models.SET_NULL,
-        verbose_name=_('content type'),
-        blank=True, null=True,
+        verbose_name=_("content type"),
+        blank=True,
+        null=True,
     )
-    object_id = models.TextField(_('object id'), blank=True, null=True)
+    object_id = models.TextField(_("object id"), blank=True, null=True)
     # Translators: 'repr' means representation (https://docs.python.org/library/functions.html#repr)
-    object_repr = models.CharField(_('object repr'), max_length=200)
-    action_flag = models.PositiveSmallIntegerField(_('action flag'), choices=ACTION_FLAG_CHOICES)
+    object_repr = models.CharField(_("object repr"), max_length=200)
+    action_flag = models.PositiveSmallIntegerField(
+        _("action flag"), choices=ACTION_FLAG_CHOICES
+    )
     # change_message is either a string or a JSON structure
-    change_message = models.TextField(_('change message'), blank=True)
+    change_message = models.TextField(_("change message"), blank=True)
 
     objects = LogEntryManager()
 
     class Meta:
-        verbose_name = _('log entry')
-        verbose_name_plural = _('log entries')
-        db_table = 'django_admin_log'
-        ordering = ['-action_time']
+        verbose_name = _("log entry")
+        verbose_name_plural = _("log entries")
+        db_table = "django_admin_log"
+        ordering = ["-action_time"]
 
     def __repr__(self):
         return str(self.action_time)
 
     def __str__(self):
         if self.is_addition():
-            return gettext('Added “%(object)s”.') % {'object': self.object_repr}
+            return gettext("Added “%(object)s”.") % {"object": self.object_repr}
         elif self.is_change():
-            return gettext('Changed “%(object)s” — %(changes)s') % {
-                'object': self.object_repr,
-                'changes': self.get_change_message(),
+            return gettext("Changed “%(object)s” — %(changes)s") % {
+                "object": self.object_repr,
+                "changes": self.get_change_message(),
             }
         elif self.is_deletion():
-            return gettext('Deleted “%(object)s.”') % {'object': self.object_repr}
+            return gettext("Deleted “%(object)s.”") % {"object": self.object_repr}
 
-        return gettext('LogEntry Object')
+        return gettext("LogEntry Object")
 
     def is_addition(self):
         return self.action_flag == ADDITION
@@ -98,38 +110,62 @@ class LogEntry(models.Model):
         If self.change_message is a JSON structure, interpret it as a change
         string, properly translated.
         """
-        if self.change_message and self.change_message[0] == '[':
+        if self.change_message and self.change_message[0] == "[":
             try:
                 change_message = json.loads(self.change_message)
             except json.JSONDecodeError:
                 return self.change_message
             messages = []
             for sub_message in change_message:
-                if 'added' in sub_message:
-                    if sub_message['added']:
-                        sub_message['added']['name'] = gettext(sub_message['added']['name'])
-                        messages.append(gettext('Added {name} “{object}”.').format(**sub_message['added']))
+                if "added" in sub_message:
+                    if sub_message["added"]:
+                        sub_message["added"]["name"] = gettext(
+                            sub_message["added"]["name"]
+                        )
+                        messages.append(
+                            gettext("Added {name} “{object}”.").format(
+                                **sub_message["added"]
+                            )
+                        )
                     else:
-                        messages.append(gettext('Added.'))
-
-                elif 'changed' in sub_message:
-                    sub_message['changed']['fields'] = get_text_list(
-                        [gettext(field_name) for field_name in sub_message['changed']['fields']], gettext('and')
+                        messages.append(gettext("Added."))
+
+                elif "changed" in sub_message:
+                    sub_message["changed"]["fields"] = get_text_list(
+                        [
+                            gettext(field_name)
+                            for field_name in sub_message["changed"]["fields"]
+                        ],
+                        gettext("and"),
                     )
-                    if 'name' in sub_message['changed']:
-                        sub_message['changed']['name'] = gettext(sub_message['changed']['name'])
-                        messages.append(gettext('Changed {fields} for {name} “{object}”.').format(
-                            **sub_message['changed']
-                        ))
+                    if "name" in sub_message["changed"]:
+                        sub_message["changed"]["name"] = gettext(
+                            sub_message["changed"]["name"]
+                        )
+                        messages.append(
+                            gettext("Changed {fields} for {name} “{object}”.").format(
+                                **sub_message["changed"]
+                            )
+                        )
                     else:
-                        messages.append(gettext('Changed {fields}.').format(**sub_message['changed']))
-
-                elif 'deleted' in sub_message:
-                    sub_message['deleted']['name'] = gettext(sub_message['deleted']['name'])
-                    messages.append(gettext('Deleted {name} “{object}”.').format(**sub_message['deleted']))
+                        messages.append(
+                            gettext("Changed {fields}.").format(
+                                **sub_message["changed"]
+                            )
+                        )
+
+                elif "deleted" in sub_message:
+                    sub_message["deleted"]["name"] = gettext(
+                        sub_message["deleted"]["name"]
+                    )
+                    messages.append(
+                        gettext("Deleted {name} “{object}”.").format(
+                            **sub_message["deleted"]
+                        )
+                    )
 
-            change_message = ' '.join(msg[0].upper() + msg[1:] for msg in messages)
-            return change_message or gettext('No fields changed.')
+            change_message = " ".join(msg[0].upper() + msg[1:] for msg in messages)
+            return change_message or gettext("No fields changed.")
         else:
             return self.change_message
 
@@ -142,7 +178,10 @@ class LogEntry(models.Model):
         Return the admin URL to edit the object represented by this log entry.
         """
         if self.content_type and self.object_id:
-            url_name = 'admin:%s_%s_change' % (self.content_type.app_label, self.content_type.model)
+            url_name = "admin:%s_%s_change" % (
+                self.content_type.app_label,
+                self.content_type.model,
+            )
             try:
                 return reverse(url_name, args=(quote(self.object_id),))
             except NoReverseMatch:

File diff suppressed because it is too large
+ 325 - 197
django/contrib/admin/options.py


Some files were not shown because too many files changed in this diff