From 305757aec19c9d5111e4d76095ae0acd66163e4b Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 26 Jan 2024 12:45:07 +0100 Subject: [PATCH 01/37] Applied Black's 2024 stable style. https://github.com/psf/black/releases/tag/24.1.0 --- .pre-commit-config.yaml | 4 +- django/__main__.py | 1 + django/contrib/admin/filters.py | 1 + django/contrib/admin/options.py | 14 ++-- .../contrib/admin/templatetags/admin_list.py | 14 ++-- django/contrib/admin/widgets.py | 1 + django/contrib/auth/base_user.py | 1 + django/contrib/auth/management/__init__.py | 1 + .../management/commands/createsuperuser.py | 23 ++++-- .../contrib/gis/db/backends/oracle/models.py | 1 + .../gis/db/backends/oracle/operations.py | 1 + .../gis/db/backends/postgis/adapter.py | 1 + .../contrib/gis/db/backends/postgis/const.py | 1 + .../contrib/gis/db/backends/postgis/models.py | 1 + .../gis/db/backends/spatialite/models.py | 1 + .../gis/db/backends/spatialite/operations.py | 1 + django/contrib/gis/db/models/functions.py | 14 ++-- django/contrib/gis/db/models/proxy.py | 1 + .../contrib/gis/db/models/sql/conversion.py | 1 + django/contrib/gis/gdal/__init__.py | 1 + django/contrib/gis/gdal/datasource.py | 1 + django/contrib/gis/gdal/envelope.py | 1 + django/contrib/gis/gdal/geometries.py | 1 + django/contrib/gis/gdal/prototypes/ds.py | 1 + .../contrib/gis/gdal/prototypes/errcheck.py | 1 + .../contrib/gis/gdal/prototypes/generation.py | 1 + django/contrib/gis/gdal/prototypes/raster.py | 1 + django/contrib/gis/gdal/raster/const.py | 1 + django/contrib/gis/gdal/srs.py | 1 + django/contrib/gis/geos/__init__.py | 1 + django/contrib/gis/geos/collections.py | 1 + django/contrib/gis/geos/coordseq.py | 1 + django/contrib/gis/geos/geometry.py | 1 + django/contrib/gis/geos/io.py | 1 + django/contrib/gis/geos/libgeos.py | 1 + .../contrib/gis/geos/prototypes/errcheck.py | 1 + django/contrib/gis/geos/prototypes/misc.py | 1 + .../contrib/gis/geos/prototypes/predicates.py | 1 + .../contrib/gis/geos/prototypes/topology.py | 1 + django/contrib/gis/utils/__init__.py | 1 + django/contrib/gis/utils/ogrinspect.py | 1 + django/contrib/postgres/search.py | 8 +- django/contrib/sessions/base_session.py | 1 + django/contrib/staticfiles/views.py | 1 + django/core/cache/__init__.py | 1 + django/core/exceptions.py | 1 + django/core/files/images.py | 1 + django/core/files/locks.py | 1 + django/core/files/uploadhandler.py | 1 + django/core/mail/__init__.py | 1 + django/core/mail/backends/console.py | 1 + django/core/mail/backends/locmem.py | 1 + django/core/mail/backends/smtp.py | 1 + django/core/management/base.py | 23 ++++-- django/core/serializers/base.py | 1 + django/core/serializers/xml_serializer.py | 1 + django/db/backends/base/schema.py | 16 ++-- django/db/backends/ddl_references.py | 1 + django/db/backends/mysql/base.py | 1 + django/db/backends/oracle/base.py | 1 + django/db/backends/oracle/creation.py | 18 ++-- django/db/backends/postgresql/base.py | 8 +- django/db/backends/postgresql/schema.py | 6 +- django/db/backends/sqlite3/_functions.py | 1 + django/db/backends/sqlite3/base.py | 1 + django/db/migrations/autodetector.py | 17 ++-- django/db/migrations/loader.py | 10 +-- django/db/migrations/operations/models.py | 10 +-- django/db/migrations/state.py | 10 +-- django/db/models/aggregates.py | 1 + django/db/models/base.py | 8 +- django/db/models/constants.py | 1 + django/db/models/expressions.py | 42 +++++----- .../db/models/fields/related_descriptors.py | 1 + django/db/models/fields/reverse_related.py | 1 + django/db/models/functions/comparison.py | 1 + django/db/models/functions/datetime.py | 16 ++-- django/db/models/functions/math.py | 8 +- django/db/models/functions/mixins.py | 8 +- django/db/models/functions/text.py | 8 +- django/db/models/indexes.py | 8 +- django/db/models/lookups.py | 8 +- django/db/models/query.py | 20 +++-- django/db/models/query_utils.py | 1 + django/db/models/sql/compiler.py | 6 +- django/db/models/sql/datastructures.py | 1 + django/db/models/sql/query.py | 1 + django/db/models/sql/where.py | 1 + django/forms/models.py | 10 ++- django/forms/widgets.py | 22 +++-- django/http/multipartparser.py | 1 + django/http/request.py | 8 +- django/middleware/csrf.py | 1 + django/shortcuts.py | 1 + django/template/defaultfilters.py | 1 + django/template/defaulttags.py | 1 + django/template/engine.py | 8 +- django/template/smartif.py | 1 + django/test/html.py | 1 + django/urls/conf.py | 1 + django/urls/resolvers.py | 9 +- django/utils/archive.py | 1 + django/utils/cache.py | 1 + django/utils/crypto.py | 1 + django/utils/dateformat.py | 1 + django/utils/deconstruct.py | 8 +- django/utils/feedgenerator.py | 1 + django/utils/jslex.py | 1 + django/utils/regex_helper.py | 1 + django/utils/translation/__init__.py | 1 + django/utils/translation/trans_real.py | 1 + django/views/decorators/http.py | 1 + django/views/static.py | 1 + docs/_ext/djangodocs.py | 1 + docs/howto/csrf.txt | 3 +- docs/howto/custom-file-storage.txt | 3 +- docs/howto/custom-lookups.txt | 3 +- docs/howto/custom-management-commands.txt | 3 +- docs/howto/custom-model-fields.txt | 12 +-- docs/howto/custom-template-tags.txt | 9 +- docs/howto/error-reporting.txt | 9 +- .../writing-code/coding-style.txt | 9 +- .../writing-code/submitting-patches.txt | 6 +- docs/intro/tutorial04.txt | 3 +- docs/intro/tutorial07.txt | 3 +- docs/ref/contrib/admin/index.txt | 9 +- docs/ref/contrib/gis/feeds.txt | 12 +-- docs/ref/settings.txt | 3 +- docs/ref/utils.txt | 12 +-- docs/releases/1.0-porting-guide.txt | 3 +- docs/releases/1.10.txt | 3 +- docs/releases/1.2.txt | 30 +++---- docs/releases/5.0.txt | 3 +- docs/topics/async.txt | 15 ++-- docs/topics/auth/default.txt | 27 ++---- docs/topics/cache.txt | 30 +++---- docs/topics/checks.txt | 6 +- docs/topics/conditional-view-processing.txt | 15 ++-- docs/topics/db/fixtures.txt | 3 +- docs/topics/db/transactions.txt | 3 +- docs/topics/forms/modelforms.txt | 3 +- docs/topics/http/file-uploads.txt | 6 +- docs/topics/signals.txt | 3 +- docs/topics/testing/tools.txt | 21 ++--- tests/admin_changelist/test_date_hierarchy.py | 5 +- tests/admin_inlines/models.py | 1 + tests/admin_scripts/tests.py | 5 +- .../custom_has_permission_admin.py | 1 + tests/admin_views/customadmin.py | 1 + tests/aggregation_regress/tests.py | 5 +- tests/auth_tests/models/custom_permissions.py | 1 + tests/auth_tests/test_forms.py | 11 +-- tests/auth_tests/test_hashers.py | 15 ++-- tests/auth_tests/test_views.py | 6 +- tests/backends/base/test_base.py | 11 ++- tests/backends/test_utils.py | 1 + tests/backends/tests.py | 1 + tests/bash_completion/tests.py | 1 + tests/basic/models.py | 1 + tests/check_framework/test_security.py | 12 ++- tests/contenttypes_tests/test_management.py | 14 ++-- tests/contenttypes_tests/test_models.py | 5 +- tests/contenttypes_tests/test_views.py | 12 +-- tests/context_processors/tests.py | 1 + tests/custom_lookups/tests.py | 9 +- tests/db_functions/comparison/test_nullif.py | 8 +- .../datetime/test_extract_trunc.py | 8 +- tests/db_functions/models.py | 1 + tests/db_functions/text/test_md5.py | 8 +- tests/db_functions/text/test_sha1.py | 8 +- tests/db_functions/text/test_sha224.py | 8 +- tests/db_functions/text/test_sha256.py | 8 +- tests/db_functions/text/test_sha384.py | 10 ++- tests/db_functions/text/test_sha512.py | 10 ++- tests/db_utils/tests.py | 1 + tests/dbshell/test_sqlite.py | 11 ++- tests/distinct_on_fields/tests.py | 8 +- tests/expressions/models.py | 1 + tests/file_uploads/tests.py | 14 ++-- tests/file_uploads/uploadhandler.py | 1 + tests/files/tests.py | 35 ++++---- tests/force_insert_update/models.py | 1 + .../field_tests/test_decimalfield.py | 5 +- .../forms_tests/field_tests/test_filefield.py | 3 +- tests/forms_tests/tests/test_formsets.py | 9 +- tests/gis_tests/gdal_tests/test_raster.py | 5 +- tests/gis_tests/geogapp/tests.py | 1 + tests/gis_tests/test_data.py | 1 + tests/handlers/tests.py | 5 +- tests/httpwrappers/tests.py | 6 +- tests/invalid_models_tests/test_models.py | 82 +++++++++++-------- tests/m2m_and_m2o/models.py | 1 + tests/m2m_intermediary/models.py | 1 + tests/mail/tests.py | 5 +- tests/many_to_many/models.py | 1 + tests/many_to_one/models.py | 1 + tests/middleware/test_security.py | 12 ++- tests/middleware/tests.py | 6 +- tests/migrations/test_commands.py | 16 ++-- tests/migrations/test_executor.py | 6 +- tests/migrations/test_operations.py | 38 +++++---- tests/model_inheritance/models.py | 1 + tests/model_inheritance/tests.py | 8 +- tests/model_inheritance_regress/tests.py | 1 + tests/null_fk_ordering/models.py | 1 + tests/one_to_one/models.py | 1 + tests/order_with_respect_to/base_tests.py | 10 ++- tests/postgres_tests/fields.py | 1 + tests/postgres_tests/test_constraints.py | 5 +- tests/postgres_tests/test_search.py | 1 + tests/prefetch_related/tests.py | 5 +- tests/proxy_models/models.py | 1 + tests/queries/models.py | 1 + tests/requests_tests/test_accept_header.py | 12 +-- tests/save_delete_hooks/models.py | 1 + tests/schema/fields.py | 8 +- tests/schema/tests.py | 22 +++-- tests/serializers/models/base.py | 1 + tests/serializers/models/data.py | 1 + tests/serializers/models/natural.py | 1 + tests/serializers/test_data.py | 1 + tests/servers/tests.py | 1 + tests/sessions_tests/models.py | 1 + tests/signals/models.py | 1 + tests/template_tests/test_parser.py | 1 + tests/test_client/tests.py | 1 + tests/test_client_regress/tests.py | 1 + tests/test_runner/test_discover_runner.py | 7 +- tests/test_runner/tests.py | 80 ++++++++++-------- tests/transactions/models.py | 1 + tests/urlpatterns_reverse/tests.py | 1 + tests/urls.py | 1 - tests/utils_tests/test_datastructures.py | 1 + tests/utils_tests/test_jslex.py | 1 + tests/view_tests/tests/test_debug.py | 21 +++-- 235 files changed, 809 insertions(+), 602 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1c3571406f..d6ea11e8e0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black-pre-commit-mirror - rev: 23.12.1 + rev: 24.1.0 hooks: - id: black exclude: \.py-tpl$ @@ -9,7 +9,7 @@ repos: hooks: - id: blacken-docs additional_dependencies: - - black==23.12.1 + - black==24.1.0 files: 'docs/.*\.txt$' - repo: https://github.com/PyCQA/isort rev: 5.13.2 diff --git a/django/__main__.py b/django/__main__.py index 8b96e91ea8..7415143848 100644 --- a/django/__main__.py +++ b/django/__main__.py @@ -3,6 +3,7 @@ Invokes django-admin when the django module is run as a script. Example: python -m django check """ + from django.core import management if __name__ == "__main__": diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py index 06dedf8727..675c4a5d49 100644 --- a/django/contrib/admin/filters.py +++ b/django/contrib/admin/filters.py @@ -5,6 +5,7 @@ Filters are specified in models with the "list_filter" option. Each filter subclass knows how to display a filter for a field that passes a certain test -- e.g. being a DateField or ForeignKey. """ + import datetime from django.contrib.admin.exceptions import NotRegistered diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index e3703f5866..d97597fe66 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -1759,9 +1759,9 @@ class ModelAdmin(BaseModelAdmin): has_delete_permission = inline.has_delete_permission(request, obj) else: # Disable all edit-permissions, and override formset settings. - has_add_permission = ( - has_change_permission - ) = has_delete_permission = False + has_add_permission = has_change_permission = has_delete_permission = ( + False + ) formset.extra = formset.max_num = 0 has_view_permission = inline.has_view_permission(request, obj) prepopulated = dict(inline.get_prepopulated_fields(request, obj)) @@ -1896,9 +1896,11 @@ class ModelAdmin(BaseModelAdmin): form, list(fieldsets), # Clear prepopulated fields on a view-only form to avoid a crash. - self.get_prepopulated_fields(request, obj) - if add or self.has_change_permission(request, obj) - else {}, + ( + self.get_prepopulated_fields(request, obj) + if add or self.has_change_permission(request, obj) + else {} + ), readonly_fields, model_admin=self, ) diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 2dcdf62afb..0c32290b6c 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -171,9 +171,9 @@ def result_headers(cl): "url_primary": cl.get_query_string({ORDER_VAR: ".".join(o_list_primary)}), "url_remove": cl.get_query_string({ORDER_VAR: ".".join(o_list_remove)}), "url_toggle": cl.get_query_string({ORDER_VAR: ".".join(o_list_toggle)}), - "class_attrib": format_html(' class="{}"', " ".join(th_classes)) - if th_classes - else "", + "class_attrib": ( + format_html(' class="{}"', " ".join(th_classes)) if th_classes else "" + ), } @@ -270,9 +270,11 @@ def items_for_result(cl, result, form): link_or_text = format_html( '{}', url, - format_html(' data-popup-opener="{}"', value) - if cl.is_popup - else "", + ( + format_html(' data-popup-opener="{}"', value) + if cl.is_popup + else "" + ), result_repr, ) diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 3352e75e79..216b87671b 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -1,6 +1,7 @@ """ Form Widget classes specific to the Django admin site. """ + import copy import json diff --git a/django/contrib/auth/base_user.py b/django/contrib/auth/base_user.py index ccfe19fcc1..0c9538d69d 100644 --- a/django/contrib/auth/base_user.py +++ b/django/contrib/auth/base_user.py @@ -2,6 +2,7 @@ This module allows importing AbstractBaseUser even when django.contrib.auth is not in INSTALLED_APPS. """ + import unicodedata from django.conf import settings diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py index ad31a6e68f..b29a980cb2 100644 --- a/django/contrib/auth/management/__init__.py +++ b/django/contrib/auth/management/__init__.py @@ -1,6 +1,7 @@ """ Creates permissions for all installed apps that need permissions. """ + import getpass import unicodedata diff --git a/django/contrib/auth/management/commands/createsuperuser.py b/django/contrib/auth/management/commands/createsuperuser.py index 6d650cca67..75ef68ff68 100644 --- a/django/contrib/auth/management/commands/createsuperuser.py +++ b/django/contrib/auth/management/commands/createsuperuser.py @@ -1,6 +1,7 @@ """ Management utility to create superusers. """ + import getpass import os import sys @@ -271,15 +272,19 @@ class Command(BaseCommand): return "%s%s%s: " % ( capfirst(field.verbose_name), " (leave blank to use '%s')" % default if default else "", - " (%s.%s)" - % ( - field.remote_field.model._meta.object_name, - field.m2m_target_field_name() - if field.many_to_many - else field.remote_field.field_name, - ) - if field.remote_field - else "", + ( + " (%s.%s)" + % ( + field.remote_field.model._meta.object_name, + ( + field.m2m_target_field_name() + if field.many_to_many + else field.remote_field.field_name + ), + ) + if field.remote_field + else "" + ), ) @cached_property diff --git a/django/contrib/gis/db/backends/oracle/models.py b/django/contrib/gis/db/backends/oracle/models.py index f06f73148e..af749c3435 100644 --- a/django/contrib/gis/db/backends/oracle/models.py +++ b/django/contrib/gis/db/backends/oracle/models.py @@ -7,6 +7,7 @@ For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model. """ + from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin diff --git a/django/contrib/gis/db/backends/oracle/operations.py b/django/contrib/gis/db/backends/oracle/operations.py index ed86985cf8..eb86dc39de 100644 --- a/django/contrib/gis/db/backends/oracle/operations.py +++ b/django/contrib/gis/db/backends/oracle/operations.py @@ -7,6 +7,7 @@ support for an internal JVM, and Java libraries are required to use the WKT constructors. """ + import re from django.contrib.gis.db import models diff --git a/django/contrib/gis/db/backends/postgis/adapter.py b/django/contrib/gis/db/backends/postgis/adapter.py index c95f903253..c9715e1756 100644 --- a/django/contrib/gis/db/backends/postgis/adapter.py +++ b/django/contrib/gis/db/backends/postgis/adapter.py @@ -1,6 +1,7 @@ """ This object provides quoting for GEOS geometries into PostgreSQL/PostGIS. """ + from django.contrib.gis.db.backends.postgis.pgraster import to_pgraster from django.contrib.gis.geos import GEOSGeometry from django.db.backends.postgresql.psycopg_any import sql diff --git a/django/contrib/gis/db/backends/postgis/const.py b/django/contrib/gis/db/backends/postgis/const.py index 2f4393d25e..8bc16a1abb 100644 --- a/django/contrib/gis/db/backends/postgis/const.py +++ b/django/contrib/gis/db/backends/postgis/const.py @@ -1,6 +1,7 @@ """ PostGIS to GDAL conversion constant definitions """ + # Lookup to convert pixel type values from GDAL to PostGIS GDAL_TO_POSTGIS = [None, 4, 6, 5, 8, 7, 10, 11, None, None, None, None] diff --git a/django/contrib/gis/db/backends/postgis/models.py b/django/contrib/gis/db/backends/postgis/models.py index b7b568274a..e35ef75ce9 100644 --- a/django/contrib/gis/db/backends/postgis/models.py +++ b/django/contrib/gis/db/backends/postgis/models.py @@ -1,6 +1,7 @@ """ The GeometryColumns and SpatialRefSys models for the PostGIS backend. """ + from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models diff --git a/django/contrib/gis/db/backends/spatialite/models.py b/django/contrib/gis/db/backends/spatialite/models.py index 7cc98ae126..0f5f7b55ef 100644 --- a/django/contrib/gis/db/backends/spatialite/models.py +++ b/django/contrib/gis/db/backends/spatialite/models.py @@ -1,6 +1,7 @@ """ The GeometryColumns and SpatialRefSys models for the SpatiaLite backend. """ + from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models diff --git a/django/contrib/gis/db/backends/spatialite/operations.py b/django/contrib/gis/db/backends/spatialite/operations.py index 8a3d84b5de..3d10a53641 100644 --- a/django/contrib/gis/db/backends/spatialite/operations.py +++ b/django/contrib/gis/db/backends/spatialite/operations.py @@ -2,6 +2,7 @@ SQL functions reference lists: https://www.gaia-gis.it/gaia-sins/spatialite-sql-4.3.0.html """ + from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.spatialite.adapter import SpatiaLiteAdapter diff --git a/django/contrib/gis/db/models/functions.py b/django/contrib/gis/db/models/functions.py index 419b64c5e8..acbaa5ffc0 100644 --- a/django/contrib/gis/db/models/functions.py +++ b/django/contrib/gis/db/models/functions.py @@ -127,9 +127,11 @@ class SQLiteDecimalToFloatMixin: copy = self.copy() copy.set_source_expressions( [ - Value(float(expr.value)) - if hasattr(expr, "value") and isinstance(expr.value, Decimal) - else expr + ( + Value(float(expr.value)) + if hasattr(expr, "value") and isinstance(expr.value, Decimal) + else expr + ) for expr in copy.get_source_expressions() ] ) @@ -349,9 +351,9 @@ class Distance(DistanceResultMixin, OracleToleranceMixin, GeoFunc): def as_sqlite(self, compiler, connection, **extra_context): if self.geo_field.geodetic(connection): # SpatiaLite returns NULL instead of zero on geodetic coordinates - extra_context[ - "template" - ] = "COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)" + extra_context["template"] = ( + "COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)" + ) extra_context["spheroid"] = int(bool(self.spheroid)) return super().as_sql(compiler, connection, **extra_context) diff --git a/django/contrib/gis/db/models/proxy.py b/django/contrib/gis/db/models/proxy.py index 4db365dc16..b415e147fc 100644 --- a/django/contrib/gis/db/models/proxy.py +++ b/django/contrib/gis/db/models/proxy.py @@ -5,6 +5,7 @@ objects corresponding to geographic model fields. Thanks to Robert Coup for providing this functionality (see #4322). """ + from django.db.models.query_utils import DeferredAttribute diff --git a/django/contrib/gis/db/models/sql/conversion.py b/django/contrib/gis/db/models/sql/conversion.py index be712319fb..7802b2dd1e 100644 --- a/django/contrib/gis/db/models/sql/conversion.py +++ b/django/contrib/gis/db/models/sql/conversion.py @@ -2,6 +2,7 @@ This module holds simple classes to convert geospatial values from the database. """ + from decimal import Decimal from django.contrib.gis.measure import Area, Distance diff --git a/django/contrib/gis/gdal/__init__.py b/django/contrib/gis/gdal/__init__.py index 9ed6e31156..e63808d39d 100644 --- a/django/contrib/gis/gdal/__init__.py +++ b/django/contrib/gis/gdal/__init__.py @@ -25,6 +25,7 @@ by setting `GDAL_LIBRARY_PATH` in your settings with the path to the GDAL C library on your system. """ + from django.contrib.gis.gdal.datasource import DataSource from django.contrib.gis.gdal.driver import Driver from django.contrib.gis.gdal.envelope import Envelope diff --git a/django/contrib/gis/gdal/datasource.py b/django/contrib/gis/gdal/datasource.py index 8900777117..2ce859ad13 100644 --- a/django/contrib/gis/gdal/datasource.py +++ b/django/contrib/gis/gdal/datasource.py @@ -33,6 +33,7 @@ # OFTReal returns floats, all else returns string. val = field.value """ + from pathlib import Path from django.contrib.gis.gdal.base import GDALBase diff --git a/django/contrib/gis/gdal/envelope.py b/django/contrib/gis/gdal/envelope.py index 4c2c1e4a1a..05832bd7cc 100644 --- a/django/contrib/gis/gdal/envelope.py +++ b/django/contrib/gis/gdal/envelope.py @@ -10,6 +10,7 @@ | | Lower left (min_x, min_y) o----------+ """ + from ctypes import Structure, c_double from django.contrib.gis.gdal.error import GDALException diff --git a/django/contrib/gis/gdal/geometries.py b/django/contrib/gis/gdal/geometries.py index f4ba5816a2..4c1f74d4b0 100644 --- a/django/contrib/gis/gdal/geometries.py +++ b/django/contrib/gis/gdal/geometries.py @@ -38,6 +38,7 @@ >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects True True """ + import sys import warnings from binascii import b2a_hex diff --git a/django/contrib/gis/gdal/prototypes/ds.py b/django/contrib/gis/gdal/prototypes/ds.py index e3ef2699e9..71148f1b55 100644 --- a/django/contrib/gis/gdal/prototypes/ds.py +++ b/django/contrib/gis/gdal/prototypes/ds.py @@ -3,6 +3,7 @@ related data structures. OGR_Dr_*, OGR_DS_*, OGR_L_*, OGR_F_*, OGR_Fld_* routines are relevant here. """ + from ctypes import POINTER, c_char_p, c_double, c_int, c_long, c_uint, c_void_p from django.contrib.gis.gdal.envelope import OGREnvelope diff --git a/django/contrib/gis/gdal/prototypes/errcheck.py b/django/contrib/gis/gdal/prototypes/errcheck.py index 52bb7cb083..d37e81cdf6 100644 --- a/django/contrib/gis/gdal/prototypes/errcheck.py +++ b/django/contrib/gis/gdal/prototypes/errcheck.py @@ -2,6 +2,7 @@ This module houses the error-checking routines used by the GDAL ctypes prototypes. """ + from ctypes import c_void_p, string_at from django.contrib.gis.gdal.error import GDALException, SRSException, check_err diff --git a/django/contrib/gis/gdal/prototypes/generation.py b/django/contrib/gis/gdal/prototypes/generation.py index 230e56f665..4d34a96e70 100644 --- a/django/contrib/gis/gdal/prototypes/generation.py +++ b/django/contrib/gis/gdal/prototypes/generation.py @@ -2,6 +2,7 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ + from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_int64, c_void_p from functools import partial diff --git a/django/contrib/gis/gdal/prototypes/raster.py b/django/contrib/gis/gdal/prototypes/raster.py index 17ee4a1926..d1dd9ec4e2 100644 --- a/django/contrib/gis/gdal/prototypes/raster.py +++ b/django/contrib/gis/gdal/prototypes/raster.py @@ -2,6 +2,7 @@ This module houses the ctypes function prototypes for GDAL DataSource (raster) related data structures. """ + from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_void_p from functools import partial diff --git a/django/contrib/gis/gdal/raster/const.py b/django/contrib/gis/gdal/raster/const.py index dccc9cfab4..a1ab62f37a 100644 --- a/django/contrib/gis/gdal/raster/const.py +++ b/django/contrib/gis/gdal/raster/const.py @@ -1,6 +1,7 @@ """ GDAL - Constant definitions """ + from ctypes import ( c_double, c_float, diff --git a/django/contrib/gis/gdal/srs.py b/django/contrib/gis/gdal/srs.py index 9417c6684d..0a8d95c1fc 100644 --- a/django/contrib/gis/gdal/srs.py +++ b/django/contrib/gis/gdal/srs.py @@ -26,6 +26,7 @@ >>> print(srs.name) NAD83 / Texas South Central """ + from ctypes import byref, c_char_p, c_int from enum import IntEnum from types import NoneType diff --git a/django/contrib/gis/geos/__init__.py b/django/contrib/gis/geos/__init__.py index 27de1ca8e6..f50cd19856 100644 --- a/django/contrib/gis/geos/__init__.py +++ b/django/contrib/gis/geos/__init__.py @@ -2,6 +2,7 @@ The GeoDjango GEOS module. Please consult the GeoDjango documentation for more details: https://docs.djangoproject.com/en/dev/ref/contrib/gis/geos/ """ + from .collections import ( # NOQA GeometryCollection, MultiLineString, diff --git a/django/contrib/gis/geos/collections.py b/django/contrib/gis/geos/collections.py index abfec8af3d..35262a5622 100644 --- a/django/contrib/gis/geos/collections.py +++ b/django/contrib/gis/geos/collections.py @@ -2,6 +2,7 @@ This module houses the Geometry Collection objects: GeometryCollection, MultiPoint, MultiLineString, and MultiPolygon """ + from django.contrib.gis.geos import prototypes as capi from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin from django.contrib.gis.geos.libgeos import GEOM_PTR diff --git a/django/contrib/gis/geos/coordseq.py b/django/contrib/gis/geos/coordseq.py index 0ff4ecb2e5..15400e08fe 100644 --- a/django/contrib/gis/geos/coordseq.py +++ b/django/contrib/gis/geos/coordseq.py @@ -3,6 +3,7 @@ by GEOSGeometry to house the actual coordinates of the Point, LineString, and LinearRing geometries. """ + from ctypes import byref, c_byte, c_double, c_uint from django.contrib.gis.geos import prototypes as capi diff --git a/django/contrib/gis/geos/geometry.py b/django/contrib/gis/geos/geometry.py index 00b36af0a6..8bbe2c264a 100644 --- a/django/contrib/gis/geos/geometry.py +++ b/django/contrib/gis/geos/geometry.py @@ -2,6 +2,7 @@ This module contains the 'base' GEOSGeometry object -- all GEOS Geometries inherit from this object. """ + import re from ctypes import addressof, byref, c_double diff --git a/django/contrib/gis/geos/io.py b/django/contrib/gis/geos/io.py index d7898065f0..8dd3f289e6 100644 --- a/django/contrib/gis/geos/io.py +++ b/django/contrib/gis/geos/io.py @@ -3,6 +3,7 @@ Module that holds classes for performing I/O operations on GEOS geometry objects. Specifically, this has Python implementations of WKB/WKT reader and writer classes. """ + from django.contrib.gis.geos.geometry import GEOSGeometry from django.contrib.gis.geos.prototypes.io import ( WKBWriter, diff --git a/django/contrib/gis/geos/libgeos.py b/django/contrib/gis/geos/libgeos.py index 1121b4f715..b883c6c090 100644 --- a/django/contrib/gis/geos/libgeos.py +++ b/django/contrib/gis/geos/libgeos.py @@ -6,6 +6,7 @@ This module also houses GEOS Pointer utilities, including get_pointer_arr(), and GEOM_PTR. """ + import logging import os from ctypes import CDLL, CFUNCTYPE, POINTER, Structure, c_char_p diff --git a/django/contrib/gis/geos/prototypes/errcheck.py b/django/contrib/gis/geos/prototypes/errcheck.py index a527f513a7..42b24c2891 100644 --- a/django/contrib/gis/geos/prototypes/errcheck.py +++ b/django/contrib/gis/geos/prototypes/errcheck.py @@ -1,6 +1,7 @@ """ Error checking functions for GEOS ctypes prototype functions. """ + from ctypes import c_void_p, string_at from django.contrib.gis.geos.error import GEOSException diff --git a/django/contrib/gis/geos/prototypes/misc.py b/django/contrib/gis/geos/prototypes/misc.py index fccd0ecc9e..bd5859e79b 100644 --- a/django/contrib/gis/geos/prototypes/misc.py +++ b/django/contrib/gis/geos/prototypes/misc.py @@ -2,6 +2,7 @@ This module is for the miscellaneous GEOS routines, particularly the ones that return the area, distance, and length. """ + from ctypes import POINTER, c_double, c_int from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/geos/prototypes/predicates.py b/django/contrib/gis/geos/prototypes/predicates.py index 32b790173a..dd07cbfb26 100644 --- a/django/contrib/gis/geos/prototypes/predicates.py +++ b/django/contrib/gis/geos/prototypes/predicates.py @@ -2,6 +2,7 @@ This module houses the GEOS ctypes prototype functions for the unary and binary predicate operations on geometries. """ + from ctypes import c_byte, c_char_p, c_double from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/geos/prototypes/topology.py b/django/contrib/gis/geos/prototypes/topology.py index e61eae964a..9323bb2d16 100644 --- a/django/contrib/gis/geos/prototypes/topology.py +++ b/django/contrib/gis/geos/prototypes/topology.py @@ -2,6 +2,7 @@ This module houses the GEOS ctypes prototype functions for the topological operations on geometries. """ + from ctypes import c_double, c_int from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/utils/__init__.py b/django/contrib/gis/utils/__init__.py index 12f032c665..f42fa90226 100644 --- a/django/contrib/gis/utils/__init__.py +++ b/django/contrib/gis/utils/__init__.py @@ -1,6 +1,7 @@ """ This module contains useful utilities for GeoDjango. """ + from django.contrib.gis.utils.ogrinfo import ogrinfo from django.contrib.gis.utils.ogrinspect import mapping, ogrinspect from django.contrib.gis.utils.srs import add_srs_entry diff --git a/django/contrib/gis/utils/ogrinspect.py b/django/contrib/gis/utils/ogrinspect.py index 40ca0cb461..76c8bfbcfa 100644 --- a/django/contrib/gis/utils/ogrinspect.py +++ b/django/contrib/gis/utils/ogrinspect.py @@ -3,6 +3,7 @@ This module is for inspecting OGR data sources and generating either models for GeoDjango and/or mapping dictionaries for use with the `LayerMapping` utility. """ + from django.contrib.gis.gdal import DataSource from django.contrib.gis.gdal.field import ( OFTDate, diff --git a/django/contrib/postgres/search.py b/django/contrib/postgres/search.py index 936709c2f8..4d279857c6 100644 --- a/django/contrib/postgres/search.py +++ b/django/contrib/postgres/search.py @@ -116,9 +116,11 @@ class SearchVector(SearchVectorCombinable, Func): clone.set_source_expressions( [ Coalesce( - expression - if isinstance(expression.output_field, (CharField, TextField)) - else Cast(expression, TextField()), + ( + expression + if isinstance(expression.output_field, (CharField, TextField)) + else Cast(expression, TextField()) + ), Value(""), ) for expression in clone.get_source_expressions() diff --git a/django/contrib/sessions/base_session.py b/django/contrib/sessions/base_session.py index 603d2fe12c..8809dd36f7 100644 --- a/django/contrib/sessions/base_session.py +++ b/django/contrib/sessions/base_session.py @@ -2,6 +2,7 @@ This module allows importing AbstractBaseSession even when django.contrib.sessions is not in INSTALLED_APPS. """ + from django.db import models from django.utils.translation import gettext_lazy as _ diff --git a/django/contrib/staticfiles/views.py b/django/contrib/staticfiles/views.py index 83d04d4cec..3fb2677322 100644 --- a/django/contrib/staticfiles/views.py +++ b/django/contrib/staticfiles/views.py @@ -3,6 +3,7 @@ Views and functions for serving static files. These are only to be used during development, and SHOULD NOT be used in a production setting. """ + import os import posixpath diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py index eb7fa5b2e9..444d958e68 100644 --- a/django/core/cache/__init__.py +++ b/django/core/cache/__init__.py @@ -12,6 +12,7 @@ object. See docs/topics/cache.txt for information on the public API. """ + from django.core import signals from django.core.cache.backends.base import ( BaseCache, diff --git a/django/core/exceptions.py b/django/core/exceptions.py index 2a2288ff4d..31c18ee7e1 100644 --- a/django/core/exceptions.py +++ b/django/core/exceptions.py @@ -1,6 +1,7 @@ """ Global Django exception and warning classes. """ + import operator from django.utils.hashable import make_hashable diff --git a/django/core/files/images.py b/django/core/files/images.py index 6a603f24fc..7c1532ac8f 100644 --- a/django/core/files/images.py +++ b/django/core/files/images.py @@ -3,6 +3,7 @@ Utility functions for handling images. Requires Pillow as you might imagine. """ + import struct import zlib diff --git a/django/core/files/locks.py b/django/core/files/locks.py index c0f471f87d..a7a7a22dce 100644 --- a/django/core/files/locks.py +++ b/django/core/files/locks.py @@ -16,6 +16,7 @@ Example Usage:: ... locks.lock(f, locks.LOCK_EX) ... f.write('Django') """ + import os __all__ = ("LOCK_EX", "LOCK_SH", "LOCK_NB", "lock", "unlock") diff --git a/django/core/files/uploadhandler.py b/django/core/files/uploadhandler.py index b6c185e8fc..ab86f7fede 100644 --- a/django/core/files/uploadhandler.py +++ b/django/core/files/uploadhandler.py @@ -1,6 +1,7 @@ """ Base file upload handler classes, and the built-in concrete subclasses """ + import os from io import BytesIO diff --git a/django/core/mail/__init__.py b/django/core/mail/__init__.py index dc63e8702c..676326697b 100644 --- a/django/core/mail/__init__.py +++ b/django/core/mail/__init__.py @@ -1,6 +1,7 @@ """ Tools for sending email. """ + from django.conf import settings # Imported for backwards compatibility and for the sake diff --git a/django/core/mail/backends/console.py b/django/core/mail/backends/console.py index ee5dd28504..2d7c778cc1 100644 --- a/django/core/mail/backends/console.py +++ b/django/core/mail/backends/console.py @@ -1,6 +1,7 @@ """ Email backend that writes messages to console instead of sending them. """ + import sys import threading diff --git a/django/core/mail/backends/locmem.py b/django/core/mail/backends/locmem.py index 344350e891..f5473da952 100644 --- a/django/core/mail/backends/locmem.py +++ b/django/core/mail/backends/locmem.py @@ -1,6 +1,7 @@ """ Backend for test environment. """ + import copy from django.core import mail diff --git a/django/core/mail/backends/smtp.py b/django/core/mail/backends/smtp.py index 1ee48269ae..6820148ac1 100644 --- a/django/core/mail/backends/smtp.py +++ b/django/core/mail/backends/smtp.py @@ -1,4 +1,5 @@ """SMTP email backend class.""" + import smtplib import ssl import threading diff --git a/django/core/management/base.py b/django/core/management/base.py index 631c761c00..4c47e1c6e5 100644 --- a/django/core/management/base.py +++ b/django/core/management/base.py @@ -2,6 +2,7 @@ Base classes for writing management commands (named commands which can be executed through ``django-admin`` or ``manage.py``). """ + import argparse import os import sys @@ -528,9 +529,11 @@ class BaseCommand: if issues: visible_issue_count += len(issues) formatted = ( - self.style.ERROR(str(e)) - if e.is_serious() - else self.style.WARNING(str(e)) + ( + self.style.ERROR(str(e)) + if e.is_serious() + else self.style.WARNING(str(e)) + ) for e in issues ) formatted = "\n".join(sorted(formatted)) @@ -543,11 +546,15 @@ class BaseCommand: if visible_issue_count: footer += "\n" footer += "System check identified %s (%s silenced)." % ( - "no issues" - if visible_issue_count == 0 - else "1 issue" - if visible_issue_count == 1 - else "%s issues" % visible_issue_count, + ( + "no issues" + if visible_issue_count == 0 + else ( + "1 issue" + if visible_issue_count == 1 + else "%s issues" % visible_issue_count + ) + ), len(all_issues) - visible_issue_count, ) diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py index 20dffac05f..1fbca9244b 100644 --- a/django/core/serializers/base.py +++ b/django/core/serializers/base.py @@ -1,6 +1,7 @@ """ Module for abstract serializer/unserializer base classes. """ + from io import StringIO from django.core.exceptions import ObjectDoesNotExist diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py index 3f9955aa23..16b69770f6 100644 --- a/django/core/serializers/xml_serializer.py +++ b/django/core/serializers/xml_serializer.py @@ -1,6 +1,7 @@ """ XML serializer. """ + import json from xml.dom import pulldom from xml.sax import handler diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index f01abf46b0..242083b850 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -724,9 +724,9 @@ class BaseDatabaseSchemaEditor: namespace, _ = split_identifier(model._meta.db_table) definition += " " + self.sql_create_column_inline_fk % { "name": self._fk_constraint_name(model, field, constraint_suffix), - "namespace": "%s." % self.quote_name(namespace) - if namespace - else "", + "namespace": ( + "%s." % self.quote_name(namespace) if namespace else "" + ), "column": self.quote_name(field.column), "to_table": self.quote_name(to_table), "to_column": self.quote_name(to_column), @@ -1919,11 +1919,13 @@ class BaseDatabaseSchemaEditor: """Return all constraint names matching the columns and conditions.""" if column_names is not None: column_names = [ - self.connection.introspection.identifier_converter( - truncate_name(name, self.connection.ops.max_name_length()) + ( + self.connection.introspection.identifier_converter( + truncate_name(name, self.connection.ops.max_name_length()) + ) + if self.connection.features.truncates_names + else self.connection.introspection.identifier_converter(name) ) - if self.connection.features.truncates_names - else self.connection.introspection.identifier_converter(name) for name in column_names ] with self.connection.cursor() as cursor: diff --git a/django/db/backends/ddl_references.py b/django/db/backends/ddl_references.py index 412d07a993..75787ef8ab 100644 --- a/django/db/backends/ddl_references.py +++ b/django/db/backends/ddl_references.py @@ -2,6 +2,7 @@ Helpers to manipulate deferred DDL statements that might need to be adjusted or discarded within when executing a migration. """ + from copy import deepcopy diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index f36139881d..b8d2d09c94 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -3,6 +3,7 @@ MySQL database backend for Django. Requires mysqlclient: https://pypi.org/project/mysqlclient/ """ + from django.core.exceptions import ImproperlyConfigured from django.db import IntegrityError from django.db.backends import utils as backend_utils diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 2d91468d25..f626c4d2d4 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -3,6 +3,7 @@ Oracle database backend for Django. Requires oracledb: https://oracle.github.io/python-oracledb/ """ + import datetime import decimal import os diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py index df773bff8c..b0a5177728 100644 --- a/django/db/backends/oracle/creation.py +++ b/django/db/backends/oracle/creation.py @@ -133,20 +133,20 @@ class DatabaseCreation(BaseDatabaseCreation): credentials in the SAVED_USER/SAVED_PASSWORD key in the settings dict. """ real_settings = settings.DATABASES[self.connection.alias] - real_settings["SAVED_USER"] = self.connection.settings_dict[ - "SAVED_USER" - ] = self.connection.settings_dict["USER"] + real_settings["SAVED_USER"] = self.connection.settings_dict["SAVED_USER"] = ( + self.connection.settings_dict["USER"] + ) real_settings["SAVED_PASSWORD"] = self.connection.settings_dict[ "SAVED_PASSWORD" ] = self.connection.settings_dict["PASSWORD"] real_test_settings = real_settings["TEST"] test_settings = self.connection.settings_dict["TEST"] - real_test_settings["USER"] = real_settings["USER"] = test_settings[ - "USER" - ] = self.connection.settings_dict["USER"] = parameters["user"] - real_settings["PASSWORD"] = self.connection.settings_dict[ - "PASSWORD" - ] = parameters["password"] + real_test_settings["USER"] = real_settings["USER"] = test_settings["USER"] = ( + self.connection.settings_dict["USER"] + ) = parameters["user"] + real_settings["PASSWORD"] = self.connection.settings_dict["PASSWORD"] = ( + parameters["password"] + ) def set_as_test_mirror(self, primary_settings_dict): """ diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index cba89e0cc7..8349d8f310 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -226,9 +226,11 @@ class DatabaseWrapper(BaseDatabaseWrapper): server_side_binding = conn_params.pop("server_side_binding", None) conn_params.setdefault( "cursor_factory", - ServerBindingCursor - if is_psycopg3 and server_side_binding is True - else Cursor, + ( + ServerBindingCursor + if is_psycopg3 and server_side_binding is True + else Cursor + ), ) if settings_dict["USER"]: conn_params["user"] = settings_dict["USER"] diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py index 5dc93a27d0..842830be30 100644 --- a/django/db/backends/postgresql/schema.py +++ b/django/db/backends/postgresql/schema.py @@ -267,9 +267,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): % { "column": self.quote_name(new_field.column), "type": new_type, - "collation": " " + self._collate_sql(new_collation) - if new_collation - else "", + "collation": ( + " " + self._collate_sql(new_collation) if new_collation else "" + ), }, [], ) diff --git a/django/db/backends/sqlite3/_functions.py b/django/db/backends/sqlite3/_functions.py index 7e86950f7d..0171b60f38 100644 --- a/django/db/backends/sqlite3/_functions.py +++ b/django/db/backends/sqlite3/_functions.py @@ -1,6 +1,7 @@ """ Implementations of SQL functions for SQLite. """ + import functools import random import statistics diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 08de0bad5a..10a296c992 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -1,6 +1,7 @@ """ SQLite backend for the sqlite3 module in the standard library. """ + import datetime import decimal import warnings diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index 6b01403d18..f000d9fcaa 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -620,11 +620,12 @@ class MigrationAutodetector: rem_model_state.app_label, rem_model_state.name_lower, ) - self.renamed_models_rel[ - renamed_models_rel_key - ] = "%s.%s" % ( - model_state.app_label, - model_state.name_lower, + self.renamed_models_rel[renamed_models_rel_key] = ( + "%s.%s" + % ( + model_state.app_label, + model_state.name_lower, + ) ) self.old_model_keys.remove((rem_app_label, rem_model_name)) self.old_model_keys.add((app_label, model_name)) @@ -1058,9 +1059,9 @@ class MigrationAutodetector: (rem_app_label, rem_model_name, rem_field_name) ) old_field_keys.add((app_label, model_name, field_name)) - self.renamed_fields[ - app_label, model_name, field_name - ] = rem_field_name + self.renamed_fields[app_label, model_name, field_name] = ( + rem_field_name + ) break def generate_renamed_fields(self): diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index 81dcd06e04..50445f3101 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -131,11 +131,11 @@ class MigrationLoader: "Migration %s in app %s has no Migration class" % (migration_name, app_config.label) ) - self.disk_migrations[ - app_config.label, migration_name - ] = migration_module.Migration( - migration_name, - app_config.label, + self.disk_migrations[app_config.label, migration_name] = ( + migration_module.Migration( + migration_name, + app_config.label, + ) ) def get_migration(self, app_label, name_prefix): diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index b24a8f6557..38c68f3ff3 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -56,11 +56,11 @@ class CreateModel(ModelOperation): _check_for_duplicates( "bases", ( - base._meta.label_lower - if hasattr(base, "_meta") - else base.lower() - if isinstance(base, str) - else base + ( + base._meta.label_lower + if hasattr(base, "_meta") + else base.lower() if isinstance(base, str) else base + ) for base in self.bases ), ) diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index 5ffd7fc07a..42a2c80a5e 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -524,11 +524,11 @@ class ProjectState: if model_state.options.get("proxy"): proxy_models[model_key] = model_state # Find a concrete model for the proxy. - concrete_models_mapping[ - model_key - ] = self._find_concrete_model_from_proxy( - proxy_models, - model_state, + concrete_models_mapping[model_key] = ( + self._find_concrete_model_from_proxy( + proxy_models, + model_state, + ) ) else: concrete_models_mapping[model_key] = model_key diff --git a/django/db/models/aggregates.py b/django/db/models/aggregates.py index a778cd413b..0cbffacd1b 100644 --- a/django/db/models/aggregates.py +++ b/django/db/models/aggregates.py @@ -1,6 +1,7 @@ """ Classes to represent the definitions of aggregate functions. """ + from django.core.exceptions import FieldError, FullResultSet from django.db.models.expressions import Case, Func, Star, Value, When from django.db.models.fields import IntegerField diff --git a/django/db/models/base.py b/django/db/models/base.py index 61925f63ea..c1f78d0632 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -2265,9 +2265,11 @@ class Model(AltersData, metaclass=ModelBase): opts = cls._meta valid_fields = set( chain.from_iterable( - (f.name, f.attname) - if not (f.auto_created and not f.concrete) - else (f.field.related_query_name(),) + ( + (f.name, f.attname) + if not (f.auto_created and not f.concrete) + else (f.field.related_query_name(),) + ) for f in chain(opts.fields, opts.related_objects) ) ) diff --git a/django/db/models/constants.py b/django/db/models/constants.py index a0c99c95fc..cec1b9b90f 100644 --- a/django/db/models/constants.py +++ b/django/db/models/constants.py @@ -1,6 +1,7 @@ """ Constants used across the ORM in general. """ + from enum import Enum # Separator used to split filter strings apart. diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index f25ad1af12..6d329ae85d 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -204,9 +204,11 @@ class BaseExpression: def _parse_expressions(self, *expressions): return [ - arg - if hasattr(arg, "resolve_expression") - else (F(arg) if isinstance(arg, str) else Value(arg)) + ( + arg + if hasattr(arg, "resolve_expression") + else (F(arg) if isinstance(arg, str) else Value(arg)) + ) for arg in expressions ] @@ -285,9 +287,11 @@ class BaseExpression: c.is_summary = summarize c.set_source_expressions( [ - expr.resolve_expression(query, allow_joins, reuse, summarize) - if expr - else None + ( + expr.resolve_expression(query, allow_joins, reuse, summarize) + if expr + else None + ) for expr in c.get_source_expressions() ] ) @@ -366,22 +370,16 @@ class BaseExpression: field = self.output_field internal_type = field.get_internal_type() if internal_type == "FloatField": - return ( - lambda value, expression, connection: None - if value is None - else float(value) + return lambda value, expression, connection: ( + None if value is None else float(value) ) elif internal_type.endswith("IntegerField"): - return ( - lambda value, expression, connection: None - if value is None - else int(value) + return lambda value, expression, connection: ( + None if value is None else int(value) ) elif internal_type == "DecimalField": - return ( - lambda value, expression, connection: None - if value is None - else Decimal(value) + return lambda value, expression, connection: ( + None if value is None else Decimal(value) ) return self._convert_value_noop @@ -432,9 +430,11 @@ class BaseExpression: clone = self.copy() clone.set_source_expressions( [ - F(f"{prefix}{expr.name}") - if isinstance(expr, F) - else expr.prefix_references(prefix) + ( + F(f"{prefix}{expr.name}") + if isinstance(expr, F) + else expr.prefix_references(prefix) + ) for expr in self.get_source_expressions() ] ) diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py index f5a81ab49c..62ddfc60b3 100644 --- a/django/db/models/fields/related_descriptors.py +++ b/django/db/models/fields/related_descriptors.py @@ -62,6 +62,7 @@ and two directions (forward and reverse) for a total of six combinations. If you're looking for ``ForwardManyToManyDescriptor`` or ``ReverseManyToManyDescriptor``, use ``ManyToManyDescriptor`` instead. """ + import warnings from asgiref.sync import sync_to_async diff --git a/django/db/models/fields/reverse_related.py b/django/db/models/fields/reverse_related.py index c74e92ba89..144cce6142 100644 --- a/django/db/models/fields/reverse_related.py +++ b/django/db/models/fields/reverse_related.py @@ -8,6 +8,7 @@ in the ``remote_field`` attribute of the field. They also act as reverse fields for the purposes of the Meta API because they're the closest concept currently available. """ + import warnings from django.core import exceptions diff --git a/django/db/models/functions/comparison.py b/django/db/models/functions/comparison.py index ae41f1da95..6db81d6f46 100644 --- a/django/db/models/functions/comparison.py +++ b/django/db/models/functions/comparison.py @@ -1,4 +1,5 @@ """Database functions that do comparisons or type conversions.""" + from django.db import NotSupportedError from django.db.models.expressions import Func, Value from django.db.models.fields import TextField diff --git a/django/db/models/functions/datetime.py b/django/db/models/functions/datetime.py index fca211e065..9937e79f6f 100644 --- a/django/db/models/functions/datetime.py +++ b/django/db/models/functions/datetime.py @@ -318,9 +318,11 @@ class TruncBase(TimezoneMixin, Transform): "Cannot truncate DateField '%s' to %s." % ( field.name, - output_field.__class__.__name__ - if has_explicit_output_field - else "DateTimeField", + ( + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField" + ), ) ) elif isinstance(field, TimeField) and ( @@ -331,9 +333,11 @@ class TruncBase(TimezoneMixin, Transform): "Cannot truncate TimeField '%s' to %s." % ( field.name, - output_field.__class__.__name__ - if has_explicit_output_field - else "DateTimeField", + ( + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField" + ), ) ) return copy diff --git a/django/db/models/functions/math.py b/django/db/models/functions/math.py index 460143ba5a..5fa4654a84 100644 --- a/django/db/models/functions/math.py +++ b/django/db/models/functions/math.py @@ -47,9 +47,11 @@ class ATan2(NumericOutputFieldMixin, Func): clone = self.copy() clone.set_source_expressions( [ - Cast(expression, FloatField()) - if isinstance(expression.output_field, IntegerField) - else expression + ( + Cast(expression, FloatField()) + if isinstance(expression.output_field, IntegerField) + else expression + ) for expression in self.get_source_expressions()[::-1] ] ) diff --git a/django/db/models/functions/mixins.py b/django/db/models/functions/mixins.py index 661eee1c13..0f6f0a2aa8 100644 --- a/django/db/models/functions/mixins.py +++ b/django/db/models/functions/mixins.py @@ -14,9 +14,11 @@ class FixDecimalInputMixin: clone = self.copy() clone.set_source_expressions( [ - Cast(expression, output_field) - if isinstance(expression.output_field, FloatField) - else expression + ( + Cast(expression, output_field) + if isinstance(expression.output_field, FloatField) + else expression + ) for expression in self.get_source_expressions() ] ) diff --git a/django/db/models/functions/text.py b/django/db/models/functions/text.py index 392061880c..df826ffdb5 100644 --- a/django/db/models/functions/text.py +++ b/django/db/models/functions/text.py @@ -89,9 +89,11 @@ class ConcatPair(Func): c = self.copy() c.set_source_expressions( [ - expression - if isinstance(expression.output_field, (CharField, TextField)) - else Cast(expression, TextField()) + ( + expression + if isinstance(expression.output_field, (CharField, TextField)) + else Cast(expression, TextField()) + ) for expression in c.get_source_expressions() ] ) diff --git a/django/db/models/indexes.py b/django/db/models/indexes.py index b5451f9e24..0ddfefec38 100644 --- a/django/db/models/indexes.py +++ b/django/db/models/indexes.py @@ -196,9 +196,11 @@ class Index: "" if not self.fields else " fields=%s" % repr(self.fields), "" if not self.expressions else " expressions=%s" % repr(self.expressions), "" if not self.name else " name=%s" % repr(self.name), - "" - if self.db_tablespace is None - else " db_tablespace=%s" % repr(self.db_tablespace), + ( + "" + if self.db_tablespace is None + else " db_tablespace=%s" % repr(self.db_tablespace) + ), "" if self.condition is None else " condition=%s" % self.condition, "" if not self.include else " include=%s" % repr(self.include), "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py index 4a6e2b3241..139875eed5 100644 --- a/django/db/models/lookups.py +++ b/django/db/models/lookups.py @@ -273,9 +273,11 @@ class FieldGetDbPrepValueMixin: return ( "%s", [ - v - if hasattr(v, "as_sql") - else get_db_prep_value(v, connection, prepared=True) + ( + v + if hasattr(v, "as_sql") + else get_db_prep_value(v, connection, prepared=True) + ) for v in value ], ) diff --git a/django/db/models/query.py b/django/db/models/query.py index 61d4002000..b9e2d1f7e5 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -109,9 +109,11 @@ class ModelIterable(BaseIterable): related_objs, operator.attrgetter( *[ - field.attname - if from_field == "self" - else queryset.model._meta.get_field(from_field).attname + ( + field.attname + if from_field == "self" + else queryset.model._meta.get_field(from_field).attname + ) for from_field in field.from_fields ] ), @@ -1391,9 +1393,7 @@ class QuerySet(AltersData): clone._iterable_class = ( NamedValuesListIterable if named - else FlatValuesListIterable - if flat - else ValuesListIterable + else FlatValuesListIterable if flat else ValuesListIterable ) return clone @@ -1659,9 +1659,11 @@ class QuerySet(AltersData): if names is None: names = set( chain.from_iterable( - (field.name, field.attname) - if hasattr(field, "attname") - else (field.name,) + ( + (field.name, field.attname) + if hasattr(field, "attname") + else (field.name,) + ) for field in self.model._meta.get_fields() ) ) diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 4f3358eb8d..e1041b9653 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -5,6 +5,7 @@ Factored out from django.db.models.query to avoid making the main module very large and/or so that they can be used by other modules without getting into circular import difficulties. """ + import functools import inspect import logging diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 10338259d5..9a0d2eb4e7 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -1224,9 +1224,9 @@ class SQLCompiler: "field": f, "reverse": False, "local_setter": f.set_cached_value, - "remote_setter": f.remote_field.set_cached_value - if f.unique - else lambda x, y: None, + "remote_setter": ( + f.remote_field.set_cached_value if f.unique else lambda x, y: None + ), "from_parent": False, } related_klass_infos.append(klass_info) diff --git a/django/db/models/sql/datastructures.py b/django/db/models/sql/datastructures.py index 5eaa8c25f6..7c0c14a46e 100644 --- a/django/db/models/sql/datastructures.py +++ b/django/db/models/sql/datastructures.py @@ -2,6 +2,7 @@ Useful auxiliary data structures for query construction. Not useful outside the SQL domain. """ + import warnings from django.core.exceptions import FullResultSet diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index ce4fafb1e2..6e8813b5e7 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -6,6 +6,7 @@ themselves do not have to (and could be backed by things other than SQL databases). The abstraction barrier only works one way: this module has to know all about the internals of models in order to get the information it needs. """ + import copy import difflib import functools diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 8423fcb528..0fded5cce3 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -1,6 +1,7 @@ """ Code to manage the creation and SQL rendering of 'where' constraints. """ + import operator from functools import reduce diff --git a/django/forms/models.py b/django/forms/models.py index 6a2608c0b3..cd6986d72a 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -2,6 +2,7 @@ Helper functions for creating Form classes from Django models and database field objects. """ + from itertools import chain from django.core.exceptions import ( @@ -830,9 +831,12 @@ class BaseModelFormSet(BaseFormSet, AltersData): ) # Reduce Model instances to their primary key values row_data = tuple( - d._get_pk_val() if hasattr(d, "_get_pk_val") - # Prevent "unhashable type: list" errors later on. - else tuple(d) if isinstance(d, list) else d + ( + d._get_pk_val() + if hasattr(d, "_get_pk_val") + # Prevent "unhashable type: list" errors later on. + else tuple(d) if isinstance(d, list) else d + ) for d in row_data ) if row_data and None not in row_data: diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 2c734052d5..4fae110d5e 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -101,9 +101,11 @@ class Media: def render_js(self): return [ - path.__html__() - if hasattr(path, "__html__") - else format_html('', self.absolute_path(path)) + ( + path.__html__() + if hasattr(path, "__html__") + else format_html('', self.absolute_path(path)) + ) for path in self._js ] @@ -113,12 +115,14 @@ class Media: media = sorted(self._css) return chain.from_iterable( [ - path.__html__() - if hasattr(path, "__html__") - else format_html( - '', - self.absolute_path(path), - medium, + ( + path.__html__() + if hasattr(path, "__html__") + else format_html( + '', + self.absolute_path(path), + medium, + ) ) for path in self._css[medium] ] diff --git a/django/http/multipartparser.py b/django/http/multipartparser.py index dfd406c35e..58b8546be7 100644 --- a/django/http/multipartparser.py +++ b/django/http/multipartparser.py @@ -4,6 +4,7 @@ Multi-part parsing for file uploads. Exposes one class, ``MultiPartParser``, which feeds chunks of uploaded data to file upload handlers for processing. """ + import base64 import binascii import collections diff --git a/django/http/request.py b/django/http/request.py index fe15a173be..4c27d576ba 100644 --- a/django/http/request.py +++ b/django/http/request.py @@ -170,9 +170,11 @@ class HttpRequest: return "%s%s%s" % ( escape_uri_path(path), "/" if force_append_slash and not path.endswith("/") else "", - ("?" + iri_to_uri(self.META.get("QUERY_STRING", ""))) - if self.META.get("QUERY_STRING", "") - else "", + ( + ("?" + iri_to_uri(self.META.get("QUERY_STRING", ""))) + if self.META.get("QUERY_STRING", "") + else "" + ), ) def get_signed_cookie(self, key, default=RAISE_ERROR, salt="", max_age=None): diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py index 2c0d2cc120..f7943494ba 100644 --- a/django/middleware/csrf.py +++ b/django/middleware/csrf.py @@ -4,6 +4,7 @@ Cross Site Request Forgery Middleware. This module provides a middleware that implements protection against request forgeries from other sites. """ + import logging import string from collections import defaultdict diff --git a/django/shortcuts.py b/django/shortcuts.py index 822e6107ac..b8b5be1f5f 100644 --- a/django/shortcuts.py +++ b/django/shortcuts.py @@ -3,6 +3,7 @@ This module collects helper functions and classes that "span" multiple levels of MVC. In other words, these functions/classes introduce controlled coupling for convenience's sake. """ + from django.http import ( Http404, HttpResponse, diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index 1e1bdbc5c9..a08ce2710d 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -1,4 +1,5 @@ """Default variable filters.""" + import random as random_module import re import types diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 40c2917f56..dd0a6b3579 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -1,4 +1,5 @@ """Default tags used by the template system, available to all templates.""" + import re import sys import warnings diff --git a/django/template/engine.py b/django/template/engine.py index f2215c0e4e..9882d3a16d 100644 --- a/django/template/engine.py +++ b/django/template/engine.py @@ -70,9 +70,11 @@ class Engine: self.__class__.__qualname__, "" if not self.dirs else " dirs=%s" % repr(self.dirs), self.app_dirs, - "" - if not self.context_processors - else " context_processors=%s" % repr(self.context_processors), + ( + "" + if not self.context_processors + else " context_processors=%s" % repr(self.context_processors) + ), self.debug, repr(self.loaders), repr(self.string_if_invalid), diff --git a/django/template/smartif.py b/django/template/smartif.py index 5b15a5a476..0a917c2aaa 100644 --- a/django/template/smartif.py +++ b/django/template/smartif.py @@ -1,6 +1,7 @@ """ Parser and utilities for the smart 'if' tag """ + # Using a simple top down parser, as described here: # http://effbot.org/zone/simple-top-down-parsing.htm. # 'led' = left denotation diff --git a/django/test/html.py b/django/test/html.py index 6da79d6fb2..33d1d4dafb 100644 --- a/django/test/html.py +++ b/django/test/html.py @@ -1,4 +1,5 @@ """Compare two HTML documents.""" + import html from html.parser import HTMLParser diff --git a/django/urls/conf.py b/django/urls/conf.py index 40708028a3..bb61063d77 100644 --- a/django/urls/conf.py +++ b/django/urls/conf.py @@ -1,4 +1,5 @@ """Functions for use in URLsconfs.""" + from functools import partial from importlib import import_module diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py index 89ae18694c..3607c84228 100644 --- a/django/urls/resolvers.py +++ b/django/urls/resolvers.py @@ -5,6 +5,7 @@ URLResolver is the main class here. Its resolve() method takes a URL (as a string) and returns a ResolverMatch object which provides access to all attributes of the resolved URL match. """ + import functools import inspect import re @@ -91,9 +92,11 @@ class ResolverMatch: self.app_names, self.namespaces, self.route, - f", captured_kwargs={self.captured_kwargs!r}" - if self.captured_kwargs - else "", + ( + f", captured_kwargs={self.captured_kwargs!r}" + if self.captured_kwargs + else "" + ), f", extra_kwargs={self.extra_kwargs!r}" if self.extra_kwargs else "", ) ) diff --git a/django/utils/archive.py b/django/utils/archive.py index 71ec2d0015..56f34c0038 100644 --- a/django/utils/archive.py +++ b/django/utils/archive.py @@ -21,6 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ + import os import shutil import stat diff --git a/django/utils/cache.py b/django/utils/cache.py index cf797d0279..3b014fbe51 100644 --- a/django/utils/cache.py +++ b/django/utils/cache.py @@ -14,6 +14,7 @@ cache keys to prevent delivery of wrong content. An example: i18n middleware would need to distinguish caches by the "Accept-language" header. """ + import time from collections import defaultdict from hashlib import md5 diff --git a/django/utils/crypto.py b/django/utils/crypto.py index 1c0e7001c6..5134b854d6 100644 --- a/django/utils/crypto.py +++ b/django/utils/crypto.py @@ -1,6 +1,7 @@ """ Django's standard crypto functions and utilities. """ + import hashlib import hmac import secrets diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index a6c315e4cf..a3274b901c 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -10,6 +10,7 @@ Usage: 7th October 2003 11:39 >>> """ + import calendar from datetime import date, datetime, time from email.utils import format_datetime as format_datetime_rfc5322 diff --git a/django/utils/deconstruct.py b/django/utils/deconstruct.py index f8754c1974..2e5463a651 100644 --- a/django/utils/deconstruct.py +++ b/django/utils/deconstruct.py @@ -42,9 +42,11 @@ def deconstructible(*args, path=None): "#serializing-values" % (name, module_name, get_docs_version()) ) return ( - path - if path and type(obj) is klass - else f"{obj.__class__.__module__}.{name}", + ( + path + if path and type(obj) is klass + else f"{obj.__class__.__module__}.{name}" + ), obj._constructor_args[0], obj._constructor_args[1], ) diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py index 31ca9a2db9..3bd456ca68 100644 --- a/django/utils/feedgenerator.py +++ b/django/utils/feedgenerator.py @@ -21,6 +21,7 @@ Sample usage: For definitions of the different versions of RSS, see: https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss """ + import datetime import email from io import StringIO diff --git a/django/utils/jslex.py b/django/utils/jslex.py index 93a1a2e972..fc46a686c7 100644 --- a/django/utils/jslex.py +++ b/django/utils/jslex.py @@ -1,4 +1,5 @@ """JsLex: a lexer for JavaScript""" + # Originally from https://bitbucket.org/ned/jslex import re diff --git a/django/utils/regex_helper.py b/django/utils/regex_helper.py index 9ee82e1a9b..b71298e399 100644 --- a/django/utils/regex_helper.py +++ b/django/utils/regex_helper.py @@ -5,6 +5,7 @@ Used internally by Django and not intended for external use. This is not, and is not intended to be, a complete reg-exp decompiler. It should be good enough for a large class of URLS, however. """ + import re from django.utils.functional import SimpleLazyObject diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 0b3f78e486..0618f02159 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -1,6 +1,7 @@ """ Internationalization support. """ + from contextlib import ContextDecorator from decimal import ROUND_UP, Decimal diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 872c80b00f..a629528717 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -1,4 +1,5 @@ """Translation helper functions.""" + import functools import gettext as gettext_module import os diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py index 5d5dcbc790..a4c1ebc31e 100644 --- a/django/views/decorators/http.py +++ b/django/views/decorators/http.py @@ -1,6 +1,7 @@ """ Decorators for views based on HTTP headers. """ + import datetime from functools import wraps diff --git a/django/views/static.py b/django/views/static.py index df46c53093..b24f0e30f9 100644 --- a/django/views/static.py +++ b/django/views/static.py @@ -2,6 +2,7 @@ Views and functions for serving static files. These are only to be used during development, and SHOULD NOT be used in a production setting. """ + import mimetypes import posixpath from pathlib import Path diff --git a/docs/_ext/djangodocs.py b/docs/_ext/djangodocs.py index 7d55cb0333..77e24ff0eb 100644 --- a/docs/_ext/djangodocs.py +++ b/docs/_ext/djangodocs.py @@ -1,6 +1,7 @@ """ Sphinx plugins for Django documentation. """ + import json import os import re diff --git a/docs/howto/csrf.txt b/docs/howto/csrf.txt index 07f2e20a1c..d40f4b4cb4 100644 --- a/docs/howto/csrf.txt +++ b/docs/howto/csrf.txt @@ -208,8 +208,7 @@ will require a CSRF token to be inserted you should use the @cache_page(60 * 15) @csrf_protect - def my_view(request): - ... + def my_view(request): ... If you are using class-based views, you can refer to :ref:`Decorating class-based views`. diff --git a/docs/howto/custom-file-storage.txt b/docs/howto/custom-file-storage.txt index b7bd22d9c1..3cc96cce84 100644 --- a/docs/howto/custom-file-storage.txt +++ b/docs/howto/custom-file-storage.txt @@ -14,8 +14,7 @@ You'll need to follow these steps: from django.core.files.storage import Storage - class MyStorage(Storage): - ... + class MyStorage(Storage): ... #. Django must be able to instantiate your storage system without any arguments. This means that any settings should be taken from ``django.conf.settings``:: diff --git a/docs/howto/custom-lookups.txt b/docs/howto/custom-lookups.txt index 61ec9295eb..fc8e928890 100644 --- a/docs/howto/custom-lookups.txt +++ b/docs/howto/custom-lookups.txt @@ -53,8 +53,7 @@ Lookup registration can also be done using a decorator pattern:: @Field.register_lookup - class NotEqualLookup(Lookup): - ... + class NotEqualLookup(Lookup): ... We can now use ``foo__ne`` for any field ``foo``. You will need to ensure that this registration happens before you try to create any querysets using it. You diff --git a/docs/howto/custom-management-commands.txt b/docs/howto/custom-management-commands.txt index 8bdfb1e38b..b472f092e9 100644 --- a/docs/howto/custom-management-commands.txt +++ b/docs/howto/custom-management-commands.txt @@ -146,8 +146,7 @@ decorator on your :meth:`~BaseCommand.handle` method:: ... @no_translations - def handle(self, *args, **options): - ... + def handle(self, *args, **options): ... Since translation deactivation requires access to configured settings, the decorator can't be used for commands that work without configured settings. diff --git a/docs/howto/custom-model-fields.txt b/docs/howto/custom-model-fields.txt index 1e7ac4f0ba..b4a1537896 100644 --- a/docs/howto/custom-model-fields.txt +++ b/docs/howto/custom-model-fields.txt @@ -338,24 +338,20 @@ Changing a custom field's base class You can't change the base class of a custom field because Django won't detect the change and make a migration for it. For example, if you start with:: - class CustomCharField(models.CharField): - ... + class CustomCharField(models.CharField): ... and then decide that you want to use ``TextField`` instead, you can't change the subclass like this:: - class CustomCharField(models.TextField): - ... + class CustomCharField(models.TextField): ... Instead, you must create a new custom field class and update your models to reference it:: - class CustomCharField(models.CharField): - ... + class CustomCharField(models.CharField): ... - class CustomTextField(models.TextField): - ... + class CustomTextField(models.TextField): ... As discussed in :ref:`removing fields `, you must retain the original ``CustomCharField`` class as long as you have diff --git a/docs/howto/custom-template-tags.txt b/docs/howto/custom-template-tags.txt index c7909c8a4b..15bef9b5fb 100644 --- a/docs/howto/custom-template-tags.txt +++ b/docs/howto/custom-template-tags.txt @@ -561,8 +561,7 @@ template loader, we'd register the tag like this:: # Here, register is a django.template.Library instance, as before @register.inclusion_tag("results.html") - def show_results(poll): - ... + def show_results(poll): ... Alternatively it is possible to register the inclusion tag using a :class:`django.template.Template` instance:: @@ -917,13 +916,11 @@ The ``tag()`` method takes two arguments: As with filter registration, it is also possible to use this as a decorator:: @register.tag(name="current_time") - def do_current_time(parser, token): - ... + def do_current_time(parser, token): ... @register.tag - def shout(parser, token): - ... + def shout(parser, token): ... If you leave off the ``name`` argument, as in the second example above, Django will use the function's name as the tag name. diff --git a/docs/howto/error-reporting.txt b/docs/howto/error-reporting.txt index 84fe3cb768..b36f884096 100644 --- a/docs/howto/error-reporting.txt +++ b/docs/howto/error-reporting.txt @@ -177,8 +177,7 @@ filtered out of error reports in a production environment (that is, where do not provide any argument to the ``sensitive_variables`` decorator:: @sensitive_variables() - def my_function(): - ... + def my_function(): ... .. admonition:: When using multiple decorators @@ -191,8 +190,7 @@ filtered out of error reports in a production environment (that is, where @sensitive_variables("user", "pw", "cc") @some_decorator @another_decorator - def process_info(user): - ... + def process_info(user): ... .. versionchanged:: 5.0 @@ -229,8 +227,7 @@ filtered out of error reports in a production environment (that is, where do not provide any argument to the ``sensitive_post_parameters`` decorator:: @sensitive_post_parameters() - def my_view(request): - ... + def my_view(request): ... All POST parameters are systematically filtered out of error reports for certain :mod:`django.contrib.auth.views` views (``login``, diff --git a/docs/internals/contributing/writing-code/coding-style.txt b/docs/internals/contributing/writing-code/coding-style.txt index 6871d43d7b..49b69bf066 100644 --- a/docs/internals/contributing/writing-code/coding-style.txt +++ b/docs/internals/contributing/writing-code/coding-style.txt @@ -201,8 +201,7 @@ Imports CONSTANT = "foo" - class Example: - ... + class Example: ... * Use convenience imports whenever available. For example, do this :: @@ -239,13 +238,11 @@ View style Do this:: - def my_view(request, foo): - ... + def my_view(request, foo): ... Don't do this:: - def my_view(req, foo): - ... + def my_view(req, foo): ... Model style =========== diff --git a/docs/internals/contributing/writing-code/submitting-patches.txt b/docs/internals/contributing/writing-code/submitting-patches.txt index be031f1f68..72c986cfc7 100644 --- a/docs/internals/contributing/writing-code/submitting-patches.txt +++ b/docs/internals/contributing/writing-code/submitting-patches.txt @@ -190,8 +190,7 @@ level: @ignore_warnings(category=RemovedInDjangoXXWarning) - def test_foo(self): - ... + def test_foo(self): ... #) For an entire test case:: @@ -200,8 +199,7 @@ level: @ignore_warnings(category=RemovedInDjangoXXWarning) - class MyDeprecatedTests(unittest.TestCase): - ... + class MyDeprecatedTests(unittest.TestCase): ... You should also add a test for the deprecation warning:: diff --git a/docs/intro/tutorial04.txt b/docs/intro/tutorial04.txt index 13a76188bb..65dc132a94 100644 --- a/docs/intro/tutorial04.txt +++ b/docs/intro/tutorial04.txt @@ -309,7 +309,8 @@ views and use Django's generic views instead. To do so, open the def vote(request, question_id): - ... # same as above, no changes needed. + # same as above, no changes needed. + ... Each generic view needs to know what model it will be acting upon. This is provided using either the ``model`` attribute (in this example, ``model = diff --git a/docs/intro/tutorial07.txt b/docs/intro/tutorial07.txt index 9cdadbe286..8cb5dd5d5a 100644 --- a/docs/intro/tutorial07.txt +++ b/docs/intro/tutorial07.txt @@ -174,8 +174,7 @@ tabular way of displaying inline related objects. To use it, change the .. code-block:: python :caption: ``polls/admin.py`` - class ChoiceInline(admin.TabularInline): - ... + class ChoiceInline(admin.TabularInline): ... With that ``TabularInline`` (instead of ``StackedInline``), the related objects are displayed in a more compact, table-based format: diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt index 23cfa833e0..e85ba9c36a 100644 --- a/docs/ref/contrib/admin/index.txt +++ b/docs/ref/contrib/admin/index.txt @@ -751,8 +751,7 @@ subclass:: like:: @admin.display(ordering="-first_name") - def colored_first_name(self): - ... + def colored_first_name(self): ... The ``ordering`` argument supports query lookups to sort by values on related models. This example includes an "author first name" column in @@ -3128,8 +3127,7 @@ returns a site instance. from django.contrib import admin - class MyAdminSite(admin.AdminSite): - ... + class MyAdminSite(admin.AdminSite): ... .. code-block:: python :caption: ``myproject/apps.py`` @@ -3467,5 +3465,4 @@ The ``staff_member_required`` decorator @staff_member_required - def my_view(request): - ... + def my_view(request): ... diff --git a/docs/ref/contrib/gis/feeds.txt b/docs/ref/contrib/gis/feeds.txt index 9ae9d4f03a..3f17a68574 100644 --- a/docs/ref/contrib/gis/feeds.txt +++ b/docs/ref/contrib/gis/feeds.txt @@ -40,18 +40,14 @@ API Reference item_geometry = ... # Also a function with no arguments - def geometry(self): - ... + def geometry(self): ... - def item_geometry(self): - ... + def item_geometry(self): ... # And as a function with a single argument - def geometry(self, obj): - ... + def geometry(self, obj): ... - def item_geometry(self, item): - ... + def item_geometry(self, item): ... .. method:: geometry(obj) diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt index eee1c66d56..9db029cc60 100644 --- a/docs/ref/settings.txt +++ b/docs/ref/settings.txt @@ -422,8 +422,7 @@ A dotted path to the view function to be used when an incoming request is rejected by the :doc:`CSRF protection `. The function should have this signature:: - def csrf_failure(request, reason=""): - ... + def csrf_failure(request, reason=""): ... where ``reason`` is a short message (intended for developers or logging, not for end users) indicating the reason the request was rejected. It should return diff --git a/docs/ref/utils.txt b/docs/ref/utils.txt index 8ebb4f5116..3e357cba17 100644 --- a/docs/ref/utils.txt +++ b/docs/ref/utils.txt @@ -469,8 +469,7 @@ https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004 class Person(models.Model): @cached_property - def friends(self): - ... + def friends(self): ... Note that as the method is now a property, in Python code it will need to be accessed appropriately:: @@ -552,8 +551,7 @@ https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004 # Or more succinctly: @keep_lazy(str) - def fancy_utility_function(s, *args, **kwargs): - ... + def fancy_utility_function(s, *args, **kwargs): ... The ``keep_lazy()`` decorator takes a number of extra arguments (``*args``) specifying the type(s) that the original function can return. A common @@ -578,14 +576,12 @@ https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004 # Our previous example was: @keep_lazy(str) - def fancy_utility_function(s, *args, **kwargs): - ... + def fancy_utility_function(s, *args, **kwargs): ... # Which can be rewritten as: @keep_lazy_text - def fancy_utility_function(s, *args, **kwargs): - ... + def fancy_utility_function(s, *args, **kwargs): ... ``django.utils.html`` ===================== diff --git a/docs/releases/1.0-porting-guide.txt b/docs/releases/1.0-porting-guide.txt index f0ed8f4169..145334c238 100644 --- a/docs/releases/1.0-porting-guide.txt +++ b/docs/releases/1.0-porting-guide.txt @@ -144,8 +144,7 @@ example: Old (0.96):: - class Parent(models.Model): - ... + class Parent(models.Model): ... class Child(models.Model): diff --git a/docs/releases/1.10.txt b/docs/releases/1.10.txt index b5213ee207..d98fad2c66 100644 --- a/docs/releases/1.10.txt +++ b/docs/releases/1.10.txt @@ -732,8 +732,7 @@ custom lookup for it. For example:: from django.db.models.lookups import Exact - class MyField(Field): - ... + class MyField(Field): ... class MyFieldExact(Exact): diff --git a/docs/releases/1.2.txt b/docs/releases/1.2.txt index de3ed69a70..526bb1d66e 100644 --- a/docs/releases/1.2.txt +++ b/docs/releases/1.2.txt @@ -455,17 +455,13 @@ database-compatible values. A custom field might look something like:: class CustomModelField(models.Field): ... - def db_type(self): - ... + def db_type(self): ... - def get_db_prep_save(self, value): - ... + def get_db_prep_save(self, value): ... - def get_db_prep_value(self, value): - ... + def get_db_prep_value(self, value): ... - def get_db_prep_lookup(self, lookup_type, value): - ... + def get_db_prep_lookup(self, lookup_type, value): ... In 1.2, these three methods have undergone a change in prototype, and two extra methods have been introduced:: @@ -473,23 +469,17 @@ two extra methods have been introduced:: class CustomModelField(models.Field): ... - def db_type(self, connection): - ... + def db_type(self, connection): ... - def get_prep_value(self, value): - ... + def get_prep_value(self, value): ... - def get_prep_lookup(self, lookup_type, value): - ... + def get_prep_lookup(self, lookup_type, value): ... - def get_db_prep_save(self, value, connection): - ... + def get_db_prep_save(self, value, connection): ... - def get_db_prep_value(self, value, connection, prepared=False): - ... + def get_db_prep_value(self, value, connection, prepared=False): ... - def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False): - ... + def get_db_prep_lookup(self, lookup_type, value, connection, prepared=False): ... These changes are required to support multiple databases -- ``db_type`` and ``get_db_prep_*`` can no longer make any assumptions diff --git a/docs/releases/5.0.txt b/docs/releases/5.0.txt index 746eaae836..6b18bace4f 100644 --- a/docs/releases/5.0.txt +++ b/docs/releases/5.0.txt @@ -521,8 +521,7 @@ For example:: Should become:: - class Char32UUIDField(models.UUIDField): - ... + class Char32UUIDField(models.UUIDField): ... class MyModel(models.Model): diff --git a/docs/topics/async.txt b/docs/topics/async.txt index 6c9d35b533..87550ff46d 100644 --- a/docs/topics/async.txt +++ b/docs/topics/async.txt @@ -111,13 +111,11 @@ For example:: @never_cache - def my_sync_view(request): - ... + def my_sync_view(request): ... @never_cache - async def my_async_view(request): - ... + async def my_async_view(request): ... Queries & the ORM ----------------- @@ -294,16 +292,14 @@ as either a direct wrapper or a decorator:: from asgiref.sync import async_to_sync - async def get_data(): - ... + async def get_data(): ... sync_get_data = async_to_sync(get_data) @async_to_sync - async def get_other_data(): - ... + async def get_other_data(): ... The async function is run in the event loop for the current thread, if one is present. If there is no current event loop, a new event loop is spun up @@ -334,8 +330,7 @@ as either a direct wrapper or a decorator:: @sync_to_async - def sync_function(): - ... + def sync_function(): ... Threadlocals and contextvars values are preserved across the boundary in both directions. diff --git a/docs/topics/auth/default.txt b/docs/topics/auth/default.txt index 75d33b5e7e..de2bc51cda 100644 --- a/docs/topics/auth/default.txt +++ b/docs/topics/auth/default.txt @@ -553,8 +553,7 @@ The ``login_required`` decorator @login_required - def my_view(request): - ... + def my_view(request): ... :func:`~django.contrib.auth.decorators.login_required` does the following: @@ -575,8 +574,7 @@ The ``login_required`` decorator @login_required(redirect_field_name="my_redirect_field") - def my_view(request): - ... + def my_view(request): ... Note that if you provide a value to ``redirect_field_name``, you will most likely need to customize your login template as well, since the template @@ -590,8 +588,7 @@ The ``login_required`` decorator @login_required(login_url="/accounts/login/") - def my_view(request): - ... + def my_view(request): ... Note that if you don't specify the ``login_url`` parameter, you'll need to ensure that the :setting:`settings.LOGIN_URL ` and your login @@ -688,8 +685,7 @@ email in the desired domain and if not, redirects to the login page:: @user_passes_test(email_check) - def my_view(request): - ... + def my_view(request): ... :func:`~django.contrib.auth.decorators.user_passes_test` takes a required argument: a callable that takes a @@ -716,8 +712,7 @@ email in the desired domain and if not, redirects to the login page:: For example:: @user_passes_test(email_check, login_url="/login/") - def my_view(request): - ... + def my_view(request): ... .. currentmodule:: django.contrib.auth.mixins @@ -761,8 +756,7 @@ email in the desired domain and if not, redirects to the login page:: return self.request.user.username.startswith("django") - class MyView(TestMixin1, TestMixin2, View): - ... + class MyView(TestMixin1, TestMixin2, View): ... If ``TestMixin1`` would call ``super()`` and take that result into account, ``TestMixin1`` wouldn't work standalone anymore. @@ -782,8 +776,7 @@ The ``permission_required`` decorator @permission_required("polls.add_choice") - def my_view(request): - ... + def my_view(request): ... Just like the :meth:`~django.contrib.auth.models.User.has_perm` method, permission names take the form ``"."`` @@ -800,8 +793,7 @@ The ``permission_required`` decorator @permission_required("polls.add_choice", login_url="/loginpage/") - def my_view(request): - ... + def my_view(request): ... As in the :func:`~django.contrib.auth.decorators.login_required` decorator, ``login_url`` defaults to :setting:`settings.LOGIN_URL `. @@ -820,8 +812,7 @@ The ``permission_required`` decorator @login_required @permission_required("polls.add_choice", raise_exception=True) - def my_view(request): - ... + def my_view(request): ... This also avoids a redirect loop when :class:`.LoginView`'s ``redirect_authenticated_user=True`` and the logged-in user doesn't have diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt index 880f606aae..6625b6946c 100644 --- a/docs/topics/cache.txt +++ b/docs/topics/cache.txt @@ -668,8 +668,7 @@ decorator that will automatically cache the view's response for you:: @cache_page(60 * 15) - def my_view(request): - ... + def my_view(request): ... ``cache_page`` takes a single argument: the cache timeout, in seconds. In the above example, the result of the ``my_view()`` view will be cached for 15 @@ -699,8 +698,7 @@ which directs the decorator to use a specific cache (from your want:: @cache_page(60 * 15, cache="special_cache") - def my_view(request): - ... + def my_view(request): ... You can also override the cache prefix on a per-view basis. ``cache_page`` takes an optional keyword argument, ``key_prefix``, @@ -708,8 +706,7 @@ which works in the same way as the :setting:`CACHE_MIDDLEWARE_KEY_PREFIX` setting for the middleware. It can be used like this:: @cache_page(60 * 15, key_prefix="site1") - def my_view(request): - ... + def my_view(request): ... The ``key_prefix`` and ``cache`` arguments may be specified together. The ``key_prefix`` argument and the :setting:`KEY_PREFIX ` @@ -1342,8 +1339,7 @@ To do this in Django, use the convenient @vary_on_headers("User-Agent") - def my_view(request): - ... + def my_view(request): ... In this case, a caching mechanism (such as Django's own cache middleware) will cache a separate version of the page for each unique user-agent. @@ -1357,8 +1353,7 @@ anything that was already in there. You can pass multiple headers to ``vary_on_headers()``:: @vary_on_headers("User-Agent", "Cookie") - def my_view(request): - ... + def my_view(request): ... This tells downstream caches to vary on *both*, which means each combination of user-agent and cookie will get its own cache value. For example, a request with @@ -1371,13 +1366,11 @@ Because varying on cookie is so common, there's a are equivalent:: @vary_on_cookie - def my_view(request): - ... + def my_view(request): ... @vary_on_headers("Cookie") - def my_view(request): - ... + def my_view(request): ... The headers you pass to ``vary_on_headers`` are not case sensitive; ``"User-Agent"`` is the same thing as ``"user-agent"``. @@ -1423,8 +1416,7 @@ decorator. Example:: @cache_control(private=True) - def my_view(request): - ... + def my_view(request): ... This decorator takes care of sending out the appropriate HTTP header behind the scenes. @@ -1463,8 +1455,7 @@ directive:: @cache_control(max_age=3600) - def my_view(request): - ... + def my_view(request): ... (If you *do* use the caching middleware, it already sets the ``max-age`` with the value of the :setting:`CACHE_MIDDLEWARE_SECONDS` setting. In that case, @@ -1494,8 +1485,7 @@ caches. Example:: @never_cache - def myview(request): - ... + def myview(request): ... Order of ``MIDDLEWARE`` ======================= diff --git a/docs/topics/checks.txt b/docs/topics/checks.txt index 9a91ceb469..3e3bbe19d6 100644 --- a/docs/topics/checks.txt +++ b/docs/topics/checks.txt @@ -113,8 +113,7 @@ You can register "deployment checks" that are only relevant to a production settings file like this:: @register(Tags.security, deploy=True) - def my_check(app_configs, **kwargs): - ... + def my_check(app_configs, **kwargs): ... These checks will only be run if the :option:`check --deploy` option is used. @@ -124,8 +123,7 @@ to ``register``. The code below is equivalent to the code above:: - def my_check(app_configs, **kwargs): - ... + def my_check(app_configs, **kwargs): ... register(my_check, Tags.security, deploy=True) diff --git a/docs/topics/conditional-view-processing.txt b/docs/topics/conditional-view-processing.txt index 2447697de4..dfd36a64ae 100644 --- a/docs/topics/conditional-view-processing.txt +++ b/docs/topics/conditional-view-processing.txt @@ -72,8 +72,7 @@ Suppose you have this pair of models, representing a small blog system:: from django.db import models - class Blog(models.Model): - ... + class Blog(models.Model): ... class Entry(models.Model): @@ -96,8 +95,7 @@ for your front page view:: @condition(last_modified_func=latest_entry) - def front_page(request, blog_id): - ... + def front_page(request, blog_id): ... .. admonition:: Be careful with the order of decorators @@ -131,13 +129,11 @@ We could write the earlier example, which only uses a last-modified function, using one of these decorators:: @last_modified(latest_entry) - def front_page(request, blog_id): - ... + def front_page(request, blog_id): ... ...or:: - def front_page(request, blog_id): - ... + def front_page(request, blog_id): ... front_page = last_modified(latest_entry)(front_page) @@ -154,8 +150,7 @@ this would lead to incorrect behavior. # Bad code. Don't do this! @etag(etag_func) @last_modified(last_modified_func) - def my_view(request): - ... + def my_view(request): ... # End of bad code. diff --git a/docs/topics/db/fixtures.txt b/docs/topics/db/fixtures.txt index 48c5605ff4..ac5b34dae0 100644 --- a/docs/topics/db/fixtures.txt +++ b/docs/topics/db/fixtures.txt @@ -161,8 +161,7 @@ You could also write a decorator to encapsulate this logic:: @disable_for_loaddata - def my_handler(**kwargs): - ... + def my_handler(**kwargs): ... Just be aware that this logic will disable the signals whenever fixtures are deserialized, not just during :djadmin:`loaddata`. diff --git a/docs/topics/db/transactions.txt b/docs/topics/db/transactions.txt index 9146ecc2f7..63a6bc2d66 100644 --- a/docs/topics/db/transactions.txt +++ b/docs/topics/db/transactions.txt @@ -311,8 +311,7 @@ Pass a function, or any callable, to :func:`on_commit`:: from django.db import transaction - def send_welcome_email(): - ... + def send_welcome_email(): ... transaction.on_commit(send_welcome_email) diff --git a/docs/topics/forms/modelforms.txt b/docs/topics/forms/modelforms.txt index 53ce716a4d..e2a37296b7 100644 --- a/docs/topics/forms/modelforms.txt +++ b/docs/topics/forms/modelforms.txt @@ -704,8 +704,7 @@ using the previous ``ArticleForm`` class: .. code-block:: pycon >>> class EnhancedArticleForm(ArticleForm): - ... def clean_pub_date(self): - ... ... + ... def clean_pub_date(self): ... ... This creates a form that behaves identically to ``ArticleForm``, except there's diff --git a/docs/topics/http/file-uploads.txt b/docs/topics/http/file-uploads.txt index 0e696badc0..911c282157 100644 --- a/docs/topics/http/file-uploads.txt +++ b/docs/topics/http/file-uploads.txt @@ -338,7 +338,8 @@ list:: @csrf_protect def _upload_file_view(request): - ... # Process request + # Process request + ... If you are using a class-based view, you will need to use :func:`~django.views.decorators.csrf.csrf_exempt` on its @@ -359,4 +360,5 @@ list:: @method_decorator(csrf_protect) def post(self, request, *args, **kwargs): - ... # Process request + # Process request + ... diff --git a/docs/topics/signals.txt b/docs/topics/signals.txt index a4d973ebb4..6a577dd8ad 100644 --- a/docs/topics/signals.txt +++ b/docs/topics/signals.txt @@ -200,8 +200,7 @@ signals sent by some model:: @receiver(pre_save, sender=MyModel) - def my_handler(sender, **kwargs): - ... + def my_handler(sender, **kwargs): ... The ``my_handler`` function will only be called when an instance of ``MyModel`` is saved. diff --git a/docs/topics/testing/tools.txt b/docs/topics/testing/tools.txt index cd05db2cf8..14a58c4c00 100644 --- a/docs/topics/testing/tools.txt +++ b/docs/topics/testing/tools.txt @@ -1361,8 +1361,7 @@ For example:: class OtherDBTests(TestCase): databases = {"other"} - def test_other_db_query(self): - ... + def test_other_db_query(self): ... This test will only allow queries against the ``other`` database. Just like for :attr:`SimpleTestCase.databases` and :attr:`TransactionTestCase.databases`, the @@ -1981,22 +1980,18 @@ you might label fast or slow tests:: class SampleTestCase(TestCase): @tag("fast") - def test_fast(self): - ... + def test_fast(self): ... @tag("slow") - def test_slow(self): - ... + def test_slow(self): ... @tag("slow", "core") - def test_slow_but_core(self): - ... + def test_slow_but_core(self): ... You can also tag a test case class:: @tag("slow", "core") - class SampleTestCase(TestCase): - ... + class SampleTestCase(TestCase): ... Subclasses inherit tags from superclasses, and methods inherit tags from their class. Given:: @@ -2004,8 +1999,7 @@ class. Given:: @tag("foo") class SampleTestCaseChild(SampleTestCase): @tag("bar") - def test(self): - ... + def test(self): ... ``SampleTestCaseChild.test`` will be labeled with ``'slow'``, ``'core'``, ``'bar'``, and ``'foo'``. @@ -2105,8 +2099,7 @@ creates. class MyTests(TestCase): @mock.patch(...) @async_to_sync - async def test_my_thing(self): - ... + async def test_my_thing(self): ... .. _topics-testing-email: diff --git a/tests/admin_changelist/test_date_hierarchy.py b/tests/admin_changelist/test_date_hierarchy.py index 03afaa33d9..94a6a8eb6c 100644 --- a/tests/admin_changelist/test_date_hierarchy.py +++ b/tests/admin_changelist/test_date_hierarchy.py @@ -90,7 +90,8 @@ class DateHierarchyTests(TestCase): {"year": 2017, "month": 12, "day": 0}, ) for invalid_query in tests: - with self.subTest(query=invalid_query), self.assertRaises( - IncorrectLookupParameters + with ( + self.subTest(query=invalid_query), + self.assertRaises(IncorrectLookupParameters), ): self.assertDateParams(invalid_query, None, None) diff --git a/tests/admin_inlines/models.py b/tests/admin_inlines/models.py index a8d2ee02e1..eca5bae422 100644 --- a/tests/admin_inlines/models.py +++ b/tests/admin_inlines/models.py @@ -1,6 +1,7 @@ """ Testing of admin inline formsets. """ + import random from django.contrib.contenttypes.fields import GenericForeignKey diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 7f39d7fcfc..50e8d4a3b1 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -3,6 +3,7 @@ A series of tests to establish that the command-line management tools work as advertised - especially with regards to the handling of the DJANGO_SETTINGS_MODULE and default settings.py files. """ + import os import re import shutil @@ -757,7 +758,9 @@ class DjangoAdminSettingsDirectory(AdminScriptTestCase): with open(os.path.join(app_path, "apps.py"), encoding="utf8") as f: content = f.read() self.assertIn("class こんにちはConfig(AppConfig)", content) - self.assertIn('name = "こんにちは"' if HAS_BLACK else "name = 'こんにちは'", content) + self.assertIn( + 'name = "こんにちは"' if HAS_BLACK else "name = 'こんにちは'", content + ) def test_builtin_command(self): """ diff --git a/tests/admin_views/custom_has_permission_admin.py b/tests/admin_views/custom_has_permission_admin.py index 6dc2011b24..17b6498aab 100644 --- a/tests/admin_views/custom_has_permission_admin.py +++ b/tests/admin_views/custom_has_permission_admin.py @@ -1,6 +1,7 @@ """ A custom AdminSite for AdminViewPermissionsTest.test_login_has_permission(). """ + from django.contrib import admin from django.contrib.auth import get_permission_codename from django.contrib.auth.forms import AuthenticationForm diff --git a/tests/admin_views/customadmin.py b/tests/admin_views/customadmin.py index e3429ec4bc..4b30c5c30f 100644 --- a/tests/admin_views/customadmin.py +++ b/tests/admin_views/customadmin.py @@ -1,6 +1,7 @@ """ A second, custom AdminSite -- see tests.CustomAdminSiteTests. """ + from django.contrib import admin from django.contrib.auth.admin import UserAdmin from django.contrib.auth.models import User diff --git a/tests/aggregation_regress/tests.py b/tests/aggregation_regress/tests.py index bfb3919b23..9199bf3eba 100644 --- a/tests/aggregation_regress/tests.py +++ b/tests/aggregation_regress/tests.py @@ -1564,8 +1564,9 @@ class AggregationTests(TestCase): "django.db.connection.features.allows_group_by_selected_pks_on_model", return_value=True, ): - with mock.patch.object(Book._meta, "managed", False), mock.patch.object( - Author._meta, "managed", False + with ( + mock.patch.object(Book._meta, "managed", False), + mock.patch.object(Author._meta, "managed", False), ): _, _, grouping = qs.query.get_compiler(using="default").pre_sql_setup() self.assertEqual(len(grouping), 2) diff --git a/tests/auth_tests/models/custom_permissions.py b/tests/auth_tests/models/custom_permissions.py index 52d28bd276..385de4e846 100644 --- a/tests/auth_tests/models/custom_permissions.py +++ b/tests/auth_tests/models/custom_permissions.py @@ -3,6 +3,7 @@ The CustomPermissionsUser users email as the identifier, but uses the normal Django permissions model. This allows us to check that the PermissionsMixin includes everything that is needed to interact with the ModelBackend. """ + from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin from django.db import models diff --git a/tests/auth_tests/test_forms.py b/tests/auth_tests/test_forms.py index 14d71572da..14604cd2e6 100644 --- a/tests/auth_tests/test_forms.py +++ b/tests/auth_tests/test_forms.py @@ -486,8 +486,9 @@ class AuthenticationFormTest(TestDataMixin, TestCase): user_login_failed.disconnect(signal_handler) def test_inactive_user_i18n(self): - with self.settings(USE_I18N=True), translation.override( - "pt-br", deactivate=True + with ( + self.settings(USE_I18N=True), + translation.override("pt-br", deactivate=True), ): # The user is inactive. data = { @@ -906,9 +907,9 @@ class UserChangeFormTest(TestDataMixin, TestCase): class MyUserForm(UserChangeForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields[ - "groups" - ].help_text = "These groups give users different permissions" + self.fields["groups"].help_text = ( + "These groups give users different permissions" + ) class Meta(UserChangeForm.Meta): fields = ("groups",) diff --git a/tests/auth_tests/test_hashers.py b/tests/auth_tests/test_hashers.py index e0b640a998..1b0d2c65be 100644 --- a/tests/auth_tests/test_hashers.py +++ b/tests/auth_tests/test_hashers.py @@ -213,8 +213,9 @@ class TestUtilsHashPass(SimpleTestCase): with mock.patch.object(hasher, "rounds", 4): encoded = make_password("letmein", hasher="bcrypt") - with mock.patch.object(hasher, "rounds", 6), mock.patch.object( - hasher, "encode", side_effect=hasher.encode + with ( + mock.patch.object(hasher, "rounds", 6), + mock.patch.object(hasher, "encode", side_effect=hasher.encode), ): hasher.harden_runtime("wrong_password", encoded) @@ -388,8 +389,9 @@ class TestUtilsHashPass(SimpleTestCase): with mock.patch.object(hasher, "iterations", 1): encoded = make_password("letmein") - with mock.patch.object(hasher, "iterations", 6), mock.patch.object( - hasher, "encode", side_effect=hasher.encode + with ( + mock.patch.object(hasher, "iterations", 6), + mock.patch.object(hasher, "encode", side_effect=hasher.encode), ): hasher.harden_runtime("wrong_password", encoded) @@ -437,8 +439,9 @@ class TestUtilsHashPass(SimpleTestCase): hasher = get_hasher("default") encoded = make_password("letmein") - with mock.patch.object(hasher, "harden_runtime"), mock.patch.object( - hasher, "must_update", return_value=True + with ( + mock.patch.object(hasher, "harden_runtime"), + mock.patch.object(hasher, "must_update", return_value=True), ): # Correct password supplied, no hardening needed check_password("letmein", encoded) diff --git a/tests/auth_tests/test_views.py b/tests/auth_tests/test_views.py index ba0a77a4dc..f4cf6ed2f4 100644 --- a/tests/auth_tests/test_views.py +++ b/tests/auth_tests/test_views.py @@ -818,9 +818,9 @@ class LoginTest(AuthViewsTestCase): # Use POST request to log in SessionMiddleware(get_response).process_request(req) CsrfViewMiddleware(get_response).process_view(req, LoginView.as_view(), (), {}) - req.META[ - "SERVER_NAME" - ] = "testserver" # Required to have redirect work in login view + req.META["SERVER_NAME"] = ( + "testserver" # Required to have redirect work in login view + ) req.META["SERVER_PORT"] = 80 resp = CsrfViewMiddleware(LoginView.as_view())(req) csrf_cookie = resp.cookies.get(settings.CSRF_COOKIE_NAME, None) diff --git a/tests/backends/base/test_base.py b/tests/backends/base/test_base.py index 9f2fa4e576..03356fbf10 100644 --- a/tests/backends/base/test_base.py +++ b/tests/backends/base/test_base.py @@ -168,8 +168,9 @@ class ExecuteWrapperTests(TestCase): def test_nested_wrapper_invoked(self): outer_wrapper = self.mock_wrapper() inner_wrapper = self.mock_wrapper() - with connection.execute_wrapper(outer_wrapper), connection.execute_wrapper( - inner_wrapper + with ( + connection.execute_wrapper(outer_wrapper), + connection.execute_wrapper(inner_wrapper), ): self.call_execute(connection) self.assertEqual(inner_wrapper.call_count, 1) @@ -182,8 +183,10 @@ class ExecuteWrapperTests(TestCase): wrapper = self.mock_wrapper() c = connection # This alias shortens the next line. - with c.execute_wrapper(wrapper), c.execute_wrapper(blocker), c.execute_wrapper( - wrapper + with ( + c.execute_wrapper(wrapper), + c.execute_wrapper(blocker), + c.execute_wrapper(wrapper), ): with c.cursor() as cursor: cursor.execute("The database never sees this") diff --git a/tests/backends/test_utils.py b/tests/backends/test_utils.py index 03d4b036fd..704498836e 100644 --- a/tests/backends/test_utils.py +++ b/tests/backends/test_utils.py @@ -1,4 +1,5 @@ """Tests for django.db.backends.utils""" + from decimal import Decimal, Rounded from django.db import NotSupportedError, connection diff --git a/tests/backends/tests.py b/tests/backends/tests.py index 5c562682f0..08a21d8ded 100644 --- a/tests/backends/tests.py +++ b/tests/backends/tests.py @@ -1,4 +1,5 @@ """Tests related to django.db.backends that haven't been organized.""" + import datetime import threading import unittest diff --git a/tests/bash_completion/tests.py b/tests/bash_completion/tests.py index 856e351dfa..324e980937 100644 --- a/tests/bash_completion/tests.py +++ b/tests/bash_completion/tests.py @@ -1,6 +1,7 @@ """ A series of tests to establish that the command-line bash completion works. """ + import os import sys import unittest diff --git a/tests/basic/models.py b/tests/basic/models.py index 6802f825ff..236884f4cc 100644 --- a/tests/basic/models.py +++ b/tests/basic/models.py @@ -3,6 +3,7 @@ Bare-bones model This is a basic model with only two non-primary-key fields. """ + import uuid from django.db import models diff --git a/tests/check_framework/test_security.py b/tests/check_framework/test_security.py index b1839f48c3..cb035a90a4 100644 --- a/tests/check_framework/test_security.py +++ b/tests/check_framework/test_security.py @@ -593,8 +593,9 @@ class CheckReferrerPolicyTest(SimpleTestCase): ("strict-origin", "origin"), ) for value in tests: - with self.subTest(value=value), override_settings( - SECURE_REFERRER_POLICY=value + with ( + self.subTest(value=value), + override_settings(SECURE_REFERRER_POLICY=value), ): self.assertEqual(base.check_referrer_policy(None), []) @@ -663,8 +664,11 @@ class CheckCrossOriginOpenerPolicyTest(SimpleTestCase): def test_with_coop(self): tests = ["same-origin", "same-origin-allow-popups", "unsafe-none"] for value in tests: - with self.subTest(value=value), override_settings( - SECURE_CROSS_ORIGIN_OPENER_POLICY=value, + with ( + self.subTest(value=value), + override_settings( + SECURE_CROSS_ORIGIN_OPENER_POLICY=value, + ), ): self.assertEqual(base.check_cross_origin_opener_policy(None), []) diff --git a/tests/contenttypes_tests/test_management.py b/tests/contenttypes_tests/test_management.py index eb472d80ce..14ff4e5952 100644 --- a/tests/contenttypes_tests/test_management.py +++ b/tests/contenttypes_tests/test_management.py @@ -88,9 +88,10 @@ class RemoveStaleContentTypesTests(TestCase): def test_contenttypes_removed_in_installed_apps_without_models(self): ContentType.objects.create(app_label="empty_models", model="Fake 1") ContentType.objects.create(app_label="no_models", model="Fake 2") - with mock.patch( - "builtins.input", return_value="yes" - ), captured_stdout() as stdout: + with ( + mock.patch("builtins.input", return_value="yes"), + captured_stdout() as stdout, + ): call_command("remove_stale_contenttypes", verbosity=2) self.assertNotIn( "Deleting stale content type 'empty_models | Fake 1'", @@ -106,9 +107,10 @@ class RemoveStaleContentTypesTests(TestCase): def test_contenttypes_removed_for_apps_not_in_installed_apps(self): ContentType.objects.create(app_label="empty_models", model="Fake 1") ContentType.objects.create(app_label="no_models", model="Fake 2") - with mock.patch( - "builtins.input", return_value="yes" - ), captured_stdout() as stdout: + with ( + mock.patch("builtins.input", return_value="yes"), + captured_stdout() as stdout, + ): call_command( "remove_stale_contenttypes", include_stale_apps=True, verbosity=2 ) diff --git a/tests/contenttypes_tests/test_models.py b/tests/contenttypes_tests/test_models.py index 02036de83f..88f715ceff 100644 --- a/tests/contenttypes_tests/test_models.py +++ b/tests/contenttypes_tests/test_models.py @@ -323,8 +323,9 @@ class ContentTypesMultidbTests(TestCase): db_for_read(). """ ContentType.objects.clear_cache() - with self.assertNumQueries(0, using="default"), self.assertNumQueries( - 1, using="other" + with ( + self.assertNumQueries(0, using="default"), + self.assertNumQueries(1, using="other"), ): ContentType.objects.get_for_model(Author) diff --git a/tests/contenttypes_tests/test_views.py b/tests/contenttypes_tests/test_views.py index 4d85d15065..75f39a7bab 100644 --- a/tests/contenttypes_tests/test_views.py +++ b/tests/contenttypes_tests/test_views.py @@ -150,10 +150,8 @@ class ContentTypesViewsSiteRelTests(TestCase): """ The shortcut view works if a model's ForeignKey to site is None. """ - get_model.side_effect = ( - lambda *args, **kwargs: MockSite - if args[0] == "sites.Site" - else ModelWithNullFKToSite + get_model.side_effect = lambda *args, **kwargs: ( + MockSite if args[0] == "sites.Site" else ModelWithNullFKToSite ) obj = ModelWithNullFKToSite.objects.create(title="title") @@ -172,10 +170,8 @@ class ContentTypesViewsSiteRelTests(TestCase): site if it's attached to the object or to the domain of the first site found in the m2m relationship. """ - get_model.side_effect = ( - lambda *args, **kwargs: MockSite - if args[0] == "sites.Site" - else ModelWithM2MToSite + get_model.side_effect = lambda *args, **kwargs: ( + MockSite if args[0] == "sites.Site" else ModelWithM2MToSite ) # get_current_site() will lookup a Site object, so these must match the diff --git a/tests/context_processors/tests.py b/tests/context_processors/tests.py index 23f9d59149..ba92ff8b05 100644 --- a/tests/context_processors/tests.py +++ b/tests/context_processors/tests.py @@ -1,6 +1,7 @@ """ Tests for Django's bundled context processors. """ + from django.test import SimpleTestCase, TestCase, override_settings diff --git a/tests/custom_lookups/tests.py b/tests/custom_lookups/tests.py index 8fc31d4e6b..f107c5320a 100644 --- a/tests/custom_lookups/tests.py +++ b/tests/custom_lookups/tests.py @@ -238,10 +238,11 @@ class LookupTests(TestCase): def test_custom_name_lookup(self): a1 = Author.objects.create(name="a1", birthdate=date(1981, 2, 16)) Author.objects.create(name="a2", birthdate=date(2012, 2, 29)) - with register_lookup(models.DateField, YearTransform), register_lookup( - models.DateField, YearTransform, lookup_name="justtheyear" - ), register_lookup(YearTransform, Exactly), register_lookup( - YearTransform, Exactly, lookup_name="isactually" + with ( + register_lookup(models.DateField, YearTransform), + register_lookup(models.DateField, YearTransform, lookup_name="justtheyear"), + register_lookup(YearTransform, Exactly), + register_lookup(YearTransform, Exactly, lookup_name="isactually"), ): qs1 = Author.objects.filter(birthdate__testyear__exactly=1981) qs2 = Author.objects.filter(birthdate__justtheyear__isactually=1981) diff --git a/tests/db_functions/comparison/test_nullif.py b/tests/db_functions/comparison/test_nullif.py index 9839e6b4c5..cdbc3d6960 100644 --- a/tests/db_functions/comparison/test_nullif.py +++ b/tests/db_functions/comparison/test_nullif.py @@ -23,9 +23,11 @@ class NullIfTests(TestCase): [ ("smithj",), ( - "" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ), ], ) diff --git a/tests/db_functions/datetime/test_extract_trunc.py b/tests/db_functions/datetime/test_extract_trunc.py index 29212b6e24..e576e6e464 100644 --- a/tests/db_functions/datetime/test_extract_trunc.py +++ b/tests/db_functions/datetime/test_extract_trunc.py @@ -113,9 +113,11 @@ class DateFunctionTests(TestCase): end_date=end_datetime.date() if end_datetime else None, start_time=start_datetime.time() if start_datetime else None, end_time=end_datetime.time() if end_datetime else None, - duration=(end_datetime - start_datetime) - if start_datetime and end_datetime - else None, + duration=( + (end_datetime - start_datetime) + if start_datetime and end_datetime + else None + ), ) def test_extract_year_exact_lookup(self): diff --git a/tests/db_functions/models.py b/tests/db_functions/models.py index d6a06511bc..c126f1bae1 100644 --- a/tests/db_functions/models.py +++ b/tests/db_functions/models.py @@ -1,6 +1,7 @@ """ Tests for built in Function expressions. """ + from django.db import models diff --git a/tests/db_functions/text/test_md5.py b/tests/db_functions/text/test_md5.py index fd0aec58f2..4fd66f0397 100644 --- a/tests/db_functions/text/test_md5.py +++ b/tests/db_functions/text/test_md5.py @@ -35,9 +35,11 @@ class MD5Tests(TestCase): "ca6d48f6772000141e66591aee49d56c", "bf2c13bc1154e3d2e7df848cbc8be73d", "d41d8cd98f00b204e9800998ecf8427e", - "d41d8cd98f00b204e9800998ecf8427e" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "d41d8cd98f00b204e9800998ecf8427e" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_functions/text/test_sha1.py b/tests/db_functions/text/test_sha1.py index 175c5727ff..ef846d07aa 100644 --- a/tests/db_functions/text/test_sha1.py +++ b/tests/db_functions/text/test_sha1.py @@ -35,9 +35,11 @@ class SHA1Tests(TestCase): "0781e0745a2503e6ded05ed5bc554c421d781b0c", "198d15ea139de04060caf95bc3e0ec5883cba881", "da39a3ee5e6b4b0d3255bfef95601890afd80709", - "da39a3ee5e6b4b0d3255bfef95601890afd80709" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "da39a3ee5e6b4b0d3255bfef95601890afd80709" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_functions/text/test_sha224.py b/tests/db_functions/text/test_sha224.py index a6254f43e3..60d9e378a6 100644 --- a/tests/db_functions/text/test_sha224.py +++ b/tests/db_functions/text/test_sha224.py @@ -37,9 +37,11 @@ class SHA224Tests(TestCase): "2297904883e78183cb118fc3dc21a610d60daada7b6ebdbc85139f4d", "eba942746e5855121d9d8f79e27dfdebed81adc85b6bf41591203080", "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f", - "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_functions/text/test_sha256.py b/tests/db_functions/text/test_sha256.py index b399dbecd3..0cf72783e7 100644 --- a/tests/db_functions/text/test_sha256.py +++ b/tests/db_functions/text/test_sha256.py @@ -35,9 +35,11 @@ class SHA256Tests(TestCase): "6e4cce20cd83fc7c202f21a8b2452a68509cf24d1c272a045b5e0cfc43f0d94e", "3ad2039e3ec0c88973ae1c0fce5a3dbafdd5a1627da0a92312c54ebfcf43988e", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_functions/text/test_sha384.py b/tests/db_functions/text/test_sha384.py index 250cadda4a..a4d07d3295 100644 --- a/tests/db_functions/text/test_sha384.py +++ b/tests/db_functions/text/test_sha384.py @@ -39,10 +39,12 @@ class SHA384Tests(TestCase): "26676a43c7ba378621175853b0", "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274ede" "bfe76f65fbd51ad2f14898b95b", - "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274ede" - "bfe76f65fbd51ad2f14898b95b" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da27" + "4edebfe76f65fbd51ad2f14898b95b" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_functions/text/test_sha512.py b/tests/db_functions/text/test_sha512.py index f5a7ad4ae5..b4c7a4bbd8 100644 --- a/tests/db_functions/text/test_sha512.py +++ b/tests/db_functions/text/test_sha512.py @@ -39,10 +39,12 @@ class SHA512Tests(TestCase): "172d88798345a3a7666faf5f35a144c60812d3234dcd35f444624f2faee16857", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", - "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" - "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" - if connection.features.interprets_empty_strings_as_nulls - else None, + ( + "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce" + "47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" + if connection.features.interprets_empty_strings_as_nulls + else None + ), ], ) diff --git a/tests/db_utils/tests.py b/tests/db_utils/tests.py index a2d9cc7b5e..4028a8acdf 100644 --- a/tests/db_utils/tests.py +++ b/tests/db_utils/tests.py @@ -1,4 +1,5 @@ """Tests for django.db.utils.""" + import unittest from django.core.exceptions import ImproperlyConfigured diff --git a/tests/dbshell/test_sqlite.py b/tests/dbshell/test_sqlite.py index faf9882ad9..e795f7619b 100644 --- a/tests/dbshell/test_sqlite.py +++ b/tests/dbshell/test_sqlite.py @@ -35,8 +35,11 @@ class SqliteDbshellCommandTestCase(SimpleTestCase): cmd_args = self.settings_to_cmd_args_env(sqlite_with_path)[0] msg = '"sqlite3 test.db.sqlite3" returned non-zero exit status 1.' - with mock.patch( - "django.db.backends.sqlite3.client.DatabaseClient.runshell", - side_effect=subprocess.CalledProcessError(returncode=1, cmd=cmd_args), - ), self.assertRaisesMessage(CommandError, msg): + with ( + mock.patch( + "django.db.backends.sqlite3.client.DatabaseClient.runshell", + side_effect=subprocess.CalledProcessError(returncode=1, cmd=cmd_args), + ), + self.assertRaisesMessage(CommandError, msg), + ): call_command("dbshell") diff --git a/tests/distinct_on_fields/tests.py b/tests/distinct_on_fields/tests.py index b80878bbf2..93b3f27aec 100644 --- a/tests/distinct_on_fields/tests.py +++ b/tests/distinct_on_fields/tests.py @@ -76,9 +76,11 @@ class DistinctOnTests(TestCase): (StaffTag.objects.distinct("staff", "tag"), [self.st1]), ( Tag.objects.order_by("parent__pk", "pk").distinct("parent"), - [self.t2, self.t4, self.t1] - if connection.features.nulls_order_largest - else [self.t1, self.t2, self.t4], + ( + [self.t2, self.t4, self.t1] + if connection.features.nulls_order_largest + else [self.t1, self.t2, self.t4] + ), ), ( StaffTag.objects.select_related("staff") diff --git a/tests/expressions/models.py b/tests/expressions/models.py index bd4db9050e..43dd235fb5 100644 --- a/tests/expressions/models.py +++ b/tests/expressions/models.py @@ -1,6 +1,7 @@ """ Tests for F() query expression syntax. """ + import uuid from django.db import models diff --git a/tests/file_uploads/tests.py b/tests/file_uploads/tests.py index 9fdef57324..6db8f9022d 100644 --- a/tests/file_uploads/tests.py +++ b/tests/file_uploads/tests.py @@ -452,9 +452,10 @@ class FileUploadTests(TestCase): def test_file_content(self): file = tempfile.NamedTemporaryFile - with file(suffix=".ctype_extra") as no_content_type, file( - suffix=".ctype_extra" - ) as simple_file: + with ( + file(suffix=".ctype_extra") as no_content_type, + file(suffix=".ctype_extra") as simple_file, + ): no_content_type.write(b"no content") no_content_type.seek(0) @@ -483,9 +484,10 @@ class FileUploadTests(TestCase): def test_content_type_extra(self): """Uploaded files may have content type parameters available.""" file = tempfile.NamedTemporaryFile - with file(suffix=".ctype_extra") as no_content_type, file( - suffix=".ctype_extra" - ) as simple_file: + with ( + file(suffix=".ctype_extra") as no_content_type, + file(suffix=".ctype_extra") as simple_file, + ): no_content_type.write(b"something") no_content_type.seek(0) diff --git a/tests/file_uploads/uploadhandler.py b/tests/file_uploads/uploadhandler.py index a1e1a5af05..d3c88ac305 100644 --- a/tests/file_uploads/uploadhandler.py +++ b/tests/file_uploads/uploadhandler.py @@ -1,6 +1,7 @@ """ Upload handlers to test the upload API. """ + import os from tempfile import NamedTemporaryFile diff --git a/tests/files/tests.py b/tests/files/tests.py index 7dc5c04668..9d3a471cb3 100644 --- a/tests/files/tests.py +++ b/tests/files/tests.py @@ -144,35 +144,40 @@ class FileTests(unittest.TestCase): self.assertEqual(list(f), ["one\n", "two\n", "three"]) def test_readable(self): - with tempfile.TemporaryFile() as temp, File( - temp, name="something.txt" - ) as test_file: + with ( + tempfile.TemporaryFile() as temp, + File(temp, name="something.txt") as test_file, + ): self.assertTrue(test_file.readable()) self.assertFalse(test_file.readable()) def test_writable(self): - with tempfile.TemporaryFile() as temp, File( - temp, name="something.txt" - ) as test_file: + with ( + tempfile.TemporaryFile() as temp, + File(temp, name="something.txt") as test_file, + ): self.assertTrue(test_file.writable()) self.assertFalse(test_file.writable()) - with tempfile.TemporaryFile("rb") as temp, File( - temp, name="something.txt" - ) as test_file: + with ( + tempfile.TemporaryFile("rb") as temp, + File(temp, name="something.txt") as test_file, + ): self.assertFalse(test_file.writable()) def test_seekable(self): - with tempfile.TemporaryFile() as temp, File( - temp, name="something.txt" - ) as test_file: + with ( + tempfile.TemporaryFile() as temp, + File(temp, name="something.txt") as test_file, + ): self.assertTrue(test_file.seekable()) self.assertFalse(test_file.seekable()) def test_io_wrapper(self): content = "vive l'été\n" - with tempfile.TemporaryFile() as temp, File( - temp, name="something.txt" - ) as test_file: + with ( + tempfile.TemporaryFile() as temp, + File(temp, name="something.txt") as test_file, + ): test_file.write(content.encode()) test_file.seek(0) wrapper = TextIOWrapper(test_file, "utf-8", newline="\n") diff --git a/tests/force_insert_update/models.py b/tests/force_insert_update/models.py index b95b197454..e6fdfbd827 100644 --- a/tests/force_insert_update/models.py +++ b/tests/force_insert_update/models.py @@ -2,6 +2,7 @@ Tests for forcing insert and update queries (instead of Django's normal automatic behavior). """ + from django.db import models diff --git a/tests/forms_tests/field_tests/test_decimalfield.py b/tests/forms_tests/field_tests/test_decimalfield.py index 9d26bc88b0..cb13e5b71b 100644 --- a/tests/forms_tests/field_tests/test_decimalfield.py +++ b/tests/forms_tests/field_tests/test_decimalfield.py @@ -80,8 +80,9 @@ class DecimalFieldTest(FormFieldAssertionsMixin, SimpleTestCase): "--0.12", ) for value in values: - with self.subTest(value=value), self.assertRaisesMessage( - ValidationError, "'Enter a number.'" + with ( + self.subTest(value=value), + self.assertRaisesMessage(ValidationError, "'Enter a number.'"), ): f.clean(value) diff --git a/tests/forms_tests/field_tests/test_filefield.py b/tests/forms_tests/field_tests/test_filefield.py index 11388bdc09..9744981471 100644 --- a/tests/forms_tests/field_tests/test_filefield.py +++ b/tests/forms_tests/field_tests/test_filefield.py @@ -53,7 +53,8 @@ class FileFieldTest(SimpleTestCase): self.assertIsInstance( f.clean( SimpleUploadedFile( - "我隻氣墊船裝滿晒鱔.txt", "मेरी मँडराने वाली नाव सर्पमीनों से भरी ह".encode() + "我隻氣墊船裝滿晒鱔.txt", + "मेरी मँडराने वाली नाव सर्पमीनों से भरी ह".encode(), ) ), SimpleUploadedFile, diff --git a/tests/forms_tests/tests/test_formsets.py b/tests/forms_tests/tests/test_formsets.py index 3c260010c2..f80c1dc09e 100644 --- a/tests/forms_tests/tests/test_formsets.py +++ b/tests/forms_tests/tests/test_formsets.py @@ -217,9 +217,12 @@ class FormsFormsetTestCase(SimpleTestCase): [("Calexico", "100"), ("Any1", "42"), ("Any2", "101")] ) - with mock.patch( - "django.forms.formsets.ManagementForm.is_valid", mocked_is_valid - ), mock.patch("django.forms.forms.BaseForm.full_clean", mocked_full_clean): + with ( + mock.patch( + "django.forms.formsets.ManagementForm.is_valid", mocked_is_valid + ), + mock.patch("django.forms.forms.BaseForm.full_clean", mocked_full_clean), + ): self.assertTrue(formset.is_valid()) self.assertEqual(is_valid_counter.call_count, 1) self.assertEqual(full_clean_counter.call_count, 4) diff --git a/tests/gis_tests/gdal_tests/test_raster.py b/tests/gis_tests/gdal_tests/test_raster.py index 67108cbb32..a5f1edef0b 100644 --- a/tests/gis_tests/gdal_tests/test_raster.py +++ b/tests/gis_tests/gdal_tests/test_raster.py @@ -102,8 +102,9 @@ class GDALRasterTests(SimpleTestCase): ] msg = "Geotransform must consist of 6 numeric values." for geotransform in error_geotransforms: - with self.subTest(i=geotransform), self.assertRaisesMessage( - ValueError, msg + with ( + self.subTest(i=geotransform), + self.assertRaisesMessage(ValueError, msg), ): rsmem.geotransform = geotransform diff --git a/tests/gis_tests/geogapp/tests.py b/tests/gis_tests/geogapp/tests.py index 8565608993..cb783b9465 100644 --- a/tests/gis_tests/geogapp/tests.py +++ b/tests/gis_tests/geogapp/tests.py @@ -1,6 +1,7 @@ """ Tests for geography support in PostGIS """ + import os from django.contrib.gis.db import models diff --git a/tests/gis_tests/test_data.py b/tests/gis_tests/test_data.py index 0a94907320..8dd6042175 100644 --- a/tests/gis_tests/test_data.py +++ b/tests/gis_tests/test_data.py @@ -2,6 +2,7 @@ This module has the mock object definitions used to hold reference geometry for the GEOS and GDAL tests. """ + import json import os diff --git a/tests/handlers/tests.py b/tests/handlers/tests.py index 76d99e2504..7a5a287da7 100644 --- a/tests/handlers/tests.py +++ b/tests/handlers/tests.py @@ -240,8 +240,9 @@ class HandlerRequestTests(SimpleTestCase): ("/no_response_cbv/", "handlers.views.NoResponse.__call__"), ) for url, view in tests: - with self.subTest(url=url), self.assertRaisesMessage( - ValueError, msg % view + with ( + self.subTest(url=url), + self.assertRaisesMessage(ValueError, msg % view), ): self.client.get(url) diff --git a/tests/httpwrappers/tests.py b/tests/httpwrappers/tests.py index cce8402d3f..2197c6f7ea 100644 --- a/tests/httpwrappers/tests.py +++ b/tests/httpwrappers/tests.py @@ -352,9 +352,9 @@ class HttpResponseTests(SimpleTestCase): h.headers["Content-Disposition"] = 'attachment; filename="%s"' % f # This one is triggering https://bugs.python.org/issue20747, that is Python # will itself insert a newline in the header - h.headers[ - "Content-Disposition" - ] = 'attachment; filename="EdelRot_Blu\u0308te (3)-0.JPG"' + h.headers["Content-Disposition"] = ( + 'attachment; filename="EdelRot_Blu\u0308te (3)-0.JPG"' + ) def test_newlines_in_headers(self): # Bug #10188: Do not allow newlines in headers (CR or LF) diff --git a/tests/invalid_models_tests/test_models.py b/tests/invalid_models_tests/test_models.py index f22f273c9a..9d9a09d34e 100644 --- a/tests/invalid_models_tests/test_models.py +++ b/tests/invalid_models_tests/test_models.py @@ -1898,15 +1898,18 @@ class ConstraintsTests(TestCase): self.assertEqual( Model.check(databases=self.databases), - [ - Error( - "'constraints' refers to the nonexistent field 'missing_field'.", - obj=Model, - id="models.E012", - ), - ] - if connection.features.supports_table_check_constraints - else [], + ( + [ + Error( + "'constraints' refers to the nonexistent field " + "'missing_field'.", + obj=Model, + id="models.E012", + ), + ] + if connection.features.supports_table_check_constraints + else [] + ), ) @skipUnlessDBFeature("supports_table_check_constraints") @@ -2252,15 +2255,18 @@ class ConstraintsTests(TestCase): self.assertEqual( Model.check(databases=self.databases), - [ - Error( - "'constraints' refers to the nonexistent field 'missing_field'.", - obj=Model, - id="models.E012", - ), - ] - if connection.features.supports_partial_indexes - else [], + ( + [ + Error( + "'constraints' refers to the nonexistent field " + "'missing_field'.", + obj=Model, + id="models.E012", + ), + ] + if connection.features.supports_partial_indexes + else [] + ), ) def test_unique_constraint_condition_pointing_to_joined_fields(self): @@ -2280,15 +2286,17 @@ class ConstraintsTests(TestCase): self.assertEqual( Model.check(databases=self.databases), - [ - Error( - "'constraints' refers to the joined field 'parent__age__lt'.", - obj=Model, - id="models.E041", - ) - ] - if connection.features.supports_partial_indexes - else [], + ( + [ + Error( + "'constraints' refers to the joined field 'parent__age__lt'.", + obj=Model, + id="models.E041", + ) + ] + if connection.features.supports_partial_indexes + else [] + ), ) def test_unique_constraint_pointing_to_reverse_o2o(self): @@ -2307,15 +2315,17 @@ class ConstraintsTests(TestCase): self.assertEqual( Model.check(databases=self.databases), - [ - Error( - "'constraints' refers to the nonexistent field 'model'.", - obj=Model, - id="models.E012", - ), - ] - if connection.features.supports_partial_indexes - else [], + ( + [ + Error( + "'constraints' refers to the nonexistent field 'model'.", + obj=Model, + id="models.E012", + ), + ] + if connection.features.supports_partial_indexes + else [] + ), ) def test_deferrable_unique_constraint(self): diff --git a/tests/m2m_and_m2o/models.py b/tests/m2m_and_m2o/models.py index 6a5b0b29c9..4cbd1eb4e8 100644 --- a/tests/m2m_and_m2o/models.py +++ b/tests/m2m_and_m2o/models.py @@ -3,6 +3,7 @@ Many-to-many and many-to-one relationships to the same table Make sure to set ``related_name`` if you use relationships to the same table. """ + from django.db import models diff --git a/tests/m2m_intermediary/models.py b/tests/m2m_intermediary/models.py index 1333d14b41..f82498651f 100644 --- a/tests/m2m_intermediary/models.py +++ b/tests/m2m_intermediary/models.py @@ -9,6 +9,7 @@ each ``Article``-``Reporter`` combination (a ``Writer``) has a ``position`` field, which specifies the ``Reporter``'s position for the given article (e.g. "Staff writer"). """ + from django.db import models diff --git a/tests/mail/tests.py b/tests/mail/tests.py index cd981b6e9e..dd6b72ab49 100644 --- a/tests/mail/tests.py +++ b/tests/mail/tests.py @@ -1392,8 +1392,9 @@ class BaseEmailBackendTests(HeadersCheckMixin): ): msg = "The %s setting must be a list of 2-tuples." % setting for value in tests: - with self.subTest(setting=setting, value=value), self.settings( - **{setting: value} + with ( + self.subTest(setting=setting, value=value), + self.settings(**{setting: value}), ): with self.assertRaisesMessage(ValueError, msg): mail_func("subject", "content") diff --git a/tests/many_to_many/models.py b/tests/many_to_many/models.py index 541928e94d..42fc426990 100644 --- a/tests/many_to_many/models.py +++ b/tests/many_to_many/models.py @@ -6,6 +6,7 @@ To define a many-to-many relationship, use ``ManyToManyField()``. In this example, an ``Article`` can be published in multiple ``Publication`` objects, and a ``Publication`` has multiple ``Article`` objects. """ + from django.db import models diff --git a/tests/many_to_one/models.py b/tests/many_to_one/models.py index cca7e79817..56e660592a 100644 --- a/tests/many_to_one/models.py +++ b/tests/many_to_one/models.py @@ -3,6 +3,7 @@ Many-to-one relationships To define a many-to-one relationship, use ``ForeignKey()``. """ + from django.db import models diff --git a/tests/middleware/test_security.py b/tests/middleware/test_security.py index dd220b8f4c..339b9181c3 100644 --- a/tests/middleware/test_security.py +++ b/tests/middleware/test_security.py @@ -248,8 +248,9 @@ class SecurityMiddlewareTest(SimpleTestCase): (("strict-origin", "origin"), "strict-origin,origin"), ) for value, expected in tests: - with self.subTest(value=value), override_settings( - SECURE_REFERRER_POLICY=value + with ( + self.subTest(value=value), + override_settings(SECURE_REFERRER_POLICY=value), ): self.assertEqual( self.process_response().headers["Referrer-Policy"], @@ -287,8 +288,11 @@ class SecurityMiddlewareTest(SimpleTestCase): """ tests = ["same-origin", "same-origin-allow-popups", "unsafe-none"] for value in tests: - with self.subTest(value=value), override_settings( - SECURE_CROSS_ORIGIN_OPENER_POLICY=value, + with ( + self.subTest(value=value), + override_settings( + SECURE_CROSS_ORIGIN_OPENER_POLICY=value, + ), ): self.assertEqual( self.process_response().headers["Cross-Origin-Opener-Policy"], diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py index 4dc1c83c42..4c17b4ec34 100644 --- a/tests/middleware/tests.py +++ b/tests/middleware/tests.py @@ -854,9 +854,9 @@ class GZipMiddlewareTest(SimpleTestCase): def setUp(self): self.req = self.request_factory.get("/") self.req.META["HTTP_ACCEPT_ENCODING"] = "gzip, deflate" - self.req.META[ - "HTTP_USER_AGENT" - ] = "Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" + self.req.META["HTTP_USER_AGENT"] = ( + "Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1" + ) self.resp = HttpResponse() self.resp.status_code = 200 self.resp.content = self.compressible_string diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py index 263b25ab61..1f8b3fb011 100644 --- a/tests/migrations/test_commands.py +++ b/tests/migrations/test_commands.py @@ -3102,9 +3102,11 @@ class OptimizeMigrationTests(MigrationTestBase): with open(initial_migration_file) as fp: content = fp.read() self.assertIn( - '("bool", models.BooleanField' - if HAS_BLACK - else "('bool', models.BooleanField", + ( + '("bool", models.BooleanField' + if HAS_BLACK + else "('bool', models.BooleanField" + ), content, ) self.assertEqual( @@ -3131,9 +3133,11 @@ class OptimizeMigrationTests(MigrationTestBase): with open(initial_migration_file) as fp: content = fp.read() self.assertIn( - '("bool", models.BooleanField' - if HAS_BLACK - else "('bool', models.BooleanField", + ( + '("bool", models.BooleanField' + if HAS_BLACK + else "('bool', models.BooleanField" + ), content, ) self.assertEqual(out.getvalue(), "") diff --git a/tests/migrations/test_executor.py b/tests/migrations/test_executor.py index 6232b44b98..571cb3e1a2 100644 --- a/tests/migrations/test_executor.py +++ b/tests/migrations/test_executor.py @@ -405,9 +405,9 @@ class ExecutorTests(MigrationTestBase): migrations_apps = executor.loader.project_state( ("migrations", "0001_initial"), ).apps - global_apps.get_app_config("migrations").models[ - "author" - ] = migrations_apps.get_model("migrations", "author") + global_apps.get_app_config("migrations").models["author"] = ( + migrations_apps.get_model("migrations", "author") + ) try: migration = executor.loader.get_migration("auth", "0001_initial") self.assertIs(executor.detect_soft_applied(None, migration)[0], True) diff --git a/tests/migrations/test_operations.py b/tests/migrations/test_operations.py index 52e43d20f9..5733ba7618 100644 --- a/tests/migrations/test_operations.py +++ b/tests/migrations/test_operations.py @@ -3614,15 +3614,17 @@ class OperationTests(OperationTestBase): operation.state_forwards(app_label, new_state) # Rename index. expected_queries = 1 if connection.features.can_rename_index else 2 - with connection.schema_editor() as editor, self.assertNumQueries( - expected_queries + with ( + connection.schema_editor() as editor, + self.assertNumQueries(expected_queries), ): operation.database_forwards(app_label, editor, project_state, new_state) self.assertIndexNameNotExists(table_name, "pony_pink_idx") self.assertIndexNameExists(table_name, "new_pony_test_idx") # Reversal. - with connection.schema_editor() as editor, self.assertNumQueries( - expected_queries + with ( + connection.schema_editor() as editor, + self.assertNumQueries(expected_queries), ): operation.database_backwards(app_label, editor, new_state, project_state) self.assertIndexNameExists(table_name, "pony_pink_idx") @@ -4281,9 +4283,10 @@ class OperationTests(OperationTestBase): ) Pony = new_state.apps.get_model(app_label, "Pony") self.assertEqual(len(Pony._meta.constraints), 1) - with connection.schema_editor() as editor, CaptureQueriesContext( - connection - ) as ctx: + with ( + connection.schema_editor() as editor, + CaptureQueriesContext(connection) as ctx, + ): operation.database_forwards(app_label, editor, project_state, new_state) Pony.objects.create(pink=1, weight=4.0) if connection.features.supports_deferrable_unique_constraints: @@ -4342,9 +4345,10 @@ class OperationTests(OperationTestBase): ) Pony = new_state.apps.get_model(app_label, "Pony") self.assertEqual(len(Pony._meta.constraints), 0) - with connection.schema_editor() as editor, CaptureQueriesContext( - connection - ) as ctx: + with ( + connection.schema_editor() as editor, + CaptureQueriesContext(connection) as ctx, + ): operation.database_forwards(app_label, editor, project_state, new_state) # Constraint doesn't work. Pony.objects.create(pink=1, weight=4.0) @@ -4405,9 +4409,10 @@ class OperationTests(OperationTestBase): ) Pony = new_state.apps.get_model(app_label, "Pony") self.assertEqual(len(Pony._meta.constraints), 1) - with connection.schema_editor() as editor, CaptureQueriesContext( - connection - ) as ctx: + with ( + connection.schema_editor() as editor, + CaptureQueriesContext(connection) as ctx, + ): operation.database_forwards(app_label, editor, project_state, new_state) Pony.objects.create(pink=1, weight=4.0) if connection.features.supports_covering_indexes: @@ -4453,9 +4458,10 @@ class OperationTests(OperationTestBase): ) Pony = new_state.apps.get_model(app_label, "Pony") self.assertEqual(len(Pony._meta.constraints), 0) - with connection.schema_editor() as editor, CaptureQueriesContext( - connection - ) as ctx: + with ( + connection.schema_editor() as editor, + CaptureQueriesContext(connection) as ctx, + ): operation.database_forwards(app_label, editor, project_state, new_state) # Constraint doesn't work. Pony.objects.create(pink=1, weight=4.0) diff --git a/tests/model_inheritance/models.py b/tests/model_inheritance/models.py index 47aae186e0..ffb9f28cfa 100644 --- a/tests/model_inheritance/models.py +++ b/tests/model_inheritance/models.py @@ -11,6 +11,7 @@ Model inheritance exists in two varieties: Both styles are demonstrated here. """ + from django.db import models # diff --git a/tests/model_inheritance/tests.py b/tests/model_inheritance/tests.py index 5bf1ef5db5..6b005fcef0 100644 --- a/tests/model_inheritance/tests.py +++ b/tests/model_inheritance/tests.py @@ -216,9 +216,11 @@ class ModelInheritanceTests(TestCase): GrandChild().save() for i, test in enumerate([a, b]): - with self.subTest(i=i), self.assertNumQueries(4), CaptureQueriesContext( - connection - ) as queries: + with ( + self.subTest(i=i), + self.assertNumQueries(4), + CaptureQueriesContext(connection) as queries, + ): test() for query in queries: sql = query["sql"] diff --git a/tests/model_inheritance_regress/tests.py b/tests/model_inheritance_regress/tests.py index 1a9f953d6f..ba31048ac2 100644 --- a/tests/model_inheritance_regress/tests.py +++ b/tests/model_inheritance_regress/tests.py @@ -1,6 +1,7 @@ """ Regression tests for Model inheritance behavior. """ + import datetime from operator import attrgetter from unittest import expectedFailure diff --git a/tests/null_fk_ordering/models.py b/tests/null_fk_ordering/models.py index adfdbf3bea..d7b6ad8238 100644 --- a/tests/null_fk_ordering/models.py +++ b/tests/null_fk_ordering/models.py @@ -5,6 +5,7 @@ Regression tests for proper working of ForeignKey(null=True). Tests these bugs: unexpected results """ + from django.db import models diff --git a/tests/one_to_one/models.py b/tests/one_to_one/models.py index ca459e9edf..20b2eeec7d 100644 --- a/tests/one_to_one/models.py +++ b/tests/one_to_one/models.py @@ -5,6 +5,7 @@ To define a one-to-one relationship, use ``OneToOneField()``. In this example, a ``Place`` optionally can be a ``Restaurant``. """ + from django.db import models diff --git a/tests/order_with_respect_to/base_tests.py b/tests/order_with_respect_to/base_tests.py index ea548ca076..5170c6d957 100644 --- a/tests/order_with_respect_to/base_tests.py +++ b/tests/order_with_respect_to/base_tests.py @@ -2,6 +2,7 @@ The tests are shared with contenttypes_tests and so shouldn't import or reference any models directly. Subclasses should inherit django.test.TestCase. """ + from operator import attrgetter @@ -117,8 +118,11 @@ class BaseOrderWithRespectToTests: return "other" with self.settings(DATABASE_ROUTERS=[WriteToOtherRouter()]): - with self.assertNumQueries(0, using="default"), self.assertNumQueries( - 1, - using="other", + with ( + self.assertNumQueries(0, using="default"), + self.assertNumQueries( + 1, + using="other", + ), ): self.q1.set_answer_order([3, 1, 2, 4]) diff --git a/tests/postgres_tests/fields.py b/tests/postgres_tests/fields.py index c2513fca0c..c5dddf197f 100644 --- a/tests/postgres_tests/fields.py +++ b/tests/postgres_tests/fields.py @@ -2,6 +2,7 @@ Indirection layer for PostgreSQL-specific fields, so the tests don't fail when run with a backend other than PostgreSQL. """ + import enum from django.db import models diff --git a/tests/postgres_tests/test_constraints.py b/tests/postgres_tests/test_constraints.py index bf47833743..e5a8e9dbe9 100644 --- a/tests/postgres_tests/test_constraints.py +++ b/tests/postgres_tests/test_constraints.py @@ -300,8 +300,9 @@ class ExclusionConstraintTests(PostgreSQLTestCase): def test_empty_expressions(self): msg = "At least one expression is required to define an exclusion constraint." for empty_expressions in (None, []): - with self.subTest(empty_expressions), self.assertRaisesMessage( - ValueError, msg + with ( + self.subTest(empty_expressions), + self.assertRaisesMessage(ValueError, msg), ): ExclusionConstraint( index_type="GIST", diff --git a/tests/postgres_tests/test_search.py b/tests/postgres_tests/test_search.py index 6f6318899c..472dca6c7b 100644 --- a/tests/postgres_tests/test_search.py +++ b/tests/postgres_tests/test_search.py @@ -5,6 +5,7 @@ These tests use dialogue from the 1975 film Monty Python and the Holy Grail. All text copyright Python (Monty) Pictures. Thanks to sacred-texts.com for the transcript. """ + from django.db.models import F, Value from . import PostgreSQLSimpleTestCase, PostgreSQLTestCase diff --git a/tests/prefetch_related/tests.py b/tests/prefetch_related/tests.py index 08f87d55de..a418beb5a5 100644 --- a/tests/prefetch_related/tests.py +++ b/tests/prefetch_related/tests.py @@ -1620,8 +1620,9 @@ class MultiDbTests(TestCase): ) # Explicit using on a different db. - with self.assertNumQueries(1, using="default"), self.assertNumQueries( - 1, using="other" + with ( + self.assertNumQueries(1, using="default"), + self.assertNumQueries(1, using="other"), ): prefetch = Prefetch( "first_time_authors", queryset=Author.objects.using("default") diff --git a/tests/proxy_models/models.py b/tests/proxy_models/models.py index 604136b5ac..c0277e093f 100644 --- a/tests/proxy_models/models.py +++ b/tests/proxy_models/models.py @@ -4,6 +4,7 @@ they will take data directly from the table of their base class table rather than using a new table of their own. This allows them to act as simple proxies, providing a modified interface to the data from the base class. """ + from django.db import models # A couple of managers for testing managing overriding in proxy model cases. diff --git a/tests/queries/models.py b/tests/queries/models.py index 23c41e3374..9f4cf040b6 100644 --- a/tests/queries/models.py +++ b/tests/queries/models.py @@ -1,6 +1,7 @@ """ Various complex queries that have been problematic in the past. """ + import datetime from django.db import models diff --git a/tests/requests_tests/test_accept_header.py b/tests/requests_tests/test_accept_header.py index c6eed0e479..5afb9e9993 100644 --- a/tests/requests_tests/test_accept_header.py +++ b/tests/requests_tests/test_accept_header.py @@ -68,9 +68,9 @@ class AcceptHeaderTests(TestCase): def test_accept_headers(self): request = HttpRequest() - request.META[ - "HTTP_ACCEPT" - ] = "text/html, application/xhtml+xml,application/xml ;q=0.9,*/*;q=0.8" + request.META["HTTP_ACCEPT"] = ( + "text/html, application/xhtml+xml,application/xml ;q=0.9,*/*;q=0.8" + ) self.assertEqual( [str(accepted_type) for accepted_type in request.accepted_types], [ @@ -94,9 +94,9 @@ class AcceptHeaderTests(TestCase): def test_request_accepts_some(self): request = HttpRequest() - request.META[ - "HTTP_ACCEPT" - ] = "text/html,application/xhtml+xml,application/xml;q=0.9" + request.META["HTTP_ACCEPT"] = ( + "text/html,application/xhtml+xml,application/xml;q=0.9" + ) self.assertIs(request.accepts("text/html"), True) self.assertIs(request.accepts("application/xhtml+xml"), True) self.assertIs(request.accepts("application/xml"), True) diff --git a/tests/save_delete_hooks/models.py b/tests/save_delete_hooks/models.py index e7c598aeae..8b9826eb14 100644 --- a/tests/save_delete_hooks/models.py +++ b/tests/save_delete_hooks/models.py @@ -4,6 +4,7 @@ Adding hooks before/after saving and deleting To execute arbitrary code around ``save()`` and ``delete()``, just subclass the methods. """ + from django.db import models diff --git a/tests/schema/fields.py b/tests/schema/fields.py index 998cb28b8c..24a26b2c2c 100644 --- a/tests/schema/fields.py +++ b/tests/schema/fields.py @@ -41,9 +41,11 @@ class CustomManyToManyField(RelatedField): related_name=related_name, related_query_name=related_query_name, limit_choices_to=limit_choices_to, - symmetrical=symmetrical - if symmetrical is not None - else (to == RECURSIVE_RELATIONSHIP_CONSTANT), + symmetrical=( + symmetrical + if symmetrical is not None + else (to == RECURSIVE_RELATIONSHIP_CONSTANT) + ), through=through, through_fields=through_fields, db_constraint=db_constraint, diff --git a/tests/schema/tests.py b/tests/schema/tests.py index 61244f75b4..3a026281bd 100644 --- a/tests/schema/tests.py +++ b/tests/schema/tests.py @@ -640,9 +640,10 @@ class SchemaTests(TransactionTestCase): # Add the new field new_field = IntegerField(null=True) new_field.set_attributes_from_name("age") - with CaptureQueriesContext( - connection - ) as ctx, connection.schema_editor() as editor: + with ( + CaptureQueriesContext(connection) as ctx, + connection.schema_editor() as editor, + ): editor.add_field(Author, new_field) drop_default_sql = editor.sql_alter_column_no_default % { "column": editor.quote_name(new_field.name), @@ -2483,9 +2484,10 @@ class SchemaTests(TransactionTestCase): with self.assertRaises(DatabaseError): self.column_classes(new_field.remote_field.through) # Add the field - with CaptureQueriesContext( - connection - ) as ctx, connection.schema_editor() as editor: + with ( + CaptureQueriesContext(connection) as ctx, + connection.schema_editor() as editor, + ): editor.add_field(LocalAuthorWithM2M, new_field) # Table is not rebuilt. self.assertEqual( @@ -2963,9 +2965,11 @@ class SchemaTests(TransactionTestCase): ) # Redundant foreign key index is not added. self.assertEqual( - len(old_constraints) - 1 - if connection.features.supports_partial_indexes - else len(old_constraints), + ( + len(old_constraints) - 1 + if connection.features.supports_partial_indexes + else len(old_constraints) + ), len(new_constraints), ) diff --git a/tests/serializers/models/base.py b/tests/serializers/models/base.py index c5a4a0f580..e4fcee366d 100644 --- a/tests/serializers/models/base.py +++ b/tests/serializers/models/base.py @@ -4,6 +4,7 @@ Serialization ``django.core.serializers`` provides interfaces to converting Django ``QuerySet`` objects to and from "flat" data (i.e. strings). """ + from decimal import Decimal from django.db import models diff --git a/tests/serializers/models/data.py b/tests/serializers/models/data.py index 3d863a3fb2..a0e8751461 100644 --- a/tests/serializers/models/data.py +++ b/tests/serializers/models/data.py @@ -4,6 +4,7 @@ The following classes are for testing basic data marshalling, including NULL values, where allowed. The basic idea is to have a model for each Django data type. """ + import uuid from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation diff --git a/tests/serializers/models/natural.py b/tests/serializers/models/natural.py index 1e439b34eb..cfc57b1127 100644 --- a/tests/serializers/models/natural.py +++ b/tests/serializers/models/natural.py @@ -1,4 +1,5 @@ """Models for test_natural.py""" + import uuid from django.db import models diff --git a/tests/serializers/test_data.py b/tests/serializers/test_data.py index e1cb776d83..6361dc0c05 100644 --- a/tests/serializers/test_data.py +++ b/tests/serializers/test_data.py @@ -6,6 +6,7 @@ test case that is capable of testing the capabilities of the serializers. This includes all valid data values, plus forward, backwards and self references. """ + import datetime import decimal import uuid diff --git a/tests/servers/tests.py b/tests/servers/tests.py index ea49c11534..05898009d5 100644 --- a/tests/servers/tests.py +++ b/tests/servers/tests.py @@ -1,6 +1,7 @@ """ Tests for django.core.servers. """ + import errno import os import socket diff --git a/tests/sessions_tests/models.py b/tests/sessions_tests/models.py index 6eda26f22a..93f80b347d 100644 --- a/tests/sessions_tests/models.py +++ b/tests/sessions_tests/models.py @@ -3,6 +3,7 @@ This custom Session model adds an extra column to store an account ID. In real-world applications, it gives you the option of querying the database for all active sessions for a particular account. """ + from django.contrib.sessions.backends.db import SessionStore as DBStore from django.contrib.sessions.base_session import AbstractBaseSession from django.db import models diff --git a/tests/signals/models.py b/tests/signals/models.py index b758244749..5fb9f9f772 100644 --- a/tests/signals/models.py +++ b/tests/signals/models.py @@ -1,6 +1,7 @@ """ Testing signals before/after saving and deleting. """ + from django.db import models diff --git a/tests/template_tests/test_parser.py b/tests/template_tests/test_parser.py index e40a5611e2..eb3bb49113 100644 --- a/tests/template_tests/test_parser.py +++ b/tests/template_tests/test_parser.py @@ -2,6 +2,7 @@ Testing some internals of the template processing. These are *not* examples to be copied in user code. """ + from django.template import Library, TemplateSyntaxError from django.template.base import ( FilterExpression, diff --git a/tests/test_client/tests.py b/tests/test_client/tests.py index cfd040f7bc..18b7aaef6c 100644 --- a/tests/test_client/tests.py +++ b/tests/test_client/tests.py @@ -19,6 +19,7 @@ testing against the contexts and templates produced by a view, rather than the HTML rendered to the end-user. """ + import copy import itertools import tempfile diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py index a3545ebfc7..4d47fb63af 100644 --- a/tests/test_client_regress/tests.py +++ b/tests/test_client_regress/tests.py @@ -1,6 +1,7 @@ """ Regression tests for the Test Client, especially the customized assertions. """ + import itertools import os diff --git a/tests/test_runner/test_discover_runner.py b/tests/test_runner/test_discover_runner.py index 5fc35b7bf2..a845f6dd67 100644 --- a/tests/test_runner/test_discover_runner.py +++ b/tests/test_runner/test_discover_runner.py @@ -658,9 +658,10 @@ class DiscoverRunnerTests(SimpleTestCase): @mock.patch("faulthandler.enable") def test_faulthandler_enabled_fileno(self, mocked_enable): # sys.stderr that is not an actual file. - with mock.patch( - "faulthandler.is_enabled", return_value=False - ), captured_stderr(): + with ( + mock.patch("faulthandler.is_enabled", return_value=False), + captured_stderr(), + ): DiscoverRunner(enable_faulthandler=True) mocked_enable.assert_called() diff --git a/tests/test_runner/tests.py b/tests/test_runner/tests.py index 569fd7e862..b900ff69ea 100644 --- a/tests/test_runner/tests.py +++ b/tests/test_runner/tests.py @@ -1,6 +1,7 @@ """ Tests for django test runner """ + import collections.abc import multiprocessing import os @@ -992,17 +993,21 @@ class RunTestsExceptionHandlingTests(unittest.TestCase): """ Teardown functions are run when run_checks() raises SystemCheckError. """ - with mock.patch( - "django.test.runner.DiscoverRunner.setup_test_environment" - ), mock.patch("django.test.runner.DiscoverRunner.setup_databases"), mock.patch( - "django.test.runner.DiscoverRunner.build_suite" - ), mock.patch( - "django.test.runner.DiscoverRunner.run_checks", side_effect=SystemCheckError - ), mock.patch( - "django.test.runner.DiscoverRunner.teardown_databases" - ) as teardown_databases, mock.patch( - "django.test.runner.DiscoverRunner.teardown_test_environment" - ) as teardown_test_environment: + with ( + mock.patch("django.test.runner.DiscoverRunner.setup_test_environment"), + mock.patch("django.test.runner.DiscoverRunner.setup_databases"), + mock.patch("django.test.runner.DiscoverRunner.build_suite"), + mock.patch( + "django.test.runner.DiscoverRunner.run_checks", + side_effect=SystemCheckError, + ), + mock.patch( + "django.test.runner.DiscoverRunner.teardown_databases" + ) as teardown_databases, + mock.patch( + "django.test.runner.DiscoverRunner.teardown_test_environment" + ) as teardown_test_environment, + ): runner = DiscoverRunner(verbosity=0, interactive=False) with self.assertRaises(SystemCheckError): runner.run_tests( @@ -1016,18 +1021,22 @@ class RunTestsExceptionHandlingTests(unittest.TestCase): SystemCheckError is surfaced when run_checks() raises SystemCheckError and teardown databases() raises ValueError. """ - with mock.patch( - "django.test.runner.DiscoverRunner.setup_test_environment" - ), mock.patch("django.test.runner.DiscoverRunner.setup_databases"), mock.patch( - "django.test.runner.DiscoverRunner.build_suite" - ), mock.patch( - "django.test.runner.DiscoverRunner.run_checks", side_effect=SystemCheckError - ), mock.patch( - "django.test.runner.DiscoverRunner.teardown_databases", - side_effect=ValueError, - ) as teardown_databases, mock.patch( - "django.test.runner.DiscoverRunner.teardown_test_environment" - ) as teardown_test_environment: + with ( + mock.patch("django.test.runner.DiscoverRunner.setup_test_environment"), + mock.patch("django.test.runner.DiscoverRunner.setup_databases"), + mock.patch("django.test.runner.DiscoverRunner.build_suite"), + mock.patch( + "django.test.runner.DiscoverRunner.run_checks", + side_effect=SystemCheckError, + ), + mock.patch( + "django.test.runner.DiscoverRunner.teardown_databases", + side_effect=ValueError, + ) as teardown_databases, + mock.patch( + "django.test.runner.DiscoverRunner.teardown_test_environment" + ) as teardown_test_environment, + ): runner = DiscoverRunner(verbosity=0, interactive=False) with self.assertRaises(SystemCheckError): runner.run_tests( @@ -1041,18 +1050,19 @@ class RunTestsExceptionHandlingTests(unittest.TestCase): Exceptions on teardown are surfaced if no exceptions happen during run_checks(). """ - with mock.patch( - "django.test.runner.DiscoverRunner.setup_test_environment" - ), mock.patch("django.test.runner.DiscoverRunner.setup_databases"), mock.patch( - "django.test.runner.DiscoverRunner.build_suite" - ), mock.patch( - "django.test.runner.DiscoverRunner.run_checks" - ), mock.patch( - "django.test.runner.DiscoverRunner.teardown_databases", - side_effect=ValueError, - ) as teardown_databases, mock.patch( - "django.test.runner.DiscoverRunner.teardown_test_environment" - ) as teardown_test_environment: + with ( + mock.patch("django.test.runner.DiscoverRunner.setup_test_environment"), + mock.patch("django.test.runner.DiscoverRunner.setup_databases"), + mock.patch("django.test.runner.DiscoverRunner.build_suite"), + mock.patch("django.test.runner.DiscoverRunner.run_checks"), + mock.patch( + "django.test.runner.DiscoverRunner.teardown_databases", + side_effect=ValueError, + ) as teardown_databases, + mock.patch( + "django.test.runner.DiscoverRunner.teardown_test_environment" + ) as teardown_test_environment, + ): runner = DiscoverRunner(verbosity=0, interactive=False) with self.assertRaises(ValueError): # Suppress the output when running TestDjangoTestCase. diff --git a/tests/transactions/models.py b/tests/transactions/models.py index 9506bace35..3d4c7d7e44 100644 --- a/tests/transactions/models.py +++ b/tests/transactions/models.py @@ -6,6 +6,7 @@ each transaction upon a write, but you can decorate a function to get commit-on-success behavior. Alternatively, you can manage the transaction manually. """ + from django.db import models diff --git a/tests/urlpatterns_reverse/tests.py b/tests/urlpatterns_reverse/tests.py index 89dfd0deba..8384f55b3c 100644 --- a/tests/urlpatterns_reverse/tests.py +++ b/tests/urlpatterns_reverse/tests.py @@ -1,6 +1,7 @@ """ Unit tests for reverse URL lookups. """ + import pickle import sys import threading diff --git a/tests/urls.py b/tests/urls.py index 7d3a3a790a..67c4d4091b 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -3,5 +3,4 @@ should be added within the test folders, and use TestCase.urls to set them. This helps the tests remain isolated. """ - urlpatterns = [] diff --git a/tests/utils_tests/test_datastructures.py b/tests/utils_tests/test_datastructures.py index 07229f25ed..d5d90b68fc 100644 --- a/tests/utils_tests/test_datastructures.py +++ b/tests/utils_tests/test_datastructures.py @@ -1,6 +1,7 @@ """ Tests for stuff in django.utils.datastructures. """ + import collections.abc import copy import pickle diff --git a/tests/utils_tests/test_jslex.py b/tests/utils_tests/test_jslex.py index ee13eb4d64..59551930c6 100644 --- a/tests/utils_tests/test_jslex.py +++ b/tests/utils_tests/test_jslex.py @@ -1,4 +1,5 @@ """Tests for jslex.""" + # originally from https://bitbucket.org/ned/jslex from django.test import SimpleTestCase diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py index 54c5da056e..03db07a61c 100644 --- a/tests/view_tests/tests/test_debug.py +++ b/tests/view_tests/tests/test_debug.py @@ -332,14 +332,19 @@ class DebugViewTests(SimpleTestCase): with tempfile.NamedTemporaryFile(prefix=template_name) as tmpfile: tempdir = os.path.dirname(tmpfile.name) template_path = os.path.join(tempdir, template_name) - with override_settings( - TEMPLATES=[ - { - "BACKEND": "django.template.backends.django.DjangoTemplates", - "DIRS": [tempdir], - } - ] - ), self.assertLogs("django.request", "ERROR"): + with ( + override_settings( + TEMPLATES=[ + { + "BACKEND": ( + "django.template.backends.django.DjangoTemplates" + ), + "DIRS": [tempdir], + } + ] + ), + self.assertLogs("django.request", "ERROR"), + ): response = self.client.get( reverse( "raises_template_does_not_exist", kwargs={"path": template_name} From d3171009f2c648a70613350d7e564a824890fed6 Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 26 Jan 2024 12:46:08 +0100 Subject: [PATCH 02/37] Ignored 305757aec19c9d5111e4d76095ae0acd66163e4b formatting changes in git blame. --- .git-blame-ignore-revs | 1 + 1 file changed, 1 insertion(+) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index bf8b701ed2..d979bc49b4 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -1,3 +1,4 @@ +305757aec19c9d5111e4d76095ae0acd66163e4b ca88caa1031c0de545d82de8d90dcae0e03651fb c5cd8783825b5f6384417dac5f3889b4210b7d08 9c19aff7c7561e3a82978a272ecdaad40dda5c00 From e676f56527e70c4587567b97f9cfd22ab396142c Mon Sep 17 00:00:00 2001 From: Mariusz Felisiak Date: Fri, 26 Jan 2024 13:41:52 +0100 Subject: [PATCH 03/37] Bumped versions in Github actions configuration. --- .github/workflows/docs.yml | 4 ++-- .github/workflows/linters.yml | 12 ++++++------ .github/workflows/schedule_tests.yml | 12 ++++++------ .github/workflows/schedules.yml | 2 +- .github/workflows/screenshots.yml | 4 ++-- .github/workflows/selenium.yml | 4 ++-- .github/workflows/tests.yml | 4 ++-- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a12a9eac31..9b88b9be93 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,7 +28,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -46,7 +46,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install blacken-docs diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index f590b5a7dc..3875e755f9 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -25,13 +25,13 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install flake8 - name: flake8 - # Pinned to v2.0.0. - uses: liskin/gh-problem-matcher-wrap@d8afa2cfb66dd3f982b1950429e652bc14d0d7d2 + # Pinned to v3.0.0. + uses: liskin/gh-problem-matcher-wrap@e7b7beaaafa52524748b31a381160759d68d61fb with: linters: flake8 run: flake8 @@ -42,13 +42,13 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install isort - name: isort - # Pinned to v2.0.0. - uses: liskin/gh-problem-matcher-wrap@d8afa2cfb66dd3f982b1950429e652bc14d0d7d2 + # Pinned to v3.0.0. + uses: liskin/gh-problem-matcher-wrap@e7b7beaaafa52524748b31a381160759d68d61fb with: linters: isort run: isort --check --diff django tests scripts diff --git a/.github/workflows/schedule_tests.yml b/.github/workflows/schedule_tests.yml index 38f8db000c..b4ef57cd6a 100644 --- a/.github/workflows/schedule_tests.yml +++ b/.github/workflows/schedule_tests.yml @@ -26,7 +26,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' @@ -45,7 +45,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: pypy-3.10-nightly cache: 'pip' @@ -80,7 +80,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: pypy-3.10-nightly cache: 'pip' @@ -102,7 +102,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' @@ -117,7 +117,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -153,7 +153,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' diff --git a/.github/workflows/schedules.yml b/.github/workflows/schedules.yml index f1079606a7..041a0b3362 100644 --- a/.github/workflows/schedules.yml +++ b/.github/workflows/schedules.yml @@ -21,7 +21,7 @@ jobs: branch: - main steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 with: github-token: ${{secrets.SCHEDULE_WORKFLOW_TOKEN}} script: | diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml index 231374a66f..c85a258949 100644 --- a/.github/workflows/screenshots.yml +++ b/.github/workflows/screenshots.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' @@ -40,7 +40,7 @@ jobs: echo "Generated screenshots for ${{ github.event.pull_request.head.sha }} at $(date)" >> $GITHUB_STEP_SUMMARY - name: Upload screenshots - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: screenshots-${{ github.event.pull_request.head.sha }} path: tests/screenshots/ diff --git a/.github/workflows/selenium.yml b/.github/workflows/selenium.yml index 57c82be242..fa916a0ded 100644 --- a/.github/workflows/selenium.yml +++ b/.github/workflows/selenium.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -59,7 +59,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 18a3b7f083..abe7c78a25 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -29,7 +29,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' @@ -47,7 +47,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' From 9c6d7b4a678b7bbc6a1a14420f686162ba9016f5 Mon Sep 17 00:00:00 2001 From: Michael K Date: Sat, 27 Jan 2024 10:54:02 +0000 Subject: [PATCH 04/37] Updated Python license for 2024. --- LICENSE.python | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/LICENSE.python b/LICENSE.python index a25ce5cf7b..9f995bf7bf 100644 --- a/LICENSE.python +++ b/LICENSE.python @@ -13,12 +13,12 @@ A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +National Research Initiatives (CNRI, see https://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. @@ -30,7 +30,7 @@ https://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation was a sponsoring member of the PSF. -All Python releases are Open Source (see http://www.opensource.org for +All Python releases are Open Source (see https://opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. @@ -94,10 +94,8 @@ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. +i.e., "Copyright (c) 2001-2024 Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make From 2005530920e7c290bb1cf7d9ada155250faa81ad Mon Sep 17 00:00:00 2001 From: David Smith Date: Sun, 28 Jan 2024 08:41:25 +0000 Subject: [PATCH 05/37] Refs #35058 -- Made centroid available on all geometry types. Centroid is available on all geometry types since GDAL 1.8.0. Previously it was restricted to Polygon. https://gdal.org/doxygen/classOGRGeometry.html#a91787f669b2a148169667e270e7e40df --- django/contrib/gis/gdal/geometries.py | 16 ++++++++-------- docs/ref/contrib/gis/gdal.txt | 13 +++++++++---- docs/releases/5.1.txt | 3 +++ tests/gis_tests/gdal_tests/test_geom.py | 23 +++++++++++++++++++++++ 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/django/contrib/gis/gdal/geometries.py b/django/contrib/gis/gdal/geometries.py index 4c1f74d4b0..85ef265ad1 100644 --- a/django/contrib/gis/gdal/geometries.py +++ b/django/contrib/gis/gdal/geometries.py @@ -565,6 +565,14 @@ class OGRGeometry(GDALBase): """ return self._geomgen(capi.geom_union, other) + @property + def centroid(self): + """Return the centroid (a Point) of this Polygon.""" + # The centroid is a Point, create a geometry for this. + p = OGRGeometry(OGRGeomType("Point")) + capi.get_centroid(self.ptr, p.ptr) + return p + # The subclasses for OGR Geometry. class Point(OGRGeometry): @@ -708,14 +716,6 @@ class Polygon(OGRGeometry): # Summing up the number of points in each ring of the Polygon. return sum(self[i].point_count for i in range(self.geom_count)) - @property - def centroid(self): - "Return the centroid (a Point) of this Polygon." - # The centroid is a Point, create a geometry for this. - p = OGRGeometry(OGRGeomType("Point")) - capi.get_centroid(self.ptr, p.ptr) - return p - # Geometry Collection base class. class GeometryCollection(OGRGeometry): diff --git a/docs/ref/contrib/gis/gdal.txt b/docs/ref/contrib/gis/gdal.txt index f6e9ef0964..be6e738160 100644 --- a/docs/ref/contrib/gis/gdal.txt +++ b/docs/ref/contrib/gis/gdal.txt @@ -839,6 +839,15 @@ coordinate transformation: Returns the region consisting of the union of this geometry and the other, as a new :class:`OGRGeometry` object. + .. attribute:: centroid + + Returns a :class:`Point` representing the centroid of this geometry. + + .. versionchanged:: 5.1 + + ``centroid`` was promoted from a :class:`.Polygon` only attribute to + being available on all geometry types. + .. attribute:: tuple Returns the coordinates of a point geometry as a tuple, the @@ -939,10 +948,6 @@ coordinate transformation: An alias for :attr:`shell`. - .. attribute:: centroid - - Returns a :class:`Point` representing the centroid of this polygon. - .. class:: GeometryCollection .. method:: add(geom) diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt index 463551e85c..34ef350afd 100644 --- a/docs/releases/5.1.txt +++ b/docs/releases/5.1.txt @@ -83,6 +83,9 @@ Minor features via the new :attr:`.OGRGeometry.is_measured` and :attr:`.Point.m` properties, and the :meth:`.OGRGeometry.set_measured` method. +* :attr:`.OGRGeometry.centroid` is now available on all supported geometry + types. + :mod:`django.contrib.messages` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/gis_tests/gdal_tests/test_geom.py b/tests/gis_tests/gdal_tests/test_geom.py index a2aa9d8e36..6bb7aa0724 100644 --- a/tests/gis_tests/gdal_tests/test_geom.py +++ b/tests/gis_tests/gdal_tests/test_geom.py @@ -877,6 +877,29 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin): geom = OGRGeometry("POINT M (1 2 3)") self.assertEqual(geom.geos.wkt, "POINT (1 2)") + def test_centroid(self): + point = OGRGeometry("POINT (1 2 3)") + self.assertEqual(point.centroid.wkt, "POINT (1 2)") + linestring = OGRGeometry("LINESTRING (0 0 0, 1 1 1, 2 2 2)") + self.assertEqual(linestring.centroid.wkt, "POINT (1 1)") + polygon = OGRGeometry("POLYGON((0 0, 10 0, 10 10, 0 10, 0 0))") + self.assertEqual(polygon.centroid.wkt, "POINT (5 5)") + multipoint = OGRGeometry("MULTIPOINT (0 0,10 10)") + self.assertEqual(multipoint.centroid.wkt, "POINT (5 5)") + multilinestring = OGRGeometry( + "MULTILINESTRING ((0 0,0 10,0 20),(10 0,10 10,10 20))" + ) + self.assertEqual(multilinestring.centroid.wkt, "POINT (5 10)") + multipolygon = OGRGeometry( + "MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0))," + "((20 20, 20 30, 30 30, 30 20, 20 20)))" + ) + self.assertEqual(multipolygon.centroid.wkt, "POINT (15 15)") + geometrycollection = OGRGeometry( + "GEOMETRYCOLLECTION (POINT (110 260),LINESTRING (110 0,110 60))" + ) + self.assertEqual(geometrycollection.centroid.wkt, "POINT (110 30)") + class DeprecationTests(SimpleTestCase): def test_coord_setter_deprecation(self): From 41aaf5aafa537b7a34d8065b5aa25c83e4d6d408 Mon Sep 17 00:00:00 2001 From: Claude Paroz Date: Sun, 28 Jan 2024 17:11:18 +0100 Subject: [PATCH 06/37] Updated translations from Transifex. Forwardport of 3cc35aafabb1523c39332ee83e769b085ed3d923 from stable/5.0.x. --- django/conf/locale/af/LC_MESSAGES/django.mo | Bin 24608 -> 27068 bytes django/conf/locale/af/LC_MESSAGES/django.po | 25 +- django/conf/locale/ckb/LC_MESSAGES/django.mo | Bin 33473 -> 34047 bytes django/conf/locale/ckb/LC_MESSAGES/django.po | 24 +- django/conf/locale/es/LC_MESSAGES/django.mo | Bin 29266 -> 29242 bytes django/conf/locale/es/LC_MESSAGES/django.po | 14 +- django/conf/locale/hu/LC_MESSAGES/django.mo | Bin 29185 -> 29197 bytes django/conf/locale/hu/LC_MESSAGES/django.po | 15 +- django/conf/locale/mn/LC_MESSAGES/django.mo | Bin 24783 -> 33282 bytes django/conf/locale/mn/LC_MESSAGES/django.po | 247 ++++--- django/conf/locale/mr/LC_MESSAGES/django.mo | Bin 1591 -> 27608 bytes django/conf/locale/mr/LC_MESSAGES/django.po | 656 ++++++++++-------- django/conf/locale/uz/LC_MESSAGES/django.mo | Bin 27466 -> 26443 bytes django/conf/locale/uz/LC_MESSAGES/django.po | 139 ++-- .../conf/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 26598 -> 26927 bytes .../conf/locale/zh_Hans/LC_MESSAGES/django.po | 22 +- .../admin/locale/af/LC_MESSAGES/django.mo | Bin 17249 -> 17407 bytes .../admin/locale/af/LC_MESSAGES/django.po | 3 +- .../admin/locale/ckb/LC_MESSAGES/django.mo | Bin 21719 -> 22877 bytes .../admin/locale/ckb/LC_MESSAGES/django.po | 36 +- .../admin/locale/ckb/LC_MESSAGES/djangojs.mo | Bin 6604 -> 7671 bytes .../admin/locale/ckb/LC_MESSAGES/djangojs.po | 63 +- .../admin/locale/mn/LC_MESSAGES/django.mo | Bin 14812 -> 22236 bytes .../admin/locale/mn/LC_MESSAGES/django.po | 135 +++- .../admin/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 21488 bytes .../admin/locale/mr/LC_MESSAGES/django.po | 562 +++++++++------ .../admin/locale/sw/LC_MESSAGES/django.mo | Bin 17415 -> 17698 bytes .../admin/locale/sw/LC_MESSAGES/django.po | 17 +- .../admin/locale/uz/LC_MESSAGES/django.mo | Bin 4610 -> 4634 bytes .../admin/locale/uz/LC_MESSAGES/django.po | 74 +- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 16506 -> 16917 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 21 +- .../locale/zh_Hans/LC_MESSAGES/djangojs.mo | Bin 5052 -> 5715 bytes .../locale/zh_Hans/LC_MESSAGES/djangojs.po | 33 +- .../admindocs/locale/af/LC_MESSAGES/django.mo | Bin 2514 -> 3063 bytes .../admindocs/locale/af/LC_MESSAGES/django.po | 11 +- .../admindocs/locale/mn/LC_MESSAGES/django.mo | Bin 7607 -> 7108 bytes .../admindocs/locale/mn/LC_MESSAGES/django.po | 35 +- .../auth/locale/ckb/LC_MESSAGES/django.mo | Bin 9295 -> 9710 bytes .../auth/locale/ckb/LC_MESSAGES/django.po | 10 +- .../auth/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 10430 bytes .../auth/locale/mr/LC_MESSAGES/django.po | 221 ++++-- .../locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 1004 bytes .../locale/mr/LC_MESSAGES/django.po | 27 +- .../flatpages/locale/af/LC_MESSAGES/django.mo | Bin 2279 -> 2282 bytes .../flatpages/locale/af/LC_MESSAGES/django.po | 6 +- .../flatpages/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 2040 bytes .../flatpages/locale/mr/LC_MESSAGES/django.po | 42 +- .../gis/locale/mn/LC_MESSAGES/django.mo | Bin 2346 -> 2323 bytes .../gis/locale/mn/LC_MESSAGES/django.po | 16 +- .../gis/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 510 bytes .../gis/locale/mr/LC_MESSAGES/django.po | 28 +- .../humanize/locale/mn/LC_MESSAGES/django.mo | Bin 6020 -> 4863 bytes .../humanize/locale/mn/LC_MESSAGES/django.po | 193 ++---- .../humanize/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 1506 bytes .../humanize/locale/mr/LC_MESSAGES/django.po | 311 +++++---- .../postgres/locale/ckb/LC_MESSAGES/django.mo | Bin 2994 -> 3414 bytes .../postgres/locale/ckb/LC_MESSAGES/django.po | 12 +- .../postgres/locale/mr/LC_MESSAGES/django.mo | Bin 0 -> 1132 bytes .../postgres/locale/mr/LC_MESSAGES/django.po | 97 +++ .../redirects/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 1530 bytes .../redirects/locale/mr/LC_MESSAGES/django.po | 34 +- .../sessions/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 768 bytes .../sessions/locale/mr/LC_MESSAGES/django.po | 19 +- .../sites/locale/mr/LC_MESSAGES/django.mo | Bin 468 -> 884 bytes .../sites/locale/mr/LC_MESSAGES/django.po | 19 +- docs/releases/5.0.2.txt | 3 +- 67 files changed, 1955 insertions(+), 1215 deletions(-) create mode 100644 django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo create mode 100644 django/contrib/postgres/locale/mr/LC_MESSAGES/django.po diff --git a/django/conf/locale/af/LC_MESSAGES/django.mo b/django/conf/locale/af/LC_MESSAGES/django.mo index efb8b0fd9ec3c08286ea0c031d575e8cf32a5977..8b37fdb3fb67343b1dba75f3c0afa947c22ef8d8 100644 GIT binary patch delta 9471 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 KtU541nE7`hRw9G| delta 7223 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 diff --git a/django/conf/locale/af/LC_MESSAGES/django.po b/django/conf/locale/af/LC_MESSAGES/django.po index 405b9f6481..cbd7abfedc 100644 --- a/django/conf/locale/af/LC_MESSAGES/django.po +++ b/django/conf/locale/af/LC_MESSAGES/django.po @@ -358,15 +358,15 @@ msgstr "Gee ’n geldige e-posadres." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Gee ’n geldige “slak” in wat bestaan ​​uit letters, syfers, onderstreep of " +"Gee ’n geldige “slak” wat bestaan ​​uit letters, syfers, onderstreep of " "koppelteken." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." msgstr "" -"Gee ’n geldige “slak” in wat bestaan ​​uit Unicode-letters, syfers, " -"onderstreep of koppelteken." +"Gee ’n geldige “slak” wat bestaan ​​uit Unicode-letters, syfers, onderstreep " +"of koppelteken." msgid "Enter a valid IPv4 address." msgstr "Gee ’n geldige IPv4-adres." @@ -846,6 +846,8 @@ msgid "" "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " "may be ambiguous or it may not exist." msgstr "" +"%(datetime)s kon nie in die tydsone %(current_timezone)s vertolk word nie; " +"dit is dalk dubbelsinnig, of bestaan dalk nie." msgid "Clear" msgstr "Maak skoon" @@ -1186,12 +1188,19 @@ msgid "" "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"U sien hierdie boodskap omdat dié HTTPS-werf vereis dat u webblaaier ’n " +"“Referer header” moet stuur, maar dit is nie gestuur nie. Hierdie header is " +"vir sekuriteitsredes nodig om te verseker dat u blaaier nie deur derde " +"partye gekaap is nie." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" "enable them, at least for this site, or for HTTPS connections, or for “same-" "origin” requests." msgstr "" +"As “Referer headers” in u blaaier gedeaktiveer is, heraktiveer hulle asb. " +"ten minste vir dié werf, of vir HTTPS-verbindings, of vir “same-origin”-" +"versoeke." msgid "" "If you are using the tag or " @@ -1200,6 +1209,11 @@ msgid "" "If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"Indien u die -etiket gebruik " +"of die “Referrer-Policy: no-referrer” header gebruik, verwyder hulle asb. " +"Die CSRF-beskerming vereis die “Referer” header om streng kontrole van die " +"verwysende bladsy te doen. Indien u besorg is oor privaatheid, gebruik " +"alternatiewe soos vir skakels na derdepartywebwerwe." msgid "" "You are seeing this message because this site requires a CSRF cookie when " @@ -1214,6 +1228,8 @@ msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"Indien koekies in u blaaier gedeaktiveer is, aktiveerder hulle asb. ten " +"minste vir dié werf, of vir “same-origin”-versoeke." msgid "More information is available with DEBUG=True." msgstr "Meer inligting is beskikbaar met DEBUG=True." @@ -1255,6 +1271,7 @@ msgstr "Geen %(verbose_name)s gevind vir die soektog" msgid "Page is not “last”, nor can it be converted to an int." msgstr "" +"Bladsy is nie “last” nie, en dit kan nie omgeskakel word na ’n heelgetal nie." #, python-format msgid "Invalid page (%(page_number)s): %(message)s" @@ -1262,7 +1279,7 @@ msgstr "Ongeldige bladsy (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" +msgstr "Leë lys en “%(class_name)s.allow_empty” is vals." msgid "Directory indexes are not allowed here." msgstr "Gidsindekse word nie hier toegelaat nie." diff --git a/django/conf/locale/ckb/LC_MESSAGES/django.mo b/django/conf/locale/ckb/LC_MESSAGES/django.mo index ca3d949bce562d31ba9e4788a64cc3c58a20a7e8..cf41a447ecde4122b491f355385323f33f344a87 100644 GIT binary patch delta 7893 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 delta 7482 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 diff --git a/django/conf/locale/ckb/LC_MESSAGES/django.po b/django/conf/locale/ckb/LC_MESSAGES/django.po index af7fef26d7..0d78c77e4b 100644 --- a/django/conf/locale/ckb/LC_MESSAGES/django.po +++ b/django/conf/locale/ckb/LC_MESSAGES/django.po @@ -5,14 +5,14 @@ # Bawar Jalal, 2020-2021 # Bawar Jalal, 2020 # kosar tofiq , 2020-2021 -# Swara , 2022-2023 +# Swara , 2022-2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-25 06:49+0000\n" -"Last-Translator: Swara , 2022-2023\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Swara , 2022-2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -55,7 +55,7 @@ msgid "Catalan" msgstr "کاتالانی" msgid "Central Kurdish (Sorani)" -msgstr "" +msgstr "کوردی" msgid "Czech" msgstr "چیکی" @@ -297,6 +297,9 @@ msgstr "تاتاری" msgid "Udmurt" msgstr "ئودمورتی" +msgid "Uyghur" +msgstr "ئۆیغور" + msgid "Ukrainian" msgstr "ئۆکرانی" @@ -393,6 +396,15 @@ msgstr "دڵنیاببە ئەم نرخە گەورەترە یاخود یەکسا msgid "Ensure this value is a multiple of step size %(limit_value)s." msgstr "دڵنیابە کە ئەم بەهایە چەندانێکە لە قەبارەی هەنگاوی%(limit_value)s." +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"دڵنیابە ئەم بەهایە چەند هێندەیەکی قەبارەی هەنگاوەکانە %(limit_value)s, " +"دەستپێدەکات لە %(offset)s، بۆ نموونە %(offset)s، %(valid_value1)s، " +"%(valid_value2)s، هتد." + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -504,7 +516,7 @@ msgid "String (up to %(max_length)s)" msgstr "ڕیزبەند (تا %(max_length)s)" msgid "String (unlimited)" -msgstr "" +msgstr "ڕیز(بێسنوور)" msgid "Comma-separated integers" msgstr "ژمارە تەواوەکان بە کۆما جیاکراونەتەوە" diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo index d95011b09bcad99706dce20d37b72b7b21724de1..f84b5336745b47b61617180820b20eaa524e6de4 100644 GIT binary patch delta 2839 zcmXZd3rv+|9LMqJsHjIxyy68xUS+$0GtCX~ z5;o0KE$M~}CwL3G*|glet)=l@*Z_nf`%JAB=@ z|9+eBR-bc^(w$r6oZI|@bK~$a_Q1@s&h^B(I1<-j01xBScnAAoVut5997wzbQ!rxj zNmRcF*dLQJor}VWnJ(N^m|_((%sew6ljvB4&2TG{uPehASb^>FU2ETmt%*N14`4L$ zG1P>ouqB?uu6Qvs>|84f_o(pWzt*AIi_Uc>_G4R&Lk*CMZSYBKjl;1UreiP6MJ2ov zHPJ5Yf)Ug_wb%*kQO}4s{ zBr5SUsKhT@{Wa`B{JR-`NI?U(%km~lL~U7rRE8sP5C%~XF2nA)0hQPuvkJ9iH8>1^ zKqc%O@7zK3;}vYc0~nd$+yEcvpEJ?9cn-DnC02wVOmdDt_f@uYpJDXN&W*yO_#8Hx zBPMe!#H%p@D^WXk1XJ)V>M}N3oI1rzJR4)FFKm+Y-#|eFMNntgfQfhwwUVf*-WHEW zo$)+#9fpYa;578{PvcBSO}renLm#1bqS~xQ^{ZFR{O&S^6?g-+^|NxkGhB$;>ZPcG zw%~BwflZeOn-gC`P4Js}6Z47hT0CvK_xx;Bzxmi17hzbJrIdnv8+BRAP!sILCvYz+ zv1(Kz^{9zY;Bt=a6jl%iXK+k-0rh%r&$YJzyAwxH&mXb+?{hi-wp9E?1^2@Jg1T&d zXL=o{p%TeMCAPrg5{p-wYf&pJH8-OcRAKGAtbQ+Qyeez|a;Clihp12@U!zuh3YF<4 z>v+TB+xRi{|De8*yJvY5*P#+@K&|{ZYN8)eTYVn2W4BQKZleM^B@%A zLJS>ZQJDs?D~>^J;dJbVA=H+wLT&L|=6cl1Hep9BL*1nhF$4d^HaP4x@A)9=h_kR0 z_s_jTK@%6DCR}Z<$5`TbupNG4^|h#-YCwI<&tq@AiAucHJnyXIP>Cg)sTf846l%O@ zuqE@mpfzNn63A8q&anCrY6S(Dgo{ykVH>94Q5=fbQ6H?>eD8}n6%&ZdF%b`79R7?w z@jiw%V03|(aR6Hq55*QZ3j5#~)YcYYb6kb$w+5rI6qVp6?2Fq_{f?me)uS%mag4{) zsJHEI0sH?tg@;yAFyEVa32NY#r~%eu8m`Aw+>hGoi>Qh3;dXq8O1x}=SHA=Gd<2zH zmFj(5R=h%7SIGWfrBF#0dT>pVH}N`DywTiZmYF+H3BG4W%zf7Wg;`_PS^F{bTU25v z!W8@zPGc*)XdSMax6D7x`>4bkQP2H{dd|PlTX9EZfvy*7#qnm6nQW$+{()8qlppF6 z8`fryp+-Ybu$CM%7d7-8R0<)h&&T$}g{V)^D(r)0n2fc^xwv1Eb9NcU{Ayq|Qst6M zy!wg~H`Xnq;t>^m&fMZf-n~A9>BOzy;HAOwI2ucF2!4knuo1Q9p*1JE?j9I7F|;&P zv>=qwFIX5VE+|PDJFlpyWJT(LgutM{;F`+d<7VX>Gvdn+X5^PgXZEfcnHiJzKMpW~ A#sB~S delta 2877 zcmXZedu+~E9LMofdRNp_cS9?sn02bUt%m8CR!2?EC2fbQ;+fvmT>8g6o7jzQsXWLc zC1SHB#h41~GfUXAk&(1>S-YF1riojYVYb92_WtzuP2_oXmp&i7n?zY1LmJ9j1Q z&_A((y0La6ATa3^rprcFuNgI6iGI!Y7H}!xU`9 zRBXc$7@y=VCA()uBHoU=nu04AcNw7>n5$jrrII3-K{rg-W;< zHBJNe#1LwpCiGzo>iO#dYq*0MRNS|QG|r(n@i>gZS*QUDQ3IA>$I;+W;vf#kM%2WY zQHfteC4SfH?_)f1rx!f~2^2J7GHRks)Rs*~WjGs0V-f1X53n!pLiImpo&?%YvK!ZvKhBN&?D+^8_lzcSCcK^$t`Ojd+nz2qGK+)uMOUrfn&ZUSDwN$8vH zIU5HOZ^cABjM}mDn1a_)m(TaI7iXao_u~NE&>`o)i-HCUq0X)qlkh%jB?ISpTRabS z#;=<@u$cH5&c%NGXq+n4#2=z|=xfwYoHCnG{aO?=zq?CeEj~nT{pxw%8NP+e_z`n#G)br=9{`W%8zY7&tsNi0>zfqTM zLXp?80+q-*RAO&h{Eo%7=62K$)R~{47PQ~m8?3$&HQq^U|Dnj<{~xJPB0r;6+>Xlh zj&*!!ari5IgsAU^`a&K>P27x1uoboPOQ?zdL~Zp=)Q-6YUcYcug0TS#&rs-r8YmZg zVLs}Mw;ZS73LJ)qP!qRcBHlu-jq@$E+l>Q=H=z3MLLJ?gsPRvu7S@a-G4P8uL@e?$ z?TT7S5-P(KR3fREg=whvRmdyuYH%!mhp*v1)Dc$lYVfUbyKx8JFyCJ6jhj@`@g)to z;S_q)Asv-zE@}q~P+M4qeXs_V&=%Ade`M}Nt!xkWzGv&8#k&q6(4ggW99 z^l|^(N(!2IBWl8}=1$aBeu{DUjny}y&a@TvEx(C_@ewNV!KL0=XP^?xG_x>*cp7TF znHb6ZuE-inPzm_efYnxCgR#T`9Dl> zr0T=Ctk_1}{3`o@nZjYR(1Y8`yoq<9;@#$6v)(+2O7MsoGEZ3h_vRV1+1f9fzoHUr zn@=Hz!c~mI+t%Tp>B_x{BF#8dVm{P!eNfLOp;kNsS)dymyw-C-Kx=-U8adU>HS^4T zb1rIx0@TQ*R$pnZLXEr@l|hZwug7l08&DtlEtrh;aK^y>HHYT}+%9iK_J33aWn;bcr)$^SHQ2|kB)n1R3Hv*@e#7Mh1jbb46BxnA2+ z)8|zCOUn{xlrHgC6eo^fUF|O~U0j@zmNscwd9lANwWP9q;;6(iqsNSXf}gZe{G>N* hobs?!ur|AU@X?^S;O6Z3;J)mFpfAVQ&^sr2, 2021 # mpachas , 2022 # monobotsoft , 2012 +# Natalia (Django Fellow), 2024 # ntrrgc , 2013 # ntrrgc , 2013 # Pablo, 2015 @@ -46,15 +47,16 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 06:49+0000\n" -"Last-Translator: Uriel Medina , 2020-2021,2023\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Natalia (Django Fellow), 2024\n" "Language-Team: Spanish (http://app.transifex.com/django/django/language/" "es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" msgid "Afrikaans" msgstr "Africano" @@ -1203,7 +1205,7 @@ msgstr ", " #, python-format msgid "%(num)d year" msgid_plural "%(num)d years" -msgstr[0] "%(num)d años" +msgstr[0] "%(num)d año" msgstr[1] "%(num)d años" msgstr[2] "%(num)d años" @@ -1238,8 +1240,8 @@ msgstr[2] "%(num)d horas" #, python-format msgid "%(num)d minute" msgid_plural "%(num)d minutes" -msgstr[0] "%(num)d minutos" -msgstr[1] "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" msgstr[2] "%(num)d minutos" msgid "Forbidden" diff --git a/django/conf/locale/hu/LC_MESSAGES/django.mo b/django/conf/locale/hu/LC_MESSAGES/django.mo index 621965a691502672aaf17f9a586671ec2f571282..f55eb626b48eba934ee472ff97e832190233b013 100644 GIT binary patch delta 2943 zcmXZedvwor9LMp`Zta4Z4o+oK zoI0!4PA4fkJEM+{<90^5oLrjI>EJ{q4tDf>?fd@6jW-Li3;ER+??#O~ zX!$c3LVSCi^EWsCv&17aFwGkfhTRz$iGi4moYxJ+U>uBXaG3RHU^wvXm8gmJsFEGWme^?dJE$jqfU(#z-MOKdgz;E}T6i;Rot>yB z{>a>qdh%*)kN(3no}qCTH6io`Z=onuJOumWC{#t3Vmn-q5%?i$!%wjVeub%c81;^u za3cmyaIOZo;9EFmqH~wo-<_t>M4~3cxySg$Bc#!gM>rkzik3CUe&@E+&;kcA9xq}K49;|}C-y;=dMaw- z64a%94_D#0xCK)JpyB7(9o5y}N&`;~{E+z?Zy%VW|Gr z7>*q*j>RD2UbsELxkTJad~~LB-{HJj-oawBJY!K6>w&63I_e-(vv~h1(JT_|?ebBj zJB-@k4(dR6Q3rX5niw?OizCcv)VNL-`z($(lTh;pm?@~rjhapUweUC+y3Lc!S*Vld zp(ZZ0{1V(tT#4;4ZjLuD#T<wW*}*qeAZrr|nli>FZYuVWj$kF7Bx+p`nu!Fr?C^Y^#JJk*3D)CpIh zPPhj3)B7flzzvo^fqG?UaX2Qwl8P~$#Ey~1kb%X0^iqPfVIy?ilh-ZE5$UdJfz zpW8%38&{!9Q)3>)c;b50!Z%SH-9x?8$JQUkx7LGr2$&D z`h9d{(Fnnn*b-NxHr$A+z*f{NIb`|M<~h^>FQT6Gchp9=P!$L-@E)j@*%o8TcScoo zcmeg-B}pTp-+_IojcZW{I)I^g7=8F7_QXF>@33{Dw{bVDB2GYUd;*`qGv;~Jx>qnf zfUg4^iT^61{x@kfyyD&Rx&_|GM^F=fHcwiCWb%_i#)EcWhL zII3dNeoMrdaTrQRk~zpswf?cFjV4(<-ONUnv=CK+a?}BqS-jG$G}oH`H)v?!+vdCG zHggy1K)Ws8kJ_Nxtg-yp7)bu0?Cpb90JwD#}NcmM%{!Eh|V(@Fn+4 z9#Fe^bVEqYwaO3T;uq$WnqO`2OdU1VKd2K~{mrg;M^;NYy=BEY* XWN!I2zad~+ZFRxqh~R6LpSb@4@cEXI delta 2931 zcmXZedu+~E9LMqVXsb6{>9lhzy`x9KMS$@omf+X5&piCXf$UybCq% zJIi0gFye>9T%e)xk0oB1^=4R(b14jr#zxo;*{{pQQ0#%tFx&d`Fp_u_HpU6~CQic$ zEJe**icN84PQdHfNFs{FHq-;EFcuG?9#D;X;1!I(TJty5o8CoLEHu}-cGwm*t{*nX zVW|02Q0vUZa4Zd2#}XVw;v>|=v#64Nk4^B7XMn1*3_UYw3u#Jx}zDaJVb7^83tYQfzYjR&wF22p4H zH&)_vJdW!|IQKdB9_id|)^`_aye6@KlymjCH{ZEJIhtd@m&nVyonxHK!Mn)yaNWjw zrCy53#M@D&K8>k(4ZGpL7N-_?70N>$QAtA_aPA8ldcYCXn_tKF_yRj%;yAC=IjD*A zP?vH8uEL|Z88g_m?!tM@#6K_^BJs@Wy4B*{Jb@FcNc7pIZTH!C9#F=Ay@Y=#dp2J6k3Y2Jq0p`I5=vqT|k!c^1_7ov8! z4E3uwfCKPT%h#Ze>@xPnzQv1C8(NRL6Pr*K+J+jp19gOZkT1_2L5k)=W_tM|)VvZ@h03rg_s^}N zp@p}h&V0Z5HKq}tL_PQpYM}?HGkt3PVSH=tiPKScq7Xx{7@9o}HKE$9vHT^AuUh=0c?-4RZHw=s=07l>SpR<*LH;$W zVvPeOUZSbl62s|8HanS_*54bo&|r&)n+2$nPC->*4r&9%7B4g_%w=X^B@GSy#9U); zFe_0T+G6oe)B;uJKFc4(M&yrL{y6HZI)SNp0d-mb!k!pCpHG|n=LYe!jKncqiz%gE zdP5jlD{f*(Ap;UC#- z7yLbLeR}7CrL)Rvs>&0``^)_0T?iO(d=;DPX4m=_2T#oz9Tl3M Hp6>n!r7ev= diff --git a/django/conf/locale/hu/LC_MESSAGES/django.po b/django/conf/locale/hu/LC_MESSAGES/django.po index 54dd7ef6ca..117789e33e 100644 --- a/django/conf/locale/hu/LC_MESSAGES/django.po +++ b/django/conf/locale/hu/LC_MESSAGES/django.po @@ -4,6 +4,7 @@ # Akos Zsolt Hochrein , 2018 # András Veres-Szentkirályi, 2016-2021,2023 # Attila Nagy <>, 2012 +# Balázs Meskó , 2024 # Balázs R, 2023 # Dóra Szendrei , 2017 # Istvan Farkas , 2019 @@ -17,8 +18,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 06:49+0000\n" -"Last-Translator: András Veres-Szentkirályi, 2016-2021,2023\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Balázs Meskó , 2024\n" "Language-Team: Hungarian (http://app.transifex.com/django/django/language/" "hu/)\n" "MIME-Version: 1.0\n" @@ -286,13 +287,13 @@ msgid "Telugu" msgstr "Telugu" msgid "Tajik" -msgstr "tadzsik" +msgstr "Tádzsik" msgid "Thai" msgstr "Thai" msgid "Turkmen" -msgstr "türkmén" +msgstr "Türkmén" msgid "Turkish" msgstr "Török" @@ -304,7 +305,7 @@ msgid "Udmurt" msgstr "Udmurt" msgid "Uyghur" -msgstr "ujgur" +msgstr "Ujgur" msgid "Ukrainian" msgstr "Ukrán" @@ -339,7 +340,7 @@ msgstr "Szindikáció" #. Translators: String used to replace omitted page numbers in elided page #. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. msgid "…" -msgstr "..." +msgstr "…" msgid "That page number is not an integer" msgstr "Az oldalszám nem egész szám." @@ -491,7 +492,7 @@ msgstr "Már létezik %(model_name)s ilyennel: %(field_labels)s." #, python-format msgid "Constraint “%(name)s” is violated." -msgstr "\"%(name)s\" kényszer megsértve." +msgstr "„%(name)s” megszorítás megsértve." #, python-format msgid "Value %(value)r is not a valid choice." diff --git a/django/conf/locale/mn/LC_MESSAGES/django.mo b/django/conf/locale/mn/LC_MESSAGES/django.mo index 06071c937ba416e0cf934bda3e4cf20a831e43ac..c35a525c44e3157b5540837dbd84eba58d01520c 100644 GIT binary patch literal 33282 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
f=ae6G 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 K6mg6^68sm(6ElPW delta 7974 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 TS#UzpmMEv+Qi@N_Cr&tG1 diff --git a/django/conf/locale/mn/LC_MESSAGES/django.po b/django/conf/locale/mn/LC_MESSAGES/django.po index d846523da5..47479f8f69 100644 --- a/django/conf/locale/mn/LC_MESSAGES/django.po +++ b/django/conf/locale/mn/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Jannis Leidel , 2011 # jargalan , 2011 # Tsolmon , 2011 +# Turmunkh Batkhuyag, 2023 # Zorig, 2013-2014,2016,2018 # Zorig, 2019 # Анхбаяр Анхаа , 2013-2016,2018-2019 @@ -16,10 +17,10 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 22:40+0200\n" -"PO-Revision-Date: 2019-11-05 07:28+0000\n" -"Last-Translator: Анхбаяр Анхаа \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,6 +34,9 @@ msgstr "Африк" msgid "Arabic" msgstr "Араб" +msgid "Algerian Arabic" +msgstr "Алжир Араб" + msgid "Asturian" msgstr "Астури" @@ -57,6 +61,9 @@ msgstr "Босни" msgid "Catalan" msgstr "Каталан" +msgid "Central Kurdish (Sorani)" +msgstr "Төв Курд (Сорани)" + msgid "Czech" msgstr "Чех" @@ -156,6 +163,9 @@ msgstr "Interlingua" msgid "Indonesian" msgstr "Индонези" +msgid "Igbo" +msgstr "Игбо" + msgid "Ido" msgstr "Идо" @@ -186,6 +196,9 @@ msgstr "Канад" msgid "Korean" msgstr "Солонгос" +msgid "Kyrgyz" +msgstr "Киргиз" + msgid "Luxembourgish" msgstr "Лүксенбүргиш" @@ -207,6 +220,9 @@ msgstr "Монгол" msgid "Marathi" msgstr "маратхи" +msgid "Malay" +msgstr "Малай" + msgid "Burmese" msgstr "Бирм" @@ -270,9 +286,15 @@ msgstr "Тамил" msgid "Telugu" msgstr "Тэлүгү" +msgid "Tajik" +msgstr "Тажик" + msgid "Thai" msgstr "Тайланд" +msgid "Turkmen" +msgstr "Турк хүн" + msgid "Turkish" msgstr "Турк" @@ -282,6 +304,9 @@ msgstr "Татар" msgid "Udmurt" msgstr "Удмурт" +msgid "Uyghur" +msgstr "Уйгур" + msgid "Ukrainian" msgstr "Украйн" @@ -312,6 +337,11 @@ msgstr "Статик файлууд" msgid "Syndication" msgstr "Нэгтгэл" +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + msgid "That page number is not an integer" msgstr "Хуудасны дугаар бүхэл тоо / Integer / биш байна" @@ -337,11 +367,15 @@ msgstr "Зөв имэйл хаяг оруулна уу" msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" +"Үсэг, тоо, доогуур зураас эсвэл зурааснаас бүрдсэн хүчинтэй \"slug\" оруулна " +"уу." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." msgstr "" +"Юникод үсэг, тоо, доогуур зураас, зурааснаас бүрдсэн хүчинтэй \"slug\" " +"оруулна уу." msgid "Enter a valid IPv4 address." msgstr "Зөв IPv4 хаяг оруулна уу. " @@ -369,6 +403,20 @@ msgstr "Энэ утга %(limit_value)s -с бага эсвэл тэнцүү б msgid "Ensure this value is greater than or equal to %(limit_value)s." msgstr "Энэ утга %(limit_value)s -с их эсвэл тэнцүү байх нөхцлийг хангана уу." +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "" +"Утга нь алхамын хэмжээнд %(limit_value)s-ээс олон байхыг " +"баталгаажуулна уу." + +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"Энэ утга нь алхмын хэмжээнд %(limit_value)s, %(offset)s-с эхлэн %(offset)s, " +"%(valid_value1)s, %(valid_value2)s гэх мэт утга байхыг баталгаажуулна уу." + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -425,6 +473,8 @@ msgid "" "File extension “%(extension)s” is not allowed. Allowed extensions are: " "%(allowed_extensions)s." msgstr "" +"Файлын өргөтгөл “%(extension)s” зөвшөөрөгдөөгүй байна. Боломжит өргөтгөлүүд: " +"%(allowed_extensions)s." msgid "Null characters are not allowed." msgstr "Хоосон тэмдэгт зөвшөөрөгдөхгүй." @@ -436,6 +486,10 @@ msgstr "ба" msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(field_labels)s талбар бүхий %(model_name)s аль хэдийн орсон байна." +#, python-format +msgid "Constraint “%(name)s” is violated." +msgstr "“%(name)s” хязгаарлалтыг зөрчсөн." + #, python-format msgid "Value %(value)r is not a valid choice." msgstr "%(value)r буруу сонголт байна." @@ -450,8 +504,8 @@ msgstr "Энэ хэсэг хоосон байж болохгүй." msgid "%(model_name)s with this %(field_label)s already exists." msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна." -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" #, python-format msgid "" "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." @@ -465,11 +519,11 @@ msgstr "Талбарийн төрөл нь : %(field_type)s" #, python-format msgid "“%(value)s” value must be either True or False." -msgstr "" +msgstr "\"“%(value)s” утга True эсвэл False байх ёстой.\"" #, python-format msgid "“%(value)s” value must be either True, False, or None." -msgstr "" +msgstr "“%(value)s” утга True, False, эсвэл None байх ёстой." msgid "Boolean (Either True or False)" msgstr "Boolean (Үнэн худлын аль нэг нь)" @@ -478,6 +532,9 @@ msgstr "Boolean (Үнэн худлын аль нэг нь)" msgid "String (up to %(max_length)s)" msgstr "Бичвэр (%(max_length)s хүртэл)" +msgid "String (unlimited)" +msgstr "Тэмдэг мөр (хязгааргүй)" + msgid "Comma-separated integers" msgstr "Таслалаар тусгаарлагдсан бүхэл тоо" @@ -486,12 +543,15 @@ msgid "" "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " "format." msgstr "" +"“%(value)s” утга нь буруу огнооны форматтай байна. Энэ нь YYYY-MM-DD " +"форматтай байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " "date." msgstr "" +"“%(value)s” утга зөв (YYYY-MM-DD) форматтай байна, гэхдээ буруу огноо байна." msgid "Date (without time)" msgstr "Огноо (цаггүй)" @@ -501,19 +561,23 @@ msgid "" "“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." "uuuuuu]][TZ] format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] форматтай байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" "[TZ]) but it is an invalid date/time." msgstr "" +"“%(value)s” утгын формат зөв байна (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"гэхдээ буруу огноо/цаг байна." msgid "Date (with time)" msgstr "Огноо (цагтай)" #, python-format msgid "“%(value)s” value must be a decimal number." -msgstr "" +msgstr "“%(value)s” утга нь бодит тоо байх ёстой." msgid "Decimal number" msgstr "Аравтын бутархайт тоо" @@ -523,6 +587,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." "uuuuuu] format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь [DD] [[HH:]MM:]ss[.uuuuuu] " +"форматтай байх ёстой." msgid "Duration" msgstr "Үргэлжлэх хугацаа" @@ -542,7 +608,7 @@ msgstr "Хөвөгч таслалтай тоо" #, python-format msgid "“%(value)s” value must be an integer." -msgstr "" +msgstr "“%(value)s” утга нь бүхэл тоо байх ёстой." msgid "Integer" msgstr "Бүхэл тоо" @@ -550,6 +616,9 @@ msgstr "Бүхэл тоо" msgid "Big (8 byte) integer" msgstr "Том (8 байт) бүхэл тоо" +msgid "Small integer" +msgstr "Бага тоон утна" + msgid "IPv4 address" msgstr "IPv4 хаяг" @@ -558,11 +627,14 @@ msgstr "IP хаяг" #, python-format msgid "“%(value)s” value must be either None, True or False." -msgstr "" +msgstr "\"“%(value)s” утга нь None, True эсвэл False байх ёстой.\"" msgid "Boolean (Either True, False or None)" msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)" +msgid "Positive big integer" +msgstr "Эерэг том бүхэл тоо" + msgid "Positive integer" msgstr "Бүхэл тоох утга" @@ -573,9 +645,6 @@ msgstr "Бага бүхэл тоон утга" msgid "Slug (up to %(max_length)s)" msgstr "Слаг (ихдээ %(max_length)s )" -msgid "Small integer" -msgstr "Бага тоон утна" - msgid "Text" msgstr "Текст" @@ -584,12 +653,16 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь HH:MM[:ss[.uuuuuu]] форматтай " +"байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " "invalid time." msgstr "" +"“%(value)s” утга зөв форматтай байна (HH:MM[:ss[.uuuuuu]]) гэхдээ буруу цаг " +"байна." msgid "Time" msgstr "Цаг" @@ -602,7 +675,7 @@ msgstr "Бинари өгөгдөл" #, python-format msgid "“%(value)s” is not a valid UUID." -msgstr "" +msgstr "“%(value)s” нь хүчинтэй UUID биш." msgid "Universally unique identifier" msgstr "UUID" @@ -613,6 +686,12 @@ msgstr "Файл" msgid "Image" msgstr "Зураг" +msgid "A JSON object" +msgstr "JSON объект " + +msgid "Value must be valid JSON." +msgstr "JSON утга байх боломжтой." + #, python-format msgid "%(model)s instance with %(field)s %(value)r does not exist." msgstr "%(field)s %(value)r утгатай %(model)s байхгүй байна." @@ -705,6 +784,9 @@ msgstr "Бүрэн утга оруулна уу." msgid "Enter a valid UUID." msgstr "Зөв UUID оруулна уу." +msgid "Enter a valid JSON." +msgstr "JSON-ийн бүтцээр оруулна уу." + #. Translators: This is the default suffix added to form field labels msgid ":" msgstr ":" @@ -713,20 +795,26 @@ msgstr ":" msgid "(Hidden field %(name)s) %(error)s" msgstr "(Нууц талбар%(name)s) %(error)s" -msgid "ManagementForm data is missing or has been tampered with" -msgstr "УдирдахФормын мэдээлэл олдсонгүй эсвэл өөрчлөгдсөн байна" +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm-ын өгөгдөл дутуу эсвэл өөрчилсөн байна. Дутуу талбарууд: " +"%(field_names)s. Хэрэв асуудал хэвээр байвал та алдааны тайлан гаргах " +"шаардлагатай байж магадгүй." #, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." -msgstr[0] "%d ихгүй форм илгээн үү" -msgstr[1] "%d ихгүй форм илгээн үү" +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." +msgstr[0] "Та хамгийн ихдээ %(num)d форм илгээнэ үү." +msgstr[1] "Та хамгийн ихдээ %(num)d форм илгээнэ үү." #, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." -msgstr[0] "%d эсвэл их форм илгээнэ үү" -msgstr[1] "%d эсвэл их форм илгээнэ үү" +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." +msgstr[0] "Та хамгийн багадаа %(num)d форм илгээнэ үү." +msgstr[1] "Та хамгийн багадаа %(num)d форм илгээнэ үү." msgid "Order" msgstr "Эрэмбэлэх" @@ -763,13 +851,15 @@ msgstr "Зөв сонголт хийнэ үү. Энэ утга сонголто #, python-format msgid "“%(pk)s” is not a valid value." -msgstr "" +msgstr "“%(pk)s” нь шаардлага хангаагүй утга байна." #, python-format msgid "" "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " "may be ambiguous or it may not exist." msgstr "" +"%(datetime)s нь %(current_timezone)s цагийн бүсэд хөрвүүлэх боломжгүй байна; " +"энэ нь хоёрдмол утгатай эсвэл байхгүй байж болно." msgid "Clear" msgstr "Цэвэрлэх" @@ -789,15 +879,7 @@ msgstr "Тийм" msgid "No" msgstr "Үгүй" -msgid "Year" -msgstr "Жил" - -msgid "Month" -msgstr "Сар" - -msgid "Day" -msgstr "Өдөр" - +#. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "тийм,үгүй,магадгүй" @@ -1071,43 +1153,40 @@ msgid ", " msgstr ", " #, python-format -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жил" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" - -msgid "0 minutes" -msgstr "0 минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" msgid "Forbidden" msgstr "Хориотой" @@ -1117,24 +1196,34 @@ msgstr "CSRF дээр уналаа. Хүсэлт таслагдсан." msgid "" "You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your Web browser, but none was sent. This header is " +"header” to be sent by your web browser, but none was sent. This header is " "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"Та энэ мэдэгдлийг харж байгаа нь таны веб хөтөчөөс 'Referer header'-ийг " +"HTTPS хуудасд илгээх шаардлагатай байгаатай холбоотой. Энэ нь гуравдагч " +"этгээдээс хамгаалахын тулд шаардлагатай." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" "enable them, at least for this site, or for HTTPS connections, or for “same-" "origin” requests." msgstr "" +"Хэрвээ та веб хөтөчөө 'Referer' толгойг идэвхигүй болгосон бол энэ хуудас, " +"HTTPS холболт эсвэл 'same-origin' хүсэлтэнд зориулж идэвхижүүлнэ үү." msgid "" "If you are using the tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"Хэрвээ та таг ашиглаж " +"байгаа бол эсвэл 'Referrer-Policy: no-referrer' толгойг нэмсэн бол, " +"эдгээрийг устгана уу. CSRF хамгаалалт 'Referer' толгойг чанд шалгалт хийхийг " +"шаарддаг. Хэрвээ та аюулгүй байдлыг чухалчилж байгаа бол гуравдагч сайтыг " +"холбохдоо ашиглана уу." msgid "" "You are seeing this message because this site requires a CSRF cookie when " @@ -1149,6 +1238,8 @@ msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"Хэрвээ та веб хөтөчийн \"cookies\"-г хаасан бол энэ хуудас эсвэл 'same-" +"origin' хүсэлтэнд зориулж идэвхижүүлнэ үү." msgid "More information is available with DEBUG=True." msgstr "DEBUG=True үед дэлгэрэнгүй мэдээлэл харах боломжтой." @@ -1183,13 +1274,14 @@ msgstr "" #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" msgstr "" +"Буруу огноо. '%(datestr)s' огноо '%(format)s' хэлбэрт тохирохгүй байна." #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Шүүлтүүрт таарах %(verbose_name)s олдсонгүй " msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" +msgstr "Хуудас \"сүүлчийн\" биш бөгөөд үүнийг int болгон хувиргах боломжгүй." #, python-format msgid "Invalid page (%(page_number)s): %(message)s" @@ -1197,7 +1289,7 @@ msgstr "Буруу хуудас (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" +msgstr "Хоосон жагсаалт ба “%(class_name)s.allow_empty” нь False байна." msgid "Directory indexes are not allowed here." msgstr "Файлын жагсаалтыг энд зөвшөөрөөгүй." @@ -1210,8 +1302,8 @@ msgstr "“%(path)s” хуудас байхгүй байна." msgid "Index of %(directory)s" msgstr "%(directory)s ийн жагсаалт" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "Джанго: Чанартай бөгөөд хугацаанд нь хийхэд зориулсан Web framework." +msgid "The install worked successfully! Congratulations!" +msgstr "Амжилттай суулгалаа! Баяр хүргэе!" #, python-format msgid "" @@ -1222,26 +1314,23 @@ msgstr "" "%(version)s/releases/\" target=\"_blank\" rel=\"noopener\">тэмдэглэл харах " -msgid "The install worked successfully! Congratulations!" -msgstr "Амжилттай суулгалаа! Баяр хүргэе!" - #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" "Таний тохиргооны файл дээр DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо хийгээгүй учраас " -"энэ хуудасыг харж байна." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо " +"хийгээгүй учраас энэ хуудасыг харж байна." msgid "Django Documentation" msgstr "Джанго баримтжуулалт" msgid "Topics, references, & how-to’s" -msgstr "" +msgstr "Сэдэв, лавлахууд болон зааврууд" msgid "Tutorial: A Polling App" msgstr "Хичээл: Санал асуулга App" diff --git a/django/conf/locale/mr/LC_MESSAGES/django.mo b/django/conf/locale/mr/LC_MESSAGES/django.mo index 46c9f342103c63ad23acec72862430d52d00074f..8cf9a708eacb3eb997ddab3c01825a262d3adfa3 100644 GIT binary patch literal 27608 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 F{vXubaRC4T delta 877 zcmYk3&ubGw6vrpFscl+oOk%XD(T!S)gp|ZKwgyB?lzM28+CUL{nTFM@-R_p%K(rt& zf{3Vy4y7OkdzgTrhz9&|kV221L{Ri3<3aEb@ZiCN-?!O<58ixc-hAi1H#6V92Hy58 ze~+}UGT1)&0r+S5A^5!j23Y3~#%S6Fwu9YZ7Z?URzyuftQ(!lk2SeaExD%Z8Sq4cz z3+@IhAo46T*B9IXgV?wQlJKq{e*{v&$9`ObqCB+97f)Gzw8+EoLjCK?MsH1bZ3qmSGi?~hkfy& zYZ=@U!NlRIBCm0iTdcUGSE}qR1a6g`v#yvP-9_EuR?TJ;y0ZY)grn>8tfXHvD%{eh z7hCde&giCF6_MQe<0mt@Tqc{>vf0A$SUL*}O>(!EDI=R}@|x`ww2OSfaBQt)JKWS= z@gS$Q)$4W9%x!kGt{^ss2gH$)De-%xf3R^|$)=K&wg> tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"तुम्ही जोडणी वापरत असल्यास किंवा \"रेफरर-पॉलिसी: नो-रेफरर\" हेडर समाविष्ट करत " +"असल्यास, कृपया ते काढून टाका. CSRF संरक्षणासाठी \"रेफरर\" हेडर कठोर रेफरर तपासणी करणे " +"आवश्यक आहे. तुम्हाला गोपनीयतेबद्दल काळजी वाटत असल्यास, तृतीय-पक्ष स्थळाच्या दुव्यासाठी सारखे पर्याय वापरा." msgid "" "You are seeing this message because this site requires a CSRF cookie when " "submitting forms. This cookie is required for security reasons, to ensure " "that your browser is not being hijacked by third parties." msgstr "" +"तुम्हाला हा संदेश दिसत आहे कारण अर्ज सुपूर्त करताना या स्थळाला CSRF कुकी आवश्यक आहे. तुमचा " +"ब्राउझर तृतीय पक्षांकडून हायजॅक केला जात नाही याची खात्री करण्यासाठी ही कुकी " +"सुरक्षिततेच्या कारणांसाठी आवश्यक आहे." msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"किमान या साइटसाठी किंवा \"समान-मूळ\" विनंत्यांसाठी, कृपया अक्षम केलेल्या ब्राउझर कुकीज " +"पुन्हा सक्षम करा." msgid "More information is available with DEBUG=True." -msgstr "" +msgstr "अधिक माहिती DEBUG=True सह उपलब्ध आहे." msgid "No year specified" -msgstr "" +msgstr "कोणतेही वर्ष नमूद केलेले नाही" msgid "Date out of range" -msgstr "" +msgstr "पल्ल्याच्या बाहेरची दिनांक" msgid "No month specified" -msgstr "" +msgstr "कोणताही महिना निर्दिष्ट केलेला नाही" msgid "No day specified" -msgstr "" +msgstr "कोणताही दिवस निर्दिष्ट केलेला नाही" msgid "No week specified" -msgstr "" +msgstr "कोणताही आठवडा निर्दिष्ट केलेला नाही" #, python-format msgid "No %(verbose_name_plural)s available" -msgstr "" +msgstr "कोणतेही %(verbose_name_plural)s उपलब्ध नाहीत" #, python-format msgid "" @@ -1149,64 +1214,67 @@ msgstr "" #, python-format msgid "No %(verbose_name)s found matching the query" -msgstr "" +msgstr "क्वेरीसह जुळणारे कोणतेही %(verbose_name)s सापडले नाही" msgid "Page is not “last”, nor can it be converted to an int." msgstr "" #, python-format msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" +msgstr "अवैध पान (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." msgstr "" msgid "Directory indexes are not allowed here." -msgstr "" +msgstr "डिरेक्टरी निर्देशकांना येथे परवानगी नाही." #, python-format msgid "“%(path)s” does not exist" -msgstr "" +msgstr "“%(path)s” अस्तित्वात नाही" #, python-format msgid "Index of %(directory)s" -msgstr "" +msgstr "%(directory)s चे निर्देशांक" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "" +msgid "The install worked successfully! Congratulations!" +msgstr "इंस्टॉलेशनने यशस्वीरित्या कार्य केले! अभिनंदन!" #, python-format msgid "" "View release notes for Django %(version)s" msgstr "" - -msgid "The install worked successfully! Congratulations!" -msgstr "" +"डिजांगो %(version)s साठी प्रदर्शित संदेश पहा" #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" +"तुम्ही हे पान पाहत आहात कारण तुमच्या सेटिंग्ज फाइलमध्ये DEBUG=True आहे आणि तुम्ही कोणतीही URL कॉन्फिगर केलेली नाही." msgid "Django Documentation" -msgstr "" +msgstr "जांगो दस्तऐवजीकरण" msgid "Topics, references, & how-to’s" -msgstr "" +msgstr "विषय, संदर्भ, आणि कसे करावे" msgid "Tutorial: A Polling App" -msgstr "" +msgstr "शिकवणी: मतदान अ‍ॅप" msgid "Get started with Django" -msgstr "" +msgstr "जॅंगो सोबत सुरवात करा" msgid "Django Community" -msgstr "" +msgstr "जॅंगो समुदाय" msgid "Connect, get help, or contribute" -msgstr "" +msgstr "जोडा, मदत मिळवा किंवा हातभार लावा" diff --git a/django/conf/locale/uz/LC_MESSAGES/django.mo b/django/conf/locale/uz/LC_MESSAGES/django.mo index 57f89e8f9306f73df275c9a56b278ec0522a8740..b003df83ef1d6d407d932a793cb838869b54eedf 100644 GIT binary patch delta 7611 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 ft0wm!8?tfG!%fLuJTm-$cFlO7 delta 8377 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 P{JJ++WY(Wv9!mRfpQvXb diff --git a/django/conf/locale/uz/LC_MESSAGES/django.po b/django/conf/locale/uz/LC_MESSAGES/django.po index 4e9b6cfa77..ad57ba91b7 100644 --- a/django/conf/locale/uz/LC_MESSAGES/django.po +++ b/django/conf/locale/uz/LC_MESSAGES/django.po @@ -4,15 +4,16 @@ # Abdulaminkhon Khaydarov , 2020 # Bedilbek Khamidov , 2019 # Claude Paroz , 2020 +# Shukrullo Turgunov , 2023 # Sukhrobbek Ismatov , 2019 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-19 20:23+0200\n" -"PO-Revision-Date: 2020-07-25 17:08+0000\n" -"Last-Translator: Abdulaminkhon Khaydarov \n" -"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: Shukrullo Turgunov , 2023\n" +"Language-Team: Uzbek (http://app.transifex.com/django/django/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -52,6 +53,9 @@ msgstr "Bosniya tili" msgid "Catalan" msgstr "Katalon tili" +msgid "Central Kurdish (Sorani)" +msgstr "" + msgid "Czech" msgstr "Chex tili" @@ -208,6 +212,9 @@ msgstr "Mo'g'ul tili" msgid "Marathi" msgstr "Marati tili" +msgid "Malay" +msgstr "" + msgid "Burmese" msgstr "Birma tili" @@ -289,6 +296,9 @@ msgstr "Tatar tili" msgid "Udmurt" msgstr "Udmurt tili" +msgid "Uyghur" +msgstr "" + msgid "Ukrainian" msgstr "Ukrain tili" @@ -319,6 +329,11 @@ msgstr "Statik fayllar" msgid "Syndication" msgstr "Sindikatsiya" +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + msgid "That page number is not an integer" msgstr "Bu sahifa raqami butun son emas" @@ -344,8 +359,8 @@ msgstr "To'g'ri elektron pochta manzilini kiriting." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Harflar, raqamlar, pastki chiziqlar yoki chiziqlardan iborat to'g'ri \"slug" -"\" ni kiriting." +"Harflar, raqamlar, pastki chiziqlar yoki chiziqlardan iborat to'g'ri " +"\"slug\" ni kiriting." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " @@ -382,6 +397,16 @@ msgid "Ensure this value is greater than or equal to %(limit_value)s." msgstr "" "Ushbu qiymat %(limit_value)s dan katta yoki unga teng ekanligini tekshiring." +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -446,6 +471,10 @@ msgstr "va" msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(field_labels)s bilan %(model_name)s allaqachon mavjud." +#, python-format +msgid "Constraint “%(name)s” is violated." +msgstr "" + #, python-format msgid "Value %(value)r is not a valid choice." msgstr "%(value)r qiymati to'g'ri tanlov emas." @@ -460,8 +489,8 @@ msgstr "Bu maydon bo‘sh bo‘lishi mumkin emas." msgid "%(model_name)s with this %(field_label)s already exists." msgstr "\"%(field_label)s\" %(model_name)s allaqachon mavjud." -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" #, python-format msgid "" "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." @@ -490,6 +519,9 @@ msgstr "Mantiqiy (Rost yoki Yolg'on)" msgid "String (up to %(max_length)s)" msgstr "Birikma uzunligi (%(max_length)s gacha)" +msgid "String (unlimited)" +msgstr "" + msgid "Comma-separated integers" msgstr "Vergul bilan ajratilgan butun sonlar" @@ -572,6 +604,9 @@ msgstr "Butun son" msgid "Big (8 byte) integer" msgstr "Katta (8 bayt) butun son" +msgid "Small integer" +msgstr "Kichik butun son" + msgid "IPv4 address" msgstr "IPv4 manzili" @@ -598,9 +633,6 @@ msgstr "Musbat kichik butun son" msgid "Slug (up to %(max_length)s)" msgstr "Slug uzunligi (%(max_length)s gacha)" -msgid "Small integer" -msgstr "Kichik butun son" - msgid "Text" msgstr "Matn" @@ -749,18 +781,21 @@ msgstr ":" msgid "(Hidden field %(name)s) %(error)s" msgstr "(Yashirilgan maydon %(name)s) %(error)s" -msgid "ManagementForm data is missing or has been tampered with" -msgstr "ManagementForm ma'lumotlari yo'q yoki o'zgartirilgan" +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" #, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." -msgstr[0] "Iltimos, %d ta yoki kamroq forma topshiring." +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." +msgstr[0] "" #, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." -msgstr[0] "Iltimos, %d ta yoki ko'proq forma topshiring." +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." +msgstr[0] "" msgid "Order" msgstr "Buyurtma" @@ -1098,34 +1133,34 @@ msgid ", " msgstr "," #, python-format -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%dyil" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d yil" #, python-format -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%doy" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)doy" #, python-format -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%dhafta" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d hafta" #, python-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%dkun" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d kun" #, python-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%dsoat" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d soat" #, python-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%dminut" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d daqiqa" msgid "Forbidden" msgstr "Taqiqlangan" @@ -1135,15 +1170,10 @@ msgstr "CSRF tekshiruvi amalga oshmadi. So‘rov bekor qilindi." msgid "" "You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your Web browser, but none was sent. This header is " +"header” to be sent by your web browser, but none was sent. This header is " "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" -"Siz ushbu xabarni ko'rmoqdasiz, chunki bu HTTPS saytida veb-brauzeringiz " -"tomonidan \"Referer header\" yuborilishi talab qilinadi, ammo hech biri " -"yuborilmadi. Ushbu sarlavha xavfsizlik nuqtai nazaridan, brauzeringizni " -"uchinchi shaxslar tomonidan o'g'irlanmasligini ta'minlash uchun talab " -"qilinadi." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" @@ -1159,8 +1189,8 @@ msgid "" "If you are using the tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" "Agar siz yorlig'idan yoki " "\"Referrer-Policy: no-referer\" sarlavhasidan foydalanayotgan bo'lsangiz, " @@ -1249,8 +1279,8 @@ msgstr "\"%(path)s\" mavjud emas" msgid "Index of %(directory)s" msgstr "%(directory)s indeksi" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "Django: muddati chegaralangan perfektsionistlar uchun veb freymvork." +msgid "The install worked successfully! Congratulations!" +msgstr "O'rnatish muvaffaqiyatli amalga oshdi! Tabriklaymiz!" #, python-format msgid "" @@ -1261,20 +1291,17 @@ msgstr "" "com/en/%(version)s/releases/\" target=\"_blank\" rel=\"noopener\"> " "nashrlarni ko'rish" -msgid "The install worked successfully! Congratulations!" -msgstr "O'rnatish muvaffaqiyatli amalga oshdi! Tabriklaymiz!" - #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" "Siz ushbu sahifani ko'rmoqdasiz, chunki DEBUG = True ifodasi sizning sozlamalar faylingizda ko'rsatilgan va " -"siz biron bir URL manzilini to'gri sozlamagansiz." +"com/en/%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG = True ifodasi sizning sozlamalar faylingizda " +"ko'rsatilgan va siz biron bir URL manzilini to'gri sozlamagansiz." msgid "Django Documentation" msgstr "Django Hujjatlari" diff --git a/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo b/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo index 39927e8d8feebbe396271c5032a5814c6e1a1ee0..55517ea7b6ef216d6aba49fc926fe16d9ab3d504 100644 GIT binary patch delta 7785 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 delta 7525 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 Ly|dHcD`EcwX{8#> diff --git a/django/conf/locale/zh_Hans/LC_MESSAGES/django.po b/django/conf/locale/zh_Hans/LC_MESSAGES/django.po index c0c6d6065f..097e77d4b4 100644 --- a/django/conf/locale/zh_Hans/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Fan Xu , 2022 # Ford Guo , 2022 # Huanqun Yang, 2022 +# jack yang, 2023 # jamin M , 2019 # Jannis Leidel , 2011 # Kevin Sze , 2012 @@ -32,17 +33,17 @@ # ced773123cfad7b4e8b79ca80f736af9, 2011-2012 # Ziya Tang , 2018 # 付峥 , 2018 -# Fangjiaqi77 <370358679@qq.com>, 2020 +# LatteFang <370358679@qq.com>, 2020 # Kevin Sze , 2012 # 高乐喆 , 2023 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-25 06:49+0000\n" -"Last-Translator: 高乐喆 , 2023\n" -"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: jack yang, 2023\n" +"Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -326,6 +327,9 @@ msgstr "鞑靼语" msgid "Udmurt" msgstr "乌德穆尔特语" +msgid "Uyghur" +msgstr "维吾尔语" + msgid "Ukrainian" msgstr "乌克兰语" @@ -420,6 +424,14 @@ msgstr "确保该值大于或等于%(limit_value)s。" msgid "Ensure this value is a multiple of step size %(limit_value)s." msgstr "确保该值是步长的倍数%(limit_value)s" +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"确保此值是步长 %(limit_value)s 的倍数,从 %(offset)s 开始,例如 " +"%(offset)s、%(valid_value1)s、%(valid_value2)s 等等。" + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " diff --git a/django/contrib/admin/locale/af/LC_MESSAGES/django.mo b/django/contrib/admin/locale/af/LC_MESSAGES/django.mo index 5d9adc95c2c9a180f4cf1c9cdb26f9a172aefbeb..bb91c2e475f5be7edb65780b1e413d8f18344535 100644 GIT binary patch delta 3732 zcmYk-dr*{B7{~Fm2q?;~a#3y>tB99C)QnUtBWf}gr_#wwWx2MSZi$90t(Rcc8q2Qc zE2V{(BFlRr2BZ}_Ia%4goSL#mvp>qLri+-BQ{Nx&sp*|Le9k%hzUMsWoacQxzQXhO zeV*7?squA&>j33EO20&7JRV~Tlhtd?&>qJ0#9`PA$6^lNj5pw7?2kum|6e$kc4mq( z#W)l7{Nu>bW(Ri0ChTNP%+D9=9PoY+lm~Kn~ z`jA*n2@b?^RAAM%zZUiUDjbHJFoF5aNA`x#uq*A8sFj>X1rpD8B%lwq@^sWr zjstKaDxhjSA8YLI^{7CaaUr&0C5~jZv0YTQQMnDLGin3wM?DbCbdRC}wX%EAi*={~ z8&HAm#!_rWO?(y=XeQB3#a!%%QJjbM7>C`m*?&#s%XW_-1GR!YEXM+j$Aze!szD8S z4mH8`WTJBCCe(9b)D~BweqV-t@qX0KZbvPk85O|697g3B%^^B8z!#`9KY=8&X-5Un znM~A*lTk;KgStQ8_76r)e2HzBBafOJQMnbxQoIKvco46}QL)}69+d~M1k>3+O?(Y% z!kMU*%tr-!7wRY;Ku*cjqXOK6q>FhO*)GI%*WNJm9(O^`V-U+9Y-DAZ>R~*p>`z6?+%=T3Md~Nu>>{VDO7-|eT*5TQ!S*T z2dCf|ycs!OvmP(PR@7_x16E@^2U>)SQCqkbC*U7A6tBwT8-P)qh;O5IIJ2Ld1JB@1 zw0B~XvZ^a#DT~vs*{H4eBV(E&)=9`%rWzISI@Fmzjq%uMZMMJfL+#k>sH6G-l{?>} zcJ3D(#r)<^Di33EfA`DvI%?oUxEw#lV!UC1`$b%Zx6|Hy4jhG+S)YifjQU}3sDn}K+?cWLLEf}No=zg z6?lvFfb}qHfk#mDoWO4Qo%M7f`>&+(3^t|;qo^CcM?H83HE{wN*9HB^$IT2vt)L9` z_Dn@3X&4i6DQczn+5T2!PV+u$oWD>zmk=A`o^=imr=tKB=`E<&EM(gYQ32JWR{9WX zqQ~v;>rnwTSob0cZazfa*N#f&bI7O0_=!$|#KurrN@XlA!Z&dfmJKsz4xT^<%P(|y z<``<_r?3Zlh&mZlQ9GB5%9R4V3Wp+jYNDtKH=xct@po_idM1` zCu96b{!!pGyd00BlJ5Lb?m#0@D;TOoAaAOf!RJu9@F14s zS6GMz{9{r7G*k|4$4BtY81`RVv4YQ25Z9nqbQZNUiKXuA(+!pFsi+T59%f@1X5b9e zN~=-#)uMLdQPfeav+a$j`L<#@w#29?yWhc%sdVVig`h(!~^) zx$k)e&Z4~<_55kf!lEnO9laVAP!%fB8jQox3MxA5m8fiAkJ{QTs55OtCCx{u2aluf zJBb?bGq#2*w&OZf(%el6+rHh-<=!;!0ozjCuQ~y5uBXLW<{i+pj`nuSKFXt% z8p$8oTl3&-$lxHY&DbG`Mt#>wezty|LZFGEKo@?sa zWIJhyvleKg UIsA54U|ujVyQt~J=-STz0AT#KI{*Lx delta 3600 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, 2020 # pejar hewrami , 2020 -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Abdulla Dlshad, 2023\n" +"PO-Revision-Date: 2013-04-25 07:05+0000\n" +"Last-Translator: Swara , 2022,2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -184,7 +184,7 @@ msgstr "" "دانەیەک زیاتر." msgid "Select this object for an action - {}" -msgstr "" +msgstr "ئەم تەنە هەڵبژێرە بۆ کردارێک - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." @@ -351,7 +351,7 @@ msgid "Clear selection" msgstr "پاککردنەوەی هەڵبژاردن" msgid "Breadcrumbs" -msgstr "" +msgstr "وردەنان" #, python-format msgid "Models in the %(name)s application" @@ -389,7 +389,7 @@ msgid "Enter a new password for the user %(username)s." msgstr "تێپەڕەوشەی نوێ بۆ بەکارهێنەری %(username)s بنوسە" msgid "Skip to main content" -msgstr "" +msgstr "تێیپەڕێنە بۆ ناوەڕۆکی سەرەکی" msgid "Welcome," msgstr "بەخێربێیت،" @@ -417,10 +417,10 @@ msgid "Filter" msgstr "پاڵاوتن" msgid "Hide counts" -msgstr "" +msgstr "ژماردن بشارەوە" msgid "Show counts" -msgstr "" +msgstr "ژماردن پیشانبدە" msgid "Clear all filters" msgstr "پاکردنەوەی هەموو پاڵاوتنەکان" @@ -436,13 +436,13 @@ msgid "Toggle sorting" msgstr "ڕیزکردنی پێچەوانە" msgid "Toggle theme (current theme: auto)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: خۆکار)" msgid "Toggle theme (current theme: light)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: ڕووناک)" msgid "Toggle theme (current theme: dark)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: تاریک)" msgid "Delete" msgstr "سڕینەوە" @@ -531,13 +531,13 @@ msgid "None available" msgstr "هیچ شتيک بەردەست نییە" msgid "Added:" -msgstr "" +msgstr "زیادکرا:" msgid "Changed:" -msgstr "" +msgstr "گۆڕدرا:" msgid "Deleted:" -msgstr "" +msgstr "سڕایەوە:" msgid "Unknown content" msgstr "ناوەڕۆکی نەزانراو" @@ -566,7 +566,7 @@ msgid "Toggle navigation" msgstr "کردنەوەو داخستنی ڕێنیشاندەر" msgid "Sidebar" -msgstr "" +msgstr "شریتی لاتەنیشت" msgid "Start typing to filter…" msgstr "دەست بکە بە نوسین بۆ پاڵاوتن..." @@ -585,8 +585,8 @@ msgstr "کردار" msgid "entry" msgid_plural "entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "تۆمار" +msgstr[1] "تۆمارەکان" msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " @@ -749,7 +749,7 @@ msgid "Reset my password" msgstr "دانانەوەی تێپەڕەوشەکەم" msgid "Select all objects on this page for an action" -msgstr "" +msgstr "هەموو تەنەکان لەم لاپەڕەیە بۆ کردارێک هەڵبژێرە" msgid "All dates" msgstr "هەموو بەروارەکان" diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo index f7415be678dd8478146432cceb3b5d2bb2208039..95cbda79074a6d1de7db822114475cc561d4ea89 100644 GIT binary patch delta 2484 zcmZXVZETZO6vt1u?iCnav17sp-DJ!Ot8<&^*cd1}@MSpJ5;Yo=Zfj)OOGmqnu!uFm zO=1Q?9-FX82p@=`sDxC48e_6V6Gt=}5}{oa^~<6-;!Avu@q@q9=XP^?({q3KoO|xQ z|L5NOJpHupkH*MXZf8^|ZCD9*B15EC+gVhUPqIbsg43`WI&ws4$~MCtP*ZmqzXLAC zf71AS41;hP@e#upY)0f5jeI&z!8~{lu7wxjdiW*Gg?}4n;i!NDLl1P~mq1da%=lG? zKBxlgU?yyU{A3GNwnRi)Xy^p3@Nu{scEEFxUrLn@%tM_nunejI4^-hLQ1dDwKdGV8 z`8Gq%+X`QSE%0TSgqq*a;4Idc5gHnJ7U}|Hun``Ho8dHMj5wFrEPyBRi{Wv22@b+G z_Pq#B8OC8T{*T7bW&dx+Ukg{l1{l%6qbAS`b-+Qm3Z5{$1U2sp)CF!BW)|2Jt%4rn zwNS_Hgqq(4SHlBv1)MZ|3u^vU0sF5V*Gymz-h}U1ZZA{>_d7(Yp`Z8}m&kK4uTX@h z9D@90k_t_74(fdGL0$MWsDiFTUC`;a$wey7n>I{9PC>3i&HEkd_?!rjtAQe@36(Gk>)|B43{wkJ z=|ZDW{V^)de--KjoQ2x|5!8i0hdS@qhCjh_cGAK5mBDpf0G>%AEgZNGd;;o(-B6Y7 zg+1_jxEFp8b-+^`tmX%yn~6qY6Fkg5FNc>=qx~~{O!W588s0Gc1?px03-XpkB$IvD zKrYmQg;153KtxM5RAJj8yC!Xr=`j0{#ciQlMs5|ln)YtMG$Tv=AQ{?== zGl4n79}Iss{1x(GsYTaAom@+cjnqw7!CF*kEw%&G3waNw7qA{nms?CjMcu0Jzm`Vq zVQd}d#k4eFYq2{peeJjksZwsJyOp{`#@DB+z|bpeFn!ux*n^lJ#YXHlY$w)=X^H5T z`mjyvnWEqM%CrOZ>&G`nny~vY{hZ#3ZNP5F(q+48Y)c2AzD4@6*=k~sz%7{mr#!@q zm%3DU<8U9O8f(L}=&jaLgXz~VUCL>No#O`rtAs^2du3* zMb?$h?R$dzqEvj=xMg*R;;w1_LRD3#*v^;I-e37_4H+KTF@%CPO&q@79?o}sre;6i#1#P?LR(j B%|rkI delta 1613 zcmX}sTWC~A9LMq5O*Anvrkj|UXkvD)(bh|}Pz}NH1!TMBT6*)$tBav~hcpnYx3hi5^2u;5$5yXYeR4pc4&z57pnFoVxG{ z>b`nTKVU1K#A~>X@!cAFpMZC;37_Lcd}r2GJJ(EkHa6l4b3N+50c^l;Q1_ihwZDOr za0Kh|jakV)seKFPbfMEKmg9KJU!Vs18V>~sj8P7abM6DoVhH!6_Vxs-pL3`IFQF## z5H-+is~=Tcx*jomYFYnQ8myxtf`hmchcStNqdNGUQOUYE(w7@RO=LeO4V*_^|IxgR z%-P*X4)>Uo?t5wVZ!u4~EX4W`lNsi5G*GmzwAU+9<$hF0TTo9nh#JU4b$k}5utL9L z1fMV)cFq0EGU~o^I!Ry%RlghSXg7r2IGkghYsoxjBh}yqFMvA!2WjJiY@|ABLOp3a zYUvkS{b%M{yB-{f15#tooRL)C?j|e@95-;xi)N47uo?@D5 z>V*wkUg&2QCG@llh(!cn>ieWsS*-E9$aGsZ+gN;2+O6D!^NGn;*5|1&ME?n;8N{bV zrwSzfFO(LRaG#+53A2c4g#HV22z?!GM6p8q>b%>dyS?6uM_x#=UWYUA);i?{gT=ms}pRH*RM*Cu! z#6WgeczJwlBAbXM!`)w5t|L{t)VnDaOKk1W zAOC&8d(aT^1C7gq6Gko+@=p&u%NK^+h(B_%kS`p5I#f8~<(iUyx;a_qg<4, 2023 -# Swara , 2022-2023 +# Swara , 2022-2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 03:19-0500\n" -"PO-Revision-Date: 2023-04-25 07:59+0000\n" -"Last-Translator: Mariusz Felisiak , 2023\n" +"POT-Creation-Date: 2023-09-18 15:04-0300\n" +"PO-Revision-Date: 2024-01-20 07:59+0000\n" +"Last-Translator: Swara , 2022-2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -68,7 +68,7 @@ msgstr "" #, javascript-format msgid "Type into this box to filter down the list of selected %s." -msgstr "" +msgstr "لەم بوخچەدا بنووسە بۆ ئەوەی لیستی هەڵبژێردراوەکان بپاڵێویت %s." msgid "Remove all" msgstr "لابردنی هەمووی" @@ -80,8 +80,8 @@ msgstr "کرتە بکە بۆ لابردنی هەموو ئەوانەی هەڵبژ #, javascript-format msgid "%s selected option not visible" msgid_plural "%s selected options not visible" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%sبژاردەی هەڵبژێردراو نابینرێت" +msgstr[1] "%s هەڵبژاردە هەڵبژێردراوەکان نابینرێن" msgid "%(sel)s of %(cnt)s selected" msgid_plural "%(sel)s of %(cnt)s selected" @@ -245,6 +245,55 @@ msgctxt "abbrev. month December" msgid "Dec" msgstr "‎بەفرانبار" +msgid "Sunday" +msgstr "یەکشەممە" + +msgid "Monday" +msgstr "دووشەممە" + +msgid "Tuesday" +msgstr "سێشەممە" + +msgid "Wednesday" +msgstr "چوارشەممە" + +msgid "Thursday" +msgstr "پێنجشەممە" + +msgid "Friday" +msgstr "هەینی" + +msgid "Saturday" +msgstr "شەممە" + +msgctxt "abbrev. day Sunday" +msgid "Sun" +msgstr "یەک" + +msgctxt "abbrev. day Monday" +msgid "Mon" +msgstr "دوو" + +msgctxt "abbrev. day Tuesday" +msgid "Tue" +msgstr "سێ" + +msgctxt "abbrev. day Wednesday" +msgid "Wed" +msgstr "چوار" + +msgctxt "abbrev. day Thursday" +msgid "Thur" +msgstr "پێنج" + +msgctxt "abbrev. day Friday" +msgid "Fri" +msgstr "هەینی" + +msgctxt "abbrev. day Saturday" +msgid "Sat" +msgstr "شەم" + msgctxt "one letter Sunday" msgid "S" msgstr "ی" diff --git a/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo b/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo index 82cb0bbb8e254c85e24c878d66ed16e4dac097ae..cf857e049ec58588d43ab868614a3f7d6cd1baa5 100644 GIT binary patch literal 22236 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 D)a+nX delta 3829 zcmYk;4RDmj9mny#5E3E~@(Kwr;YonJnFK;0L?jT=KtgN@$cwylKoSCZA-R(Xlw1U& zDDQ5Rb{rf59j8z#cv4#hY-t%vYsU-K8EUb`=}@7a$_&z%nTqZAclTt*o&4{!`@HV{ zclR#WPkFBU0)I-1e#uY{6C;U_qmB7J?v3Mva&3??srUyRig$1X#tb%QDQ00dZbuz| z9Vg?@QTP1|V{lNsF|nA8{cr^GsDK$wMHdvHZYV)@q#B1|y?eeB2hi?D{>*+p^q?cC zz8*!LKZ)D%9o&TzhZsX2%)6)oTtdC?I>zyS^A{>f9QcQ;Nic@0Nyc;>gX(!XCSoP# z;$qZwU093CEj(TyOd%PK+ zru`hYp?dveXvccYOg82??nY&zASIH~$;d6H29=2ws19w!Kn0bpR5I{=RBArOvG_Sg zVGQ%42gac~l!Po3GaMJ=Xw-cj$efx^)OCAM8M5yA9;# zKrPN=9;V_k)C)gDz35BS2=Ajh7@ZbLX&Q3Kb@yB4r?$E+fW&K1&8BtWNhXFK82s4 zQeVSKbs(^aidN%l*Lu{5n@|thhDzy9)CjHX_ucbHP#t^&^}x4L9XyBHo|kY3UO{c^ z#~IZIY{YWy|BtC~&LnYGDJpb*2=#zUREMfjFM85FUx#{Oo9j0BcsHt}hp^LQ%*)82 zO)4u~?-`HE>>PYX`@f#bcn;h`{!AJxWEoDuOth#MpGD2(MN|qys44g(YR>PV9vtmN zc8`PnnMyu%T|H_Fx4Q1bxBv%UqoTP#flBo`{0)AHm+&yX;LogJ@8nxO+tQT4kw__*WhYgjkE9jj{8vq>~`J%Ao=g+z+nz3rK1?8 zQd)oyU?pl~wWu3Aa1wT*=K3sZ|M$A*Z=*x|F6xEJg^}yWqNZ>O4#I87cbnNAprRhW ziVmJZvS+Tk?SJE=w9|?r9a)Y_@lIs>n3MQRyp3n@6f1clu43Y~@6RI1G#{b{^iO1# z!@pRXlEBzv(obbJCSWI$MRNc(^7l}?;&asE(#p|;GEmp&pPLCKcE2$`@omhoIRI0zmnb@C`n(HdOiz{$2)=rMN5@TsMVLbXVoFP;O zP9p2gT*M^2g&M$rF<$#WhT(_5AY8|z!v)o-j%>h-=)(#uox(2{cHmm9EMtq|4^fNs zn(Kcsns(Ylkq(VQt(i(!FQ)Q-vz_ zl=hv(Q^aaQ>uMoUM?6L>BLbWGXdrrszT$T)%z$~(t&{a|dbKuGW)sTJCN(IUb8SJD zHeyM*rmt8=?AFCJqS0-q^ZxL!mfBh@eMJjzz1vV~4-p&Ow&qSn8LB6=M)bX|(oDQe zuxU&yv5!#MOK7UTU7n6|sfz5-Ob$%pTW1SXbeHIJaXiv60~W%RE7J z5GwPDp~PV|+)~|FLH$0c1QPks;`(rp=i%UO5Gt{6wt`BGC7H3>;ePffqu6>n#HsQKGk$A$kC5;UBB$a#Y zXUPZc4^j&3jg))#tJGn^?11zJ`{(qrX|r2RmDlI2^ZM&dRin?}+P=k9wKmrU z*NzzN3GN-)J(3zT3lvtHE9UUFPN%=QC_Gm#7@rC_S;pE_*!f!k_cEUZIQ@kK}u6Uov)|6z} zLnZ0Kb0wcd+gHopvn^Ar?B<8Z4Y~T()wg=PP3TCt(iKc7kBhQ}Gj4i%Y;8qKPS6Rx zONX8bou?nYJ9~GUP*3PW=z=;JqF&*(Gyx?6JAI_Ji6~d%m{CCe9mf fSIo, 2013 # Jannis Leidel , 2011 # jargalan , 2011 +# Turmunkh Batkhuyag, 2023 # Zorig, 2016 -# Анхбаяр Анхаа , 2013-2016,2018-2019,2021 +# Анхбаяр Анхаа , 2013-2016,2018-2019,2021,2023 # Баясгалан Цэвлээ , 2011,2017 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-21 10:22+0200\n" -"PO-Revision-Date: 2021-11-16 17:18+0000\n" -"Last-Translator: Анхбаяр Анхаа \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,7 +25,7 @@ msgstr "" #, python-format msgid "Delete selected %(verbose_name_plural)s" -msgstr "Сонгосон %(verbose_name_plural)s-ийг устга" +msgstr "Сонгосон %(verbose_name_plural)s-ийг устгах" #, python-format msgid "Successfully deleted %(count)d %(items)s." @@ -74,10 +75,10 @@ msgid "Has date" msgstr "Огноотой" msgid "Empty" -msgstr "" +msgstr "Хоосон" msgid "Not empty" -msgstr "" +msgstr "Хоосон биш" #, python-format msgid "" @@ -152,7 +153,7 @@ msgstr "Лог бүртгэлийн обект" #, python-brace-format msgid "Added {name} “{object}”." -msgstr "" +msgstr "Нэмсэн {name} “{object}”." msgid "Added." msgstr "Нэмэгдсэн." @@ -162,7 +163,7 @@ msgstr "ба" #, python-brace-format msgid "Changed {fields} for {name} “{object}”." -msgstr "" +msgstr "Changed {fields} for {name} “{object}”." #, python-brace-format msgid "Changed {fields}." @@ -170,7 +171,7 @@ msgstr "Өөрчлөгдсөн {fields}." #, python-brace-format msgid "Deleted {name} “{object}”." -msgstr "" +msgstr "Устгасан {name} “{object}”." msgid "No fields changed." msgstr "Өөрчилсөн талбар алга байна." @@ -180,10 +181,15 @@ msgstr "Хоосон" msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." msgstr "" +"Нэгээс олныг сонгохын тулд \"Control\" эсвэл Mac компьютер дээр \"Command\" " +"товчоо дарна уу." + +msgid "Select this object for an action - {}" +msgstr "Сонголтоо хийхийн тулд энэ объектыг сонгоно уу - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." -msgstr "" +msgstr "{name} “{obj}” амжилттай нэмэгдлээ." msgid "You may edit it again below." msgstr "Та дараахийг дахин засах боломжтой" @@ -192,25 +198,30 @@ msgstr "Та дараахийг дахин засах боломжтой" msgid "" "The {name} “{obj}” was added successfully. You may add another {name} below." msgstr "" +"{name} “{obj}” амжилттай нэмэгдлээ. Та доорх {name}-ийг нэмэх боломжтой." #, python-brace-format msgid "" "The {name} “{obj}” was changed successfully. You may edit it again below." msgstr "" +"{name} \"{obj}\" амжилттай өөрчлөгдлөө. Та доорх талбаруудыг дахин засварлах " +"боломжтой." #, python-brace-format msgid "The {name} “{obj}” was added successfully. You may edit it again below." msgstr "" +" {name} \"{obj}\" амжилттай нэмэгдлээ. Та доор дахин шинэчлэх боломжтой." #, python-brace-format msgid "" "The {name} “{obj}” was changed successfully. You may add another {name} " "below." msgstr "" +"\"{name}\" \"{obj}\" амжилттай өөрчлөгдлөө. Доорх {name}-г нэмж оруулна уу." #, python-brace-format msgid "The {name} “{obj}” was changed successfully." -msgstr "" +msgstr "{name} \" {obj} \" амжилттай өөрчлөгдлөө." msgid "" "Items must be selected in order to perform actions on them. No items have " @@ -223,11 +234,11 @@ msgstr "Үйлдэл сонгоогүй." #, python-format msgid "The %(name)s “%(obj)s” was deleted successfully." -msgstr "" +msgstr "%(name)s “%(obj)s” амжилттай устгагдлаа." #, python-format msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" -msgstr "" +msgstr "“%(key)s” ID-тай %(name)sбайхгүй байна. Магадгүй устсан уу?" #, python-format msgid "Add %s" @@ -264,8 +275,9 @@ msgstr "%(cnt)s оос 0 сонгосон" msgid "Change history: %s" msgstr "Өөрчлөлтийн түүх: %s" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "%(instance)s %(class_name)s" @@ -298,7 +310,7 @@ msgid "Page not found" msgstr "Хуудас олдсонгүй." msgid "We’re sorry, but the requested page could not be found." -msgstr "" +msgstr "Уучлаарай, хүссэн хуудас олдсонгүй." msgid "Home" msgstr "Нүүр" @@ -316,6 +328,8 @@ msgid "" "There’s been an error. It’s been reported to the site administrators via " "email and should be fixed shortly. Thanks for your patience." msgstr "" +"Алдаа гарсан байна. И-мэйлээр админуудад мэдэгдэгдсэн бөгөөд тун удахгүй " +"засах болно. Хамтран ажилласанд баярлалаа." msgid "Run the selected action" msgstr "Сонгосон үйлдэлийг ажилуулах" @@ -333,6 +347,9 @@ msgstr "Бүгдийг сонгох %(total_count)s %(module_name)s" msgid "Clear selection" msgstr "Сонгосонг цэвэрлэх" +msgid "Breadcrumbs" +msgstr "Талхны үүрмэг" + #, python-format msgid "Models in the %(name)s application" msgstr "%(name)s хэрэглүүр дэх моделууд." @@ -344,12 +361,14 @@ msgid "View" msgstr "Харах" msgid "You don’t have permission to view or edit anything." -msgstr "" +msgstr "Та ямар ч харах эсвэл засах эрхгүй байна." msgid "" "First, enter a username and password. Then, you’ll be able to edit more user " "options." msgstr "" +"Эхлээд, хэрэглэгчийн нэр болон нууц үгээ оруулна уу. Дараа нь, та бусад " +"хэрэглэгчийн сонголтуудыг засварлах боломжтой болно." msgid "Enter a username and password." msgstr "Хэрэглэгчийн нэр ба нууц үгээ оруулна." @@ -358,15 +377,17 @@ msgid "Change password" msgstr "Нууц үг өөрчлөх" msgid "Please correct the error below." -msgstr "Доорх алдааг засна уу" - -msgid "Please correct the errors below." -msgstr "Доор гарсан алдаануудыг засна уу." +msgid_plural "Please correct the errors below." +msgstr[0] "Та доорх алдаануудыг засна уу." +msgstr[1] "Та доорх алдаануудыг засна уу." #, python-format msgid "Enter a new password for the user %(username)s." msgstr "%(username)s.хэрэглэгчид шинэ нууц үг оруулна уу." +msgid "Skip to main content" +msgstr "Үндсэн агуулга руу шилжих" + msgid "Welcome," msgstr "Тавтай морилно уу" @@ -392,8 +413,14 @@ msgstr "Сайтаас харах" msgid "Filter" msgstr "Шүүлтүүр" +msgid "Hide counts" +msgstr "Тооцоог нуух" + +msgid "Show counts" +msgstr "Тооцоог харуулах" + msgid "Clear all filters" -msgstr "" +msgstr "Бүх шүүлтүүрийг арилгах" msgid "Remove from sorting" msgstr "Эрэмблэлтээс хасах" @@ -405,6 +432,15 @@ msgstr "Эрэмблэх урьтамж: %(priority_number)s" msgid "Toggle sorting" msgstr "Эрэмбэлэлтийг харуул" +msgid "Toggle theme (current theme: auto)" +msgstr "Загварыг сэлгэх (одоогийн загвар: авто)" + +msgid "Toggle theme (current theme: light)" +msgstr "Загварыг сэлгэх (одоогийн загвар: өдрийн)" + +msgid "Toggle theme (current theme: dark)" +msgstr "Загварыг сэлгэх (одоогийн горим: шөнийн)" + msgid "Delete" msgstr "Устгах" @@ -437,7 +473,7 @@ msgid "Objects" msgstr "Бичлэгүүд" msgid "Yes, I’m sure" -msgstr "" +msgstr "Тийм, би итгэлтэй." msgid "No, take me back" msgstr "Үгүй, намайг буцаа" @@ -478,7 +514,7 @@ msgid " By %(filter_title)s " msgstr " %(filter_title)s -ээр" msgid "Summary" -msgstr "Нийт" +msgstr "Хураангуй" msgid "Recent actions" msgstr "Сүүлд хийсэн үйлдлүүд" @@ -489,6 +525,15 @@ msgstr "Миний үйлдлүүд" msgid "None available" msgstr "Үйлдэл алга" +msgid "Added:" +msgstr "Нэмсэн:" + +msgid "Changed:" +msgstr "Өөрчилсөн:" + +msgid "Deleted:" +msgstr "Устгасан:" + msgid "Unknown content" msgstr "Тодорхойгүй агуулга" @@ -497,6 +542,9 @@ msgid "" "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" +"Таны өгөгдлийн санг суулгахад ямар нэг алдаа гарлаа байна. Өгөгдлийн сангийн " +"тохирох хүснэгтүүдийг үүсгэсэн эсэхийг шалгаад, өгөгдлийн санг тохирох " +"хэрэглэгч унших боломжтой эсэхийг шалгаарай." #, python-format msgid "" @@ -510,13 +558,16 @@ msgid "Forgotten your password or username?" msgstr "Таны мартсан нууц үг эсвэл нэрвтэр нэр?" msgid "Toggle navigation" -msgstr "" +msgstr "Жолоодлого солбих" + +msgid "Sidebar" +msgstr "Хажуугийн самбар" msgid "Start typing to filter…" -msgstr "" +msgstr "Шүүхийн тулд бичиж эхлэх..." msgid "Filter navigation items" -msgstr "" +msgstr "Жолоодлогын зүйлсийг шүүх" msgid "Date/time" msgstr "Огноо/цаг" @@ -527,10 +578,17 @@ msgstr "Хэрэглэгч" msgid "Action" msgstr "Үйлдэл" +msgid "entry" +msgid_plural "entries" +msgstr[0] "оролт" +msgstr[1] "оролт" + msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " "admin site." msgstr "" +"Энэ объектод өөрчлөлтийн түүх байхгүй байна. Админ сайтаар нэмээгүй байх " +"магадлалтай." msgid "Show all" msgstr "Бүгдийг харуулах" @@ -581,8 +639,12 @@ msgstr "Өөр %(model)s нэмэх" msgid "Delete selected %(model)s" msgstr "Сонгосон %(model)s устгах" +#, python-format +msgid "View selected %(model)s" +msgstr "View selected %(model)s" + msgid "Thanks for spending some quality time with the web site today." -msgstr "" +msgstr "Өнөөдөр вэб сайтад цаг заваа зарцуулсанд баярлалаа." msgid "Log in again" msgstr "Ахин нэвтрэх " @@ -597,6 +659,8 @@ msgid "" "Please enter your old password, for security’s sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" +"Та аюулгүй байдлын үүднээс хуучин нууц үгээ оруулна уу, тэгээд шинэ нууц " +"үгээ хоёр удаа оруулнаар бид бичсэн эсэхийг баталгаажуулах боломжтой." msgid "Change my password" msgstr "Нууц үгээ солих" @@ -634,11 +698,15 @@ msgid "" "We’ve emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" +"Бид таны нууц үг тохируулах зааварчилгааг и-мэйлээр илгээлээ. Хэрэв таны " +"оруулсан и-мэйл дээр акаунт байвал хурдан авах ёстой." msgid "" "If you don’t receive an email, please make sure you’ve entered the address " "you registered with, and check your spam folder." msgstr "" +"Хэрэв та имэйл аваагүй бол та бүртгэлтэй хаяг оруулсан эсэхийг шалгана уу, " +"мөн спам хавтасыг шалгана уу." #, python-format msgid "" @@ -652,7 +720,7 @@ msgid "Please go to the following page and choose a new password:" msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:" msgid "Your username, in case you’ve forgotten:" -msgstr "" +msgstr "Та хэрэглэгчийн нэрээ мартсан бол:" msgid "Thanks for using our site!" msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!" @@ -665,6 +733,8 @@ msgid "" "Forgotten your password? Enter your email address below, and we’ll email " "instructions for setting a new one." msgstr "" +"Нууц үгээ мартсан уу? Доор имэйл хаягаа оруулна уу, бид шинэ нууц үг " +"тохируулах зааврыг имэйлээр илгээнэ." msgid "Email address:" msgstr "Имэйл хаяг:" @@ -672,6 +742,9 @@ msgstr "Имэйл хаяг:" msgid "Reset my password" msgstr "Нууц үгээ шинэчлэх" +msgid "Select all objects on this page for an action" +msgstr "Энэ хуудас дээрх бүх объектуудыг үйлдэл хийхийн тулд сонгоно уу" + msgid "All dates" msgstr "Бүх огноо" diff --git a/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo b/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo index d847b48ad67ec0416debfc5c01e7c64ab36f6563..51f8c63d965677ed59b9234e991d50564073a15f 100644 GIT binary patch literal 21488 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 kf=qdNxn2oKUuIfrg\n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-25 07:05+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -16,109 +17,143 @@ msgstr "" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#, python-format -msgid "Successfully deleted %(count)d %(items)s." -msgstr "" - -#, python-format -msgid "Cannot delete %(name)s" -msgstr "" - -msgid "Are you sure?" -msgstr "" - #, python-format msgid "Delete selected %(verbose_name_plural)s" msgstr "" +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "यशस्वीरीत्या %(count)d %(items)s घालवले गेले आहेत." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s घालवू शकत नाही" + +msgid "Are you sure?" +msgstr "तुम्हाला खात्री आहे का?" + msgid "Administration" -msgstr "" +msgstr "प्रशासन" msgid "All" -msgstr "" +msgstr "सर्व" msgid "Yes" -msgstr "" +msgstr "होय" msgid "No" -msgstr "" +msgstr "नाही" msgid "Unknown" -msgstr "" +msgstr "अज्ञात" msgid "Any date" -msgstr "" +msgstr "कोणतीही दिनांक" msgid "Today" -msgstr "" +msgstr "आज" msgid "Past 7 days" -msgstr "" +msgstr "मागील 7 दिवस" msgid "This month" -msgstr "" +msgstr "या महिन्यात" msgid "This year" -msgstr "" +msgstr "यावर्षी" + +msgid "No date" +msgstr "दिनांक नाही" + +msgid "Has date" +msgstr "दिनांक आहे" + +msgid "Empty" +msgstr "रिकामी" + +msgid "Not empty" +msgstr "रिकामी नाही" #, python-format msgid "" "Please enter the correct %(username)s and password for a staff account. Note " "that both fields may be case-sensitive." msgstr "" +"कृपया करून %(username)s आणि कर्मचारी खात्यासाठी अचूक गुप्तशब्द नमूद करा. लक्षात घ्या की " +"दोन्ही राखणे संवेदनशील असू शकतात." msgid "Action:" -msgstr "" +msgstr "क्रिया:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "अजून एक %(verbose_name)s जोडा" + +msgid "Remove" +msgstr "काढा" + +msgid "Addition" +msgstr "वाढ" + +msgid "Change" +msgstr "बदला" + +msgid "Deletion" +msgstr "वगळा" msgid "action time" -msgstr "" +msgstr "क्रियाकाळ" + +msgid "user" +msgstr "वापरकर्ता" + +msgid "content type" +msgstr "सामुग्री प्रकार" msgid "object id" msgstr "" +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) msgid "object repr" msgstr "" msgid "action flag" -msgstr "" +msgstr "क्रिया झेंडा" msgid "change message" -msgstr "" +msgstr "लिखित बदला" msgid "log entry" -msgstr "" +msgstr "घटक नोंद" msgid "log entries" -msgstr "" +msgstr "घटक नोंदी" #, python-format -msgid "Added \"%(object)s\"." -msgstr "" +msgid "Added “%(object)s”." +msgstr "“%(object)s” जोडले" #, python-format -msgid "Changed \"%(object)s\" - %(changes)s" -msgstr "" +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” — %(changes)s बदलले" #, python-format -msgid "Deleted \"%(object)s.\"" -msgstr "" +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" घालविले" msgid "LogEntry Object" msgstr "" -msgid "None" +#, python-brace-format +msgid "Added {name} “{object}”." msgstr "" -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" - -#, python-format -msgid "Changed %s." -msgstr "" +msgid "Added." +msgstr "जोडले." msgid "and" -msgstr "" +msgstr "आणि" #, python-format msgid "Added %(name)s \"%(object)s\"." @@ -133,24 +168,21 @@ msgid "Deleted %(name)s \"%(object)s\"." msgstr "" msgid "No fields changed." +msgstr "कोणतेही रखाणे बदलले नाहीत." + +msgid "None" msgstr "" -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "एकापेक्षा जास्त निवडण्यासाठी \"कंट्रोल\" किंवा मॅक वर \"कमांड\" खटका दाबा" + +msgid "Select this object for an action - {}" msgstr "" -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may add another " -"%(name)s below." -msgstr "" +msgid "You may edit it again below." +msgstr "तुम्ही ते खाली पुन्हा संपादित करू शकता." -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "" - -#, python-format +#, python-brace-format msgid "" "The %(name)s \"%(obj)s\" was changed successfully. You may edit it again " "below." @@ -162,36 +194,52 @@ msgid "" "%(name)s below." msgstr "" -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" यशस्वीरीत्या जोडले गेले आहे. तुम्ही त्याचे पुन्हा संपादन करू शकता." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" यशस्वीरीत्या जोडले गेले आहे. तुम्ही त्याचे पुन्हा संपादन करू शकता." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" यशस्वीरीत्या बदलले गेले आहे." msgid "" "Items must be selected in order to perform actions on them. No items have " "been changed." msgstr "" +"गोष्टींवर क्रिया करण्यासाठी त्या निवडले जाणे आवश्यक आहे. कोणत्याही गोष्टी बदलल्या गेल्या " +"नाहीत." msgid "No action selected." -msgstr "" +msgstr "कोणतीही क्रिया निवडली नाही." #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "" +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” यशस्वीरीत्या हटवले गेले आहे." #, python-format -msgid "%(name)s object with primary key %(key)r does not exist." -msgstr "" +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s “%(key)s” ओळखीसह अस्तित्वात नाही. कदाचित ते घालवले असेल ?" #, python-format msgid "Add %s" -msgstr "" +msgstr "जोडा %s" #, python-format msgid "Change %s" -msgstr "" +msgstr "बदला %s" + +#, python-format +msgid "View %s" +msgstr "पहा %s" msgid "Database error" -msgstr "" +msgstr "डेटाबेस त्रुटी" #, python-format msgid "%(count)s %(name)s was changed successfully." @@ -213,8 +261,9 @@ msgstr "" msgid "Change history: %s" msgstr "" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "" @@ -226,111 +275,139 @@ msgid "" msgstr "" msgid "Django site admin" -msgstr "" +msgstr "जॅंगो स्थळ प्रशासक" msgid "Django administration" -msgstr "" +msgstr "जॅंगो प्रशासन " msgid "Site administration" -msgstr "" +msgstr "स्थळ प्रशासन " msgid "Log in" msgstr "" #, python-format msgid "%(app)s administration" -msgstr "" +msgstr "%(app)s प्रशासन" msgid "Page not found" -msgstr "" +msgstr "पान मिळाले नाही" -msgid "We're sorry, but the requested page could not be found." -msgstr "" +msgid "We’re sorry, but the requested page could not be found." +msgstr "आम्ही क्षमस्व आहोत, पण विनंती केलेले पान मिळाले नाही." msgid "Home" -msgstr "" +msgstr "मुख्यपान" msgid "Server error" -msgstr "" +msgstr "वाढप्यात त्रुटी" msgid "Server error (500)" -msgstr "" +msgstr "सर्व्हर त्रुटी (500)" msgid "Server Error (500)" -msgstr "" +msgstr "सर्व्हर त्रुटी (500)" msgid "" -"There's been an error. It's been reported to the site administrators via " +"There’s been an error. It’s been reported to the site administrators via " "email and should be fixed shortly. Thanks for your patience." msgstr "" +"त्रुटी आली आहे व ती विपत्राद्वारे सांकेतिकस्थळ व्यवस्थापकांकडे कळविण्यात आली आहे आणि लवकरच " +"ती सुधारली जाईल. आपल्या सहनशीलतेसाठी धन्यवाद." msgid "Run the selected action" -msgstr "" +msgstr "निवडलेली क्रिया चालवा" msgid "Go" -msgstr "" +msgstr "जा" msgid "Click here to select the objects across all pages" -msgstr "" +msgstr "पानावरील सर्व वस्तूंची निवड करण्यासाठी येथे टिचकी मारा" #, python-format msgid "Select all %(total_count)s %(module_name)s" -msgstr "" +msgstr "सर्व %(total_count)s %(module_name)s निवडा" msgid "Clear selection" -msgstr "" +msgstr "निवड काढा" -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." -msgstr "" - -msgid "Enter a username and password." -msgstr "" - -msgid "Change password" -msgstr "" - -msgid "Please correct the error below." -msgstr "" - -msgid "Please correct the errors below." -msgstr "" +msgid "Breadcrumbs" +msgstr "ब्रेडक्रम्ब्स" #, python-format -msgid "Enter a new password for the user %(username)s." -msgstr "" - -msgid "Welcome," -msgstr "" - -msgid "View site" -msgstr "" - -msgid "Documentation" -msgstr "" - -msgid "Log out" +msgid "Models in the %(name)s application" msgstr "" msgid "Add" -msgstr "" +msgstr "जोडा" -msgid "History" -msgstr "" +msgid "View" +msgstr "पहा" -msgid "View on site" +msgid "You don’t have permission to view or edit anything." +msgstr "तुम्हाला काहीही पाहण्याची किंवा संपादित करण्याची परवानगी नाही." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." msgstr "" +"पहिलं, वापरकर्तानाव आणि गुप्तशब्द नमूद करा. मग, आपण अधिक वापरकर्ता पर्यायांचे संपादन करू " +"शकता." + +msgid "Enter a username and password." +msgstr "वापरकर्तानाव आणि गुप्तशब्द नमूद करा." + +msgid "Change password" +msgstr "गुप्तशब्द बदला" + +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s वापरकर्त्यासाठी नवीन गुप्तशब्द नमूद करा " + +msgid "Skip to main content" +msgstr "मुख्य सामुग्रीवर जा" + +msgid "Welcome," +msgstr "स्वागत आहे," + +msgid "View site" +msgstr "संकेतस्थळ पहा" + +msgid "Documentation" +msgstr "दस्तऐवज" + +msgid "Log out" +msgstr "बाहेर पडा" #, python-format msgid "Add %(name)s" msgstr "" +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "संकेतस्थळावर पहा" + msgid "Filter" -msgstr "" +msgstr "गाळणी" + +msgid "Hide counts" +msgstr "गणना लपवा" + +msgid "Show counts" +msgstr "गणना दाखवा" + +msgid "Clear all filters" +msgstr "सर्व गाळण्या साफ करा" msgid "Remove from sorting" -msgstr "" +msgstr "सोडवा सोडवा" #, python-format msgid "Sorting priority: %(priority_number)s" @@ -339,8 +416,17 @@ msgstr "" msgid "Toggle sorting" msgstr "" +msgid "Toggle theme (current theme: auto)" +msgstr "थीम खुंटी बदला (सध्याची थीम: स्वयंप्रेरित)" + +msgid "Toggle theme (current theme: light)" +msgstr "थीम खुंटी बदला (सध्याची थीम: उजेड)" + +msgid "Toggle theme (current theme: dark)" +msgstr "थीम खुंटी बदला (सध्याची थीम: काळोख)" + msgid "Delete" -msgstr "" +msgstr "घालवा" #, python-format msgid "" @@ -360,18 +446,20 @@ msgid "" "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " "All of the following related items will be deleted:" msgstr "" +"\"%(escaped_object)s\" %(object_name)sनावाच्या वस्तू घालवताना त्याच्या संबंधित " +"वस्तूही घालवाव्या लागतील" msgid "Objects" msgstr "" -msgid "Yes, I'm sure" -msgstr "" +msgid "Yes, I’m sure" +msgstr "होय, मला खात्री आहे" msgid "No, take me back" -msgstr "" +msgstr "नको, मला मागे न्या" msgid "Delete multiple objects" -msgstr "" +msgstr "एकाधिक वस्तू घालवा" #, python-format msgid "" @@ -385,95 +473,111 @@ msgid "" "Deleting the selected %(objects_name)s would require deleting the following " "protected related objects:" msgstr "" +"निवडलेले %(objects_name)s घालवण्यासाठी खालील संरक्षित संबंधित वस्तू डिलीट करणे आवश्यक " +"आहे." #, python-format msgid "" "Are you sure you want to delete the selected %(objects_name)s? All of the " "following objects and their related items will be deleted:" msgstr "" - -msgid "Change" -msgstr "" - -msgid "Remove" -msgstr "" - -#, python-format -msgid "Add another %(verbose_name)s" -msgstr "" +"तुम्हाला खात्री आहे की तुम्ही निवडलेले %(objects_name)s हटवायला याची खात्री आहे का? " +"खात्री आहे की खालील वस्तूंचे आणि त्यांच्या संबंधित घटक हटवले जातील:" msgid "Delete?" -msgstr "" +msgstr "घालवायचं ?" #, python-format msgid " By %(filter_title)s " msgstr "" msgid "Summary" -msgstr "" +msgstr "सारांश" -#, python-format -msgid "Models in the %(name)s application" -msgstr "" +msgid "Recent actions" +msgstr "अलीकडच्या क्रिया" -msgid "You don't have permission to edit anything." -msgstr "" - -msgid "Recent Actions" -msgstr "" - -msgid "My Actions" -msgstr "" +msgid "My actions" +msgstr "माझ्या क्रिया" msgid "None available" -msgstr "" +msgstr "काहीही उपलब्ध नाही" + +msgid "Added:" +msgstr "जोडले गेले:" + +msgid "Changed:" +msgstr "बदलले." + +msgid "Deleted:" +msgstr "घालवले." msgid "Unknown content" -msgstr "" +msgstr "अज्ञात सामुग्री" msgid "" -"Something's wrong with your database installation. Make sure the appropriate " +"Something’s wrong with your database installation. Make sure the appropriate " "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" +"तुमच्या माहितीगठ्ठा स्थापनेत काहीतरी चुक आहे. खात्री करा की योग्य डेटाबेस तक्ते तयार केलेले " +"आहेत आणि खात्री करा की योग्य वापरकर्त्या माहितीगठ्ठा वाचू शकतो." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"तुम्ही %(username)s म्हणून प्रमाणित केले आहे, परंतु हे पानात शिरकाव करण्यास अधिकृत नाही. " +"तुम्हाला वेगळ्या खात्यात प्रवेश करायला आवडेल का?" msgid "Forgotten your password or username?" +msgstr "तुमचा गुप्तशब्द किंवा वापरकर्तानाव विसरलात का?" + +msgid "Toggle navigation" +msgstr "टॉगल नेविगेशन" + +msgid "Sidebar" +msgstr "बाजूभिंत" + +msgid "Start typing to filter…" +msgstr "प्रविष्ट करण्यासाठी टाइप करण्याची सुरुवात करा ..." + +msgid "Filter navigation items" msgstr "" msgid "Date/time" -msgstr "" +msgstr "दिनांक/वेळ" msgid "User" -msgstr "" +msgstr "वापरकर्ता" msgid "Action" -msgstr "" +msgstr "क्रिया" + +msgid "entry" +msgid_plural "entries" +msgstr[0] "" +msgstr[1] "" msgid "" -"This object doesn't have a change history. It probably wasn't added via this " +"This object doesn’t have a change history. It probably wasn’t added via this " "admin site." msgstr "" +"या वस्तूचा कोणताही बदलाचा इतिहास नाही. कदाचित तो व्यवस्थापक मार्गे नव्हता जोडला गेला " +"असावा." msgid "Show all" -msgstr "" +msgstr "सर्व दाखवा" msgid "Save" -msgstr "" +msgstr "साठवा" -#, python-format -msgid "Change selected %(model)s" -msgstr "" - -#, python-format -msgid "Add another %(model)s" -msgstr "" - -#, python-format -msgid "Delete selected %(model)s" -msgstr "" +msgid "Popup closing…" +msgstr "पॉपअप बंद होत आहे..." msgid "Search" -msgstr "" +msgstr "शोधा" #, python-format msgid "%(counter)s result" @@ -486,124 +590,164 @@ msgid "%(full_result_count)s total" msgstr "" msgid "Save as new" -msgstr "" +msgstr "नवीन म्हणून साठवा" msgid "Save and add another" -msgstr "" +msgstr "साठवा आणि आणखी एक जोडा" msgid "Save and continue editing" -msgstr "" +msgstr "साठवा आणि संपादन सुरू ठेवा" -msgid "Thanks for spending some quality time with the Web site today." -msgstr "" +msgid "Save and view" +msgstr "साठवा आणि पहा" + +msgid "Close" +msgstr "बंद" + +#, python-format +msgid "Change selected %(model)s" +msgstr "निवडलेले %(model)s बदला" + +#, python-format +msgid "Add another %(model)s" +msgstr "अजून एक %(model)s जोडा" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "निवडलेले %(model)s घालवा" + +#, python-format +msgid "View selected %(model)s" +msgstr "निवडलेले %(model)s पहा" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "आज संकेतस्थळावर अमुल्य वेळ घालवल्याबद्दल धन्यवाद." msgid "Log in again" -msgstr "" +msgstr "पुन्हा प्रवेश करा" msgid "Password change" -msgstr "" +msgstr "गुप्तशब्द बदला" msgid "Your password was changed." -msgstr "" +msgstr "तुमचा गुप्तशब्द बदलला गेला आहे." msgid "" -"Please enter your old password, for security's sake, and then enter your new " +"Please enter your old password, for security’s sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" +"सुरक्षेसाठी कृपया आपला जुना गुप्तशब्द नमूद करा, आणि नंतर आपला नवीन गुप्तशब्द दोनदा नमूद " +"करा जेणेकरून तुम्ही गुप्तशब्द अचूक नमूद केला आहे की नाही ह्याची आम्ही पडताळणी करू." msgid "Change my password" -msgstr "" +msgstr "माझा गुप्तशब्द बदला" msgid "Password reset" -msgstr "" +msgstr "गुप्तशब्द पुन्हस्थापना" msgid "Your password has been set. You may go ahead and log in now." -msgstr "" +msgstr "तुमचा गुप्तशब्द जोडला आहे. आपण आता प्रवेश करू शकता." msgid "Password reset confirmation" -msgstr "" +msgstr "गुप्तशब्द पुन्हस्थापना निश्चित" msgid "" "Please enter your new password twice so we can verify you typed it in " "correctly." msgstr "" +"कृपया आपला नवीन गुप्तशब्द दोनदा नमूद करा, जेणेकरून तुम्ही तो योग्य नमूद केला आहे का याची " +"आम्ही पडताळणी करू." msgid "New password:" -msgstr "" +msgstr "नवीन गुप्तशब्द:" msgid "Confirm password:" -msgstr "" +msgstr "निश्चित गुप्तशब्द:" msgid "" "The password reset link was invalid, possibly because it has already been " "used. Please request a new password reset." msgstr "" +"गुप्तशब्द पुन्हस्थापना दुवा अवैध आहे, कदाचित तो आधीच वापरला गेलेला आहे. कृपया नवीन गुप्तशब्द " +"पुन्हस्थापनेची विनंती करा." msgid "" -"We've emailed you instructions for setting your password, if an account " +"We’ve emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" +"आपल्याला आपला गुप्तशब्द पुन्हस्थापीत करण्याच्या सूचना विपत्र केल्या आहेत, जर नमूद केलेल्या " +"विपत्रासह खाते उपलब्ध असेल तर आपल्याला ते लवकरच मिळायला पाहीजे." msgid "" -"If you don't receive an email, please make sure you've entered the address " +"If you don’t receive an email, please make sure you’ve entered the address " "you registered with, and check your spam folder." msgstr "" +"जर तुम्हाला विपत्र मिळत नसेल तर कृपया खाते नोंदवलेला विपत्र तुम्ही योग्य नमूद केलाय का " +"याची खात्री करा आणि तुमचा स्पॅम फोल्डर तपासा." #, python-format msgid "" "You're receiving this email because you requested a password reset for your " "user account at %(site_name)s." msgstr "" +"तुम्हाला हा विपत्र मिळत आहे कारण तुम्ही %(site_name)s या संकेतस्थळावरील तुमच्या " +"वापरकर्ता खात्यासाठी गुप्तशब्द पुन्हस्थापनेची विनंती केली होती." msgid "Please go to the following page and choose a new password:" -msgstr "" +msgstr "कृपया खालील पानावर जा आणि नवीन गुप्तशब्द निवडा." -msgid "Your username, in case you've forgotten:" -msgstr "" +msgid "Your username, in case you’ve forgotten:" +msgstr "तुमचे वापरकर्तानाव, जर तुम्ही विसरला असाल तर:" msgid "Thanks for using our site!" -msgstr "" +msgstr "आमच्या संकेतस्थळाचा वापर केल्याबद्दल आभार!" #, python-format msgid "The %(site_name)s team" -msgstr "" +msgstr "%(site_name)s संघ" msgid "" -"Forgotten your password? Enter your email address below, and we'll email " +"Forgotten your password? Enter your email address below, and we’ll email " "instructions for setting a new one." msgstr "" +"तुमचा गुप्तशब्द विसरलात का? तुमचा विपत्रपत्ता खाली नमूद करा. नवीन गुप्तशब्द " +"ठरवण्यासाठीच्या सूचना आम्ही तुम्हाला विपत्र करू." msgid "Email address:" -msgstr "" +msgstr "विपत्र पत्ता:" msgid "Reset my password" -msgstr "" +msgstr "माझा गुप्तशब्द पुन्हस्थापन करा" + +msgid "Select all objects on this page for an action" +msgstr "क्रिया करण्यासाठी या पानावरील सर्व घटक निवडा." msgid "All dates" -msgstr "" - -msgid "(None)" -msgstr "" +msgstr "सर्व दिनांक" #, python-format msgid "Select %s" -msgstr "" +msgstr "%s निवडा" #, python-format msgid "Select %s to change" -msgstr "" +msgstr "बदलण्यासाठी %s निवडा" + +#, python-format +msgid "Select %s to view" +msgstr "पाहण्यासाठी %s निवडा" msgid "Date:" -msgstr "" +msgstr "दिनांक:" msgid "Time:" -msgstr "" +msgstr "वेळ:" msgid "Lookup" -msgstr "" +msgstr "शोध" msgid "Currently:" -msgstr "" +msgstr "सध्या:" msgid "Change:" -msgstr "" +msgstr "बदला:" diff --git a/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo b/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo index a66e246dcd8308bd50c6b04b61afc9e64115b0fa..9aa7f311c2d81d020da08b9ad7486c4c305d61a6 100644 GIT binary patch delta 4480 zcmZYBc~Di?0mt!!EFyveE(jud8Zj(Nia??e0YzM@7*vYI4WIf5o4oh{0joYWRHJn* znrITL)l?H>5)^9EW~s($YbVuAWB$lCVQigg9Xr$1WlZYS_WOJHkp9s#`SCgTzW2_4 zui5@=(6OCC{;y&~4jRful1Q?{jOia_%-l%bHKsb+m|<9h!_ki;@i|83J}8y8SByo`a7q8hk~{Knk1h7UDnFxMk7 z9@9}XD#mmyLFQuGFa>{t8eosT{~qf1A7Li_n_eoR7{fa0hjAEzsi+xcqXtrh`d$fY zfD2J8vKTcGA3lP+Py_10Bz)I?{sn3vcd->8pnolu7N-3M-oPq6M61W~Kd2uZAK`4t zY19Bez$p9#HNZck2KG-Z#CxcYCow7wbP;Nx%W)B|!?AcJp7n2_a+@3daAktip$D}k z4XBx{$GNx_L+~Ti%6)=ru#6L_j!vV_Qa9>%=TS?2$$tJRj^Vl&wZi=pX+<-M;-qN+ zBav-3NvH-UqV_%)Iq0SYHGt))nXf`^jSuzx4fcLJs^boOeH`i2oJCFS3Krt$ekx5= zMvmfBVJuADO(VNO$i0aXi;ArnCMf-wR0W&<4x2AZjWdE^@VS^p_zwF;N)X0>apC9 zkr>8FQv*X#hcE#(kWAF)dG`J+YbENjU56UrcGQ55;8Z+??3VevpGqc`p^rKZ%|Laq z5C>r`@}Ftrk5=YY)S-M6HGm7K8GnfC;IF8G-a^grTjXtQ9-vk%jz>c)H38M0zm$rL zN;#^b7F5F>xC=W`E0M-1U&bTo!RZr?Ie@27OIncS3~VNm);Q3LA0Nq7hu zh~NB)ibiq=^``n4F2$id^t@}#T3nC&QQwQqakebhnuOupPs7=mWv@4)ezy(hVbEjF z?@LiDRgNKg{@qk~+nOp=L+z*~+KoCBU8p^NAGNd}q8_`C?dShMy{P_;+L{rMJKsyg z;aq2;R$>;a{Zbr;6&S7O-%CZ0&1O``9jJ!R;Vis_K8#`ADzP0q@H+C5Y2~Fc6uWQ; z{uZ@TpP@SHMGfRGYT%K%&VW+UuZ}XQXwQmJ4OOD~{OgYgV#vRua6=?~`*o@%T4<9*0eH_WE_y-gjdY{vI>&30|+Gu>sw<4><`{d_D`==#SVRg+)GL9S~`-w^w*-K{Vg3?YlksZ3AXr)TX zk947;{&$mybU~RiB8=tv@WyGvIY(s^*!WKvdG?l8ym@3@(R)U=_}7s8BMm6pOTGaB2jsZ ztPa%ZKZnXB;v#wk8^{IHSN2hPgXnbkkds8En`|Y?x}b!Ur${0B8F`s#c6wUQkSr2I z4v?cnZ&5RDM7z?2XfSg3PhkeJt&(V3Vz1#4_Tu*Uk8_t*^JfZ#{@JZQXy4 zivBs=OgGE8Z`$KB|0{om(}_6yxx68{n&Zpv#s zEw1Fo?#krY;3!W+ldsL_Z;hw12p|tG=eH+1=!>_hy(fca?i}wY$E?^}p||aR(T&D)*$c-w&CCC%Oj kPo2BLYrd;#6bA}pf@5nMo~l{zHEZ18RXWZW#gm!;1-g{&W&i*H delta 4210 zcmYk;2~bs40LJlyAS#=Ph9aSW3Zi16lDmR|8wq5#2%4ahqNte)E$VdvA;lG`2uagi zQX}(;X=*y7(`MyJ>5OSkW1~6KR8D0!lcW8=cMnZx`uLrD-h1bs?Oxly+NZq2$GIBj zS8XUK$%CYwzcD^O#smea)tJywV;;aZ7>@B6iNi1lb1)7YZ2J`)#r5Bqj45s0-xniY zn@VhfRp@JsV`{1BUR&)K_M>j-K@I40>kVwrwQrc)QKU5%Thg9@A=n4$*rZ}BOt+tB z;S#Q&!BV`4!Q9{EwlyY@hCU+0Q1N;ZIBF$JX4WuK+ zV?We@CSfO>Za-g%8b}?!h`Z34Po*={uE&k|9H!9g4&06UK}H96OD3RZFbjimF=~LT zQ3I>N6x@os@einh-bW48pHV)Iov4bIToe_btWoN6WoQm@gY<{r%(fTKBb}#&!alL zjy>=WCSq)7cjVcqr7c3O$V;fRQHkof8nps%qxyRnHINhd0XAYcERA*twigq$i)X0l zhri-5{0rGmlN`e=F&p(*mf<4Yg1s?}jnvAeVg_!)hw&`?R^aDH21^Fn2pTA)Z6xN zu@~33@KKEF>HZs$kIlKRu&(RL`uo$cnFcLkEovb9P&aHqE#X^$_au zJc}CO71V(K#8kYG?21X{q$Xh@s-Id^|9db5PdZc{qVhFrY3`v8pC64HKsai~(Wn~? zK@D^iYKED}+toaQTCpP3O07Wkw-cjrAF7`(QT^V;N_2jwqNQ+ncHY51u>flr_GY|~ zTGGvZ+<|RDbySaP{{nU6M$~|A;sE>wHITTz?m)(%UPxJ}$FC51B{=32DlgM;12y7& z9(wKR4C?}H$+d%Hu)(e_q#m z{-dZ&!3|i2w~+r#DeKq{k7HXrk6NMYs2lu@;poHLL<8=C8b~tg218L>m4)hOwryXA zn!qOXKL0gTB52rwt?>kM49r)^@i6z0y)wNAxiiW{-FOP>R2N%UqJF;tHGplXfgQve zJcsJHaIibDHwUx-@iZK!L8tO6@&K5ds2jE);{GpGf7FcgundclC(PW%iP(eJVHTF6 z2K+7Nq96aDjK@4&gC5jMVVRTKbFF3%_@$yiO&6w}$q1J8G}@;6gl(NtiT(*Dg-O zd@MtD#r%X37{hxu4hN$S-Bi>K7hp47Zre*y6RO6J=(Y2ORC7T>3?TPmBL8AT3 zBe6u!wTez{HQ7r(BJ0Ug@-|sRRPsrhx8|O$bn2b#b*l9l97~)%{PEaEJ&OM?5nQ}u z8x~^^vfW;bZvU&#qQ08EMOKg$(o}M&>>~S{8gMvyS@YLpFo--wHj`DPsk~+@&*CC7 zgd8N>h(A$zg^VNRq&HF7M7DZs#(a!D$s43INg$=(7NRX)2FUnMZiTnvtZ8 zgb|ggq?RP>g3_I=BMqbtQTfot`}alu_9yR=QQj6FYwSYa*ZwCGJ(DUc$-5*|7nCDp z2brS_Tk3E!nLs*_fn)*6A}UXkXtIo`6uNl-RUB&TCD@fDPUFuQ+ZcpNw!Y6g!rB&R zdI~}p2YF(nF1Pdq#0C3SbxYXNJ~Mw|eo, 2023 +# DOREEN WANYAMA, 2023 # Machaku, 2013-2014 # Machaku, 2016 # Millicent Atieno Obwanda , 2023 @@ -11,8 +12,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Natalia (Django Fellow), 2023\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: DOREEN WANYAMA, 2023\n" "Language-Team: Swahili (http://app.transifex.com/django/django/language/" "sw/)\n" "MIME-Version: 1.0\n" @@ -250,7 +251,7 @@ msgstr "Badilisha %s" #, python-format msgid "View %s" -msgstr "" +msgstr "Muonekano %s" msgid "Database error" msgstr "Hitilafu katika hifadhidata" @@ -358,7 +359,7 @@ msgid "Add" msgstr "Ongeza" msgid "View" -msgstr "" +msgstr "Muonekano" msgid "You don’t have permission to view or edit anything." msgstr "Huna ruhusa ya kutazama au kuhariri kitu chochote" @@ -378,8 +379,8 @@ msgstr "Badilisha nywila" msgid "Please correct the error below." msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Tafadhali sahihisha kosa lifuatalo." +msgstr[1] "Tafadhali sahihisha makosa yafuatayo" #, python-format msgid "Enter a new password for the user %(username)s." @@ -582,8 +583,8 @@ msgstr "Tendo" msgid "entry" msgid_plural "entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ingizo" +msgstr[1] "maingizo" msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " diff --git a/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo b/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo index 67c6d07e41c1907ecf3954af2808ed41927634f3..253820c477e6e4d92329ec4d38250ee7cc6b9797 100644 GIT binary patch delta 788 zcmXxiK}Zx~6u|Mfi@TcZuDNDPhD^(fhP&;$DbW@YUV^AD>OrJnv}I>;)n%O#5pqBf zI*6CRphE`{OzI#^CkY}7>QaYpL8lIRtH4u-sQ=TiWtrbM@B6+t-+MEw=_l#E^|0@T zM9#-VnndJj%dtCnlKVYmO5R`!KVm2T!V}mO7iq;L>i!faZ~$2%MeM*Ecn0s9_!72p zzZMr?PBC~)fWN%pGJyN23BO}6{=^7&kX;|#jeXdQOv!ER!bvml8dp&FJ;bxPftvR@ zHsi~LFVe{1HGwF;$9DXL4fqYU0|%&y4pBG$My;@c@;9*!wW4RJ2i!;P)H@UZifQhD zpgymi_UiMxeFmB+g*})<*2o>y*4@J_x~Lnrupf6ZgP&0=`in=egj482lg2L8*7u;U zyNr5(5!6Ebn+zyM#*O!l3m7K8isY6x)K+hr_%`aR+d=KnE7Wx#P}hAyE#Lq({~r@? zNs92v9sM{+&=_%|iNTB6{7|+qY~?Q%^TUrG#5zYu9dD-YRjc#Xm{%`*bMuSV)rJ4D z>)xzgsb27wuVt)4zA%{KGSqy_o-2EHxs)9%*|SA!e0i!gWA!_(TPx;rcC8k?ja>;v dM(p~u6NKZZL&3SkN+{Yl?NsWOV7GN5{14V^Vq5?K delta 740 zcmXZaPe_w-9LMqRrcT}5qmj0VkR^-K9Qf=oq!8&62_1wkMICwuqQ%kuE!%H|E#qZ-eo}Z*G zux+WD4AEP!b<8@rcLHvxW=nz%;5h~G>NZqd1Cs6CIpb{8B6%rH} zki3mV-iv&MapF&rv#gA&Y(9$DQLkLD&yStCthU7N>y)iy8P_<+D@vssaC6nhpAh!=DS|G99~Ob hh_%mp72m5&dX;d*nU5v?=~8yqo0;;xu+jN2ehOFfRgC}u diff --git a/django/contrib/admin/locale/uz/LC_MESSAGES/django.po b/django/contrib/admin/locale/uz/LC_MESSAGES/django.po index 80dd7971a6..8b4f8fd6b8 100644 --- a/django/contrib/admin/locale/uz/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/uz/LC_MESSAGES/django.po @@ -6,17 +6,17 @@ # Bedilbek Khamidov , 2019 # Claude Paroz , 2019 # Nuriddin Islamov, 2021 -# Shukrullo Turgunov , 2021 +# Shukrullo Turgunov , 2021,2024 # Sukhrobbek Ismatov , 2019 # Yet Sum , 2019 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-21 10:22+0200\n" -"PO-Revision-Date: 2021-12-16 12:06+0000\n" -"Last-Translator: Alex Ibragimov\n" -"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-25 07:05+0000\n" +"Last-Translator: Shukrullo Turgunov , 2021,2024\n" +"Language-Team: Uzbek (http://app.transifex.com/django/django/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,7 +25,7 @@ msgstr "" #, python-format msgid "Delete selected %(verbose_name_plural)s" -msgstr "%(verbose_name_plural)s tanlanganlarni o'chirish" +msgstr "%(verbose_name_plural)s larni o'chirish" #, python-format msgid "Successfully deleted %(count)d %(items)s." @@ -42,7 +42,7 @@ msgid "Administration" msgstr "Administratsiya" msgid "All" -msgstr "Hammasi" +msgstr "Barchasi" msgid "Yes" msgstr "Ha" @@ -96,7 +96,7 @@ msgid "Add another %(verbose_name)s" msgstr "Boshqa %(verbose_name)s qo‘shish" msgid "Remove" -msgstr "Olib tashlash" +msgstr "O'chirish" msgid "Addition" msgstr " Qo'shish" @@ -182,6 +182,9 @@ msgstr "Bo'sh" msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." msgstr "" +msgid "Select this object for an action - {}" +msgstr "" + #, python-brace-format msgid "The {name} “{obj}” was added successfully." msgstr "" @@ -262,8 +265,9 @@ msgstr "" msgid "Change history: %s" msgstr "" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "" @@ -329,6 +333,9 @@ msgstr "" msgid "Clear selection" msgstr "" +msgid "Breadcrumbs" +msgstr "" + #, python-format msgid "Models in the %(name)s application" msgstr "" @@ -354,15 +361,16 @@ msgid "Change password" msgstr "Parolni o'zgartirish" msgid "Please correct the error below." -msgstr "" - -msgid "Please correct the errors below." -msgstr "" +msgid_plural "Please correct the errors below." +msgstr[0] "" #, python-format msgid "Enter a new password for the user %(username)s." msgstr "" +msgid "Skip to main content" +msgstr "" + msgid "Welcome," msgstr "Xush kelibsiz," @@ -388,6 +396,12 @@ msgstr "Saytda ko'rish" msgid "Filter" msgstr "Saralash" +msgid "Hide counts" +msgstr "" + +msgid "Show counts" +msgstr "" + msgid "Clear all filters" msgstr "" @@ -401,6 +415,15 @@ msgstr "" msgid "Toggle sorting" msgstr "" +msgid "Toggle theme (current theme: auto)" +msgstr "" + +msgid "Toggle theme (current theme: light)" +msgstr "" + +msgid "Toggle theme (current theme: dark)" +msgstr "" + msgid "Delete" msgstr "O'chirish" @@ -473,6 +496,15 @@ msgstr "Mening harakatlarim" msgid "None available" msgstr "" +msgid "Added:" +msgstr "" + +msgid "Changed:" +msgstr "" + +msgid "Deleted:" +msgstr "" + msgid "Unknown content" msgstr "" @@ -494,6 +526,9 @@ msgstr "" msgid "Toggle navigation" msgstr "Navigatsiyani almashtirish" +msgid "Sidebar" +msgstr "" + msgid "Start typing to filter…" msgstr "" @@ -509,6 +544,10 @@ msgstr "" msgid "Action" msgstr "" +msgid "entry" +msgid_plural "entries" +msgstr[0] "" + msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " "admin site." @@ -562,6 +601,10 @@ msgstr "" msgid "Delete selected %(model)s" msgstr "" +#, python-format +msgid "View selected %(model)s" +msgstr "" + msgid "Thanks for spending some quality time with the web site today." msgstr "" @@ -647,6 +690,9 @@ msgstr "" msgid "Reset my password" msgstr "Parolimni tiklash" +msgid "Select all objects on this page for an action" +msgstr "" + msgid "All dates" msgstr "Barcha sanalar" diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo index af501d2aa8600f340f958e1a82e5907835ad83b1..4bee1a8d452993fb78acf6e4eddd0f14eb427b17 100644 GIT binary patch delta 4609 zcmZYB3s9C-9>?+XauHEbM92#wueK=$sF;+ftCX(SGB4RpFb zvL>m4T3+)0mS};wUZx$}w)Wc2>_$@y2)Sl8+fM4Xv)|wQ9GcnLGxL8x=bYy}=k}cE zfjetmRU2Hs#^{hLL%KrrAx3vFCd_5b+z8bgQygVXEUv_Ra2v+q8~7|#gP3k@61g zg4IaJ<_L!4aeKWES5v--8*of_VS~%*!rEQfe+ZS9~skJLM^NjGw@3vnIbYt z@y1NY8Z5(aa3q$nj~e(aYQXnVEB!NSqMxE3$v3Di4o+|;7>67y<3@Jdq@fo2IBEi! zsD6Bl$!G-ys18@5I^2r)V-2R@2Y4UeMy({l?QHcZ)DBHTJ-Rul0T!TkqyW`#F=|3v z@HEyU{rSwSe$EV6;vg zcpPV9BR+e4z!ER(MbJ+R;(zp2vHSy>H z&a>~0IxF{EhoG(xM;+49*n{!SWHK7qgWAHSn2tqQfhRB+M-Oy5&cIU2(=iSIfE*(e zp2)WV2jEX}2Wsa&LOseaQI95;ZI=Der;by|Xl1FWnPp%kK89*I2g7lZb(yU%L9K8T zdR#nP)OX@5MpJ(wNzPg6jwzIfAfF18iJI^WN$mebGL=+t;LTrAGro--FeceC&e|XK zS`ET*Oh=vWap=ZOY3q(kkP zWwukHj`!LNhfphd3w7AuN1cJmBb|wQQKxqkYGNmm%`j(C1Kz|$j2Pt%n1)%Dr=a?I z6CcNqN3s9fO802z!eZ2gt*H7&EWv?%Pc_g1oQg+n`Cq7s|6t2uoIEY43u?u2sEH<7 zXIV=y(4UWtZa8Wy>Z}(~9bZN5#77v1U!dCm$6oI|*7>%_;(qEgP>1vHsQa$t3cQ0_ zc|nHr$EynGQ}&%B^D{DW4?A1yK{Z^38t66aF;vIrZMngE4YiU_Y`M{T13Oaxy)C;Q zaoTl37xhXk&}aB=1X6!~Um~>q^~9q@7Qy!>kn;IGMR17CL1GYbf;d2oCpHp{WtI_7 z6FrDrLW_HnP||mxJ^hNzyL$h(kU4E@k6Bk*_3V`9IRt*E@VlSrO!NxW@P8uCCk7C^ ziI)kbg~WDZf(oQx5Nn8X6-Yf9Kk#3P4q1EJN+!V;W*{G~z~Aqq_$*OI=#P_9DDiXR zc_N!(yoR0nd-XV^ntuj)Qq_YQKljW39wVnXj_d+K8|v#gm`y%86QSBO|*8!?1< zicmUF6cRc=M~En*J?$dXkJwC9603<}dj3l1hy{V1^B>I!@@`@#;Uz8+?P&*@lSFso zZQ?MY^cJz6xK9OAM`96?LA*x1PH41b;tcTs(M>f~WNHbe0-}cKK=dVYh_1vqVl1JQ zMCfCqq*qdDorAf6i8lWN`UyS_=2c=7F^W(cNlYdpHKQ@aG(suZA@IA0-`T`7w(d9{ zBBt7MJ9FDJSY-28@CjnMEw8|PZGM&YJ=FN-m&8P6NOgq%=&U6!6N`!I#0KIl@dlAi zq!SUuU?PuDYH$erPxvPJy|&!j`l5A-HB4u7r!7QV=iqbxn_YVb1?Man>32n^1%>5$ zyo*#A9y7)jsLhKl3<+P549-*+p(oUY=oBv|_DDx9Ghj&=w z$zJMS>HjwI!=Q-fx-%_x?>3j$+^VmxypYr!bZ)Ev_2i*0U1)mmM9a?eT=4%f;J#zEacQfGb37F Qxp4j9J9ZG)h?O1x3%RB|82|tP delta 4200 zcmYk$I(ER2NMkxSF8(x8dMRv3@^ zJQ){b7OucO7>?P|+(Z9n2nEe-G^*k0s0PZBYs~`d8e|d7MvTRssF^fkDjrA1WSTG; z!(!a?9MpY2%)&|70@vts`Zwz-w8pKdne0Rj;2`S4BdCELMXkUo)Bvtv5_(xK4I~ZY zF&p*yI9!Ocu@ZmA-S_~roq-`V=HE`Cf`XPRs*}6)ol!H%LM>GRYG7kg11iCMoPp}_ z9n=6DQ3E`NlkhV3#DR>a0;ggSo<#L`CYJTr$j?zR5-+0{`^IT!7}Fos(0)`05$rte zl@6%;dZ3mz74`Yun21AAD>@xDfw`!Tmmp8aEJNL2-iDKTZ^=%jXxgJ*oGi@8fmn@8a17qSHCWh{HwTaVDX8OCtfM-NL(L=w zHPTGfqbNiz?L^c7E0D);s*pu9t5GxEh8jQvs+~iq34Doa?-;7Ri`X0eHz;W2@!i~| z9e`R9AL6~AZ=K)x zD9oo~3Z~;3)KUfWAV=VM%)~8NgeP$n_Uz#<3g#wM|Wa0P1VzCb;*bEsz=n(P{bYB&Kkv!1Ad^+WB6 zeAM-$Q3EWtPD8&wsGy)3)?lfJO60r3T;f5h!M{*@B$VF!U{B=LHbtlb&q5!rM)tEg zfg12NY>BN>T_dd>Q7apt%KB?W=~QSJ--QWSglq#-h3cRlHKTo~20yblT94V!&sZHIXJ+z4Z^J9d zQ!%?x_n$@G_bc|pKT-Xpu){U;OjJAhep@jd!>K5?AC#ePn1^ccNz^Z?T2x2dQ4JhL zt<+i6O5MWg7?Z&U#2Q?N-{Ux(%&Rm9_n_MMcgu1+?uF_g8}-2m)Djh;Hdh%IU^!|f z8c+lH3N^sfI23~zj~{zoY2!c+EwZ%`dwvR=U` z&ad0gy*X}2?NIgc*c!7?4d-DQPC!lMQ!K%dJKa4~hPv-14Ac9+gMvEzNELY4Uhp-x z=lq=g{06FnCR-of-N#&%;n7jzw*zG}JTRjh*l`YExcC4IqZEJ;rD{qdF?WWUNH>^BR`mo?M>48j9q1 z;r*C{TC$a>`s23#hOIBS+n7bv*P=QK&2xW8M4-+mqXs_Jo|mI0RE3)8Qq(}7w;sr2 z{Z(;+3a3H7Z*@Zi>b#4!2dd%TsFlb@eIxo%*O%JQ=OSNvrUtj+Td2J?l&!A&M&f*Y z1U134ehU0TGfg-ZyACquUR;V=+D6oc=TRMb^IhAa8jiQ;iPj9%!1L^RfprXqQva|$ zpMkp0Uq!(~p_DvB-X~9yIYc+;*h?NK<8;FDfQuQ8e6cxyR!^{XLAZfbl1XGSd75Za z3y7DrAaP`r-hX{h_a!=btj^JfpKD14(SFcdpd*&7CXbQ?(tPOA=%^xF$VVif=ty^Q zHr_7E&yhFDK{A{E|2yg_y=>348P}1I$z!%|H}d7?{4rvyoc}ec+_t#_BS{xB`G0jP z21o~T2hrXMCl9Ir?j(fhC?U_2cgTM7ELlW0l2t^>wvls;=ckXn zMH-wM_rGbj=%D@O-)w81#2T{6o(pZf=3@qhmE={jgbXCj$3zNS$&Tg<%p*?_y$yUV zIDfjW$7Q7XDAV)TQB3BMT(XC}PP98;APdQGvYe!m14PGbF6I!XkUA1ilF3psl?)@z zhu)UvBb!1wxl{cYP^cwQM8_2J66vQCjwG^%>?7@njt^X%pL(Bj$a|#FsWIjgOe8x= zDv2OEG~Kt!2%T_zsERkpOtPKmc!fMj#*mJrKbcEL5*=enH>c$Om~P9haeysXV-NBO zxzE;xVTLWgYYiVnVH=4i(*pA&I|T(cL}dj9j>qJA0?{32djqv`gIm;fPbdsjCah`| zI<9n1b#=n<#{>VQ91E)ZHtnaN!>, 2018 # Fulong Sun , 2016 # Huanqun Yang, 2022 +# jack yang, 2023 # Jannis Leidel , 2011 # Kevin Sze , 2012 # Lele Long , 2011,2015 @@ -34,8 +35,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Scott Jiang, 2023\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: jack yang, 2023\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -203,7 +204,7 @@ msgid "Hold down “Control”, or “Command” on a Mac, to select more than o msgstr "按住 Control 键或 Mac 上的 Command 键来选择多项。" msgid "Select this object for an action - {}" -msgstr "" +msgstr "选择此对象执行操作 - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." @@ -421,10 +422,10 @@ msgid "Filter" msgstr "过滤器" msgid "Hide counts" -msgstr "" +msgstr "隐藏计数" msgid "Show counts" -msgstr "" +msgstr "显示计数" msgid "Clear all filters" msgstr "清除所有筛选" @@ -507,7 +508,7 @@ msgid "" "Are you sure you want to delete the selected %(objects_name)s? All of the " "following objects and their related items will be deleted:" msgstr "" -"请确认要删除选中的 %(objects_name)s 吗?以下所有对象和余它们相关的条目将都会" +"请确认要删除选中的 %(objects_name)s 吗?以下所有对象和与它们相关的条目将都会" "被删除:" msgid "Delete?" @@ -530,13 +531,13 @@ msgid "None available" msgstr "无可选的" msgid "Added:" -msgstr "" +msgstr "已添加:" msgid "Changed:" -msgstr "" +msgstr "已修改:" msgid "Deleted:" -msgstr "" +msgstr "已删除:" msgid "Unknown content" msgstr "未知内容" @@ -734,7 +735,7 @@ msgid "Reset my password" msgstr "重设我的密码" msgid "Select all objects on this page for an action" -msgstr "" +msgstr "选择此页面上的所有对象执行操作" msgid "All dates" msgstr "所有日期" diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo index 255ea4a11b444c58b3b6d1dff76f8b767a99fc9e..c78566a8767c6520393cbf86d5b9c5cd857ea527 100644 GIT binary patch delta 2261 zcmY+_e@xV69KiAC;CsMH9D+e)$gfgD1w|-A^G79zL?Cu-xz(13Twx53E)M6aom=H>?HAF#FAU$t7jKi}`?*zOshdp*zRdA`r{ z?EB+krt-%6==wWxVKn}_V3Q#s)j54kg`7;~&k@+^G zjN6VU(T5-6?Fvo}x z-;WRB+qeQxsTWYj&w9E4(s5H03wS?mSFW>AAqHH=RAVLi50*O%P9ZnN{H)$Wxz+RP zBFY{6Q``TlR-Q5W88@mLwPu%7lkwUXUQ|4S$fzoPc3gD4w*6J^|p=1-`nG=CNk(*Grn zU&aio4fwa_*YbR1d_4}~7JLuC#a?XW!OFzv)vwh{>Q(i+ zW7OQ##2u807u0*2|4ZBHym`{UOwCh^)KYZ~$_A>n-JotmUM16{Hrw+2TQt$CwyC?- zJt|McK9JatU3{v%>AYWdkw>wKXeRhb%u|GX5%ol}JggPoY4fOj|5D_8e~x&BC?lja z5~V~f!5-`{15AbdP~;2XgR##HX>)R$)r7pTC4?M8?ZmT$+&OuiYl&S%8zCjiV>LCz zV1=e&Gw$s(s8XN-B0*h$E7`WUf}kar_lp3%yVWCB|V`I5G4ZZ~cv8i-a7Tl@2S zf`ZfYjL!tiIcxGX&Hgk4WU@#Jvq(3+?80_l`hK;``bkO)CGBo~QW|ga?ClY=`hIEFU z-@Z^d%#hAVP|~s2JsV=(o)*sw!R~%L6aUIH@lTdX^$4Q_{-TfX`a^t`+Lg{1^Qo&f1Kk^ z^CU(m5@Qo{mruq%&8^FF8q4i7xW)@aArOl8_wJ3wd>PI==_|{*uMPLac{oQ)wHy}PCGY!SZlKI V(o)GBt0b>DnygJ9iTPI?_#f52TL1t6 delta 1603 zcmXxkSx6O89LMo<&E2l%)?V78wrGp3R+jaU50L~}v_Tn3-WIN1Gp(0P6d_SYT#KLu zji7`S>xQ<`QxSyFgF#fZQCYMg^$;x&_5EG{{+a)L&N(x4X6DQ})02NUFZe1g`jjJ< zk)z4{DCgGWqG)zRbBuHIumu<6GmORI>|_=@nq02c^KmfsSynGGOVLYvnYpRopxZ$q zkpuOZfQK*(k7F*jVLU!DUm~09Wv6HShH?1A>VM3Cs0WMY;2=yy^^=UcZWyj}LEf4| zISsXT!XwlLJ;>&svZF8e8ug&Ps0aOy>gX>vp?W_Fr%*S}<0Rd%02kt1Tz~;&b8YM{ zaDUfD;S8>&_iF6JVYnrUVa9qKi6_mgID+~^9ExwvU#RO+82?PnLtR&lI)5FG!T_dY zBL-EtNI@5L+JSDXzrhUJf1+-b#0RYKI5!^is2@)5zu{HX$lNy{qekqx`4;uYpRE4F z{GH7Br*XigxQOXyE~nQKrFxXJ21vl{DYufqoHv-bMb{(gd(Px}!Src(&pfp@r% z`e!_X6%5Z#{DgXda=w?`h#G;dR^MgTmWl( z^QL**20@RAoWFAjWB6&YIm-*+$QkX$bB$*ekgw&5nqr!xagyx85 zvLc6EL{26(DHZwz1EC+8LK9L^Ku#ewf5wpmp?Ne%>z^N95;SzElnMEqJ%(Rm9Ur^{9FC{gn6#Ob8G1Z)@q0sl7Mrujv+Z2*or`e=J zOVEWM#IEv$M#oPHt&D$>Sy{cea`)ECfLmSVuXE*9zM5=bO{hI_WO#c*oX6|mR, 2018 # Fan Xu , 2022 +# jack yang, 2023 # Jannis Leidel , 2011 # Kaiqi Zhu, 2023 # Kewei Ma , 2016 @@ -21,8 +22,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 15:04-0300\n" -"PO-Revision-Date: 2023-12-04 07:59+0000\n" -"Last-Translator: Kaiqi Zhu, 2023\n" +"PO-Revision-Date: 2023-12-25 07:59+0000\n" +"Last-Translator: jack yang, 2023\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -248,53 +249,53 @@ msgid "Dec" msgstr "十二月" msgid "Sunday" -msgstr "" +msgstr "星期日" msgid "Monday" -msgstr "" +msgstr "星期一" msgid "Tuesday" -msgstr "" +msgstr "星期二" msgid "Wednesday" -msgstr "" +msgstr "星期三" msgid "Thursday" -msgstr "" +msgstr "星期四" msgid "Friday" -msgstr "" +msgstr "星期五" msgid "Saturday" -msgstr "" +msgstr "星期六" msgctxt "abbrev. day Sunday" msgid "Sun" -msgstr "" +msgstr "星期日" msgctxt "abbrev. day Monday" msgid "Mon" -msgstr "" +msgstr "星期一" msgctxt "abbrev. day Tuesday" msgid "Tue" -msgstr "" +msgstr "星期二" msgctxt "abbrev. day Wednesday" msgid "Wed" -msgstr "" +msgstr "星期三" msgctxt "abbrev. day Thursday" msgid "Thur" -msgstr "" +msgstr "星期四" msgctxt "abbrev. day Friday" msgid "Fri" -msgstr "" +msgstr "星期五" msgctxt "abbrev. day Saturday" msgid "Sat" -msgstr "" +msgstr "星期六" msgctxt "one letter Sunday" msgid "S" diff --git a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo index 43410e7ab73e295ae358b6eea0a6e4667ec0aac9..30b84dab60fb281412ee37c1654925f011088454 100644 GIT binary patch delta 1144 zcmZ|NziSjh7{>9rGl@|z{UE62!djxh=q-aX+#Vne&0P)IxzRy*`0l7p4ofT`?J6KvDmSu zXv6el^g>RlQT&b49^{oei0dfNH*g4F;~;*;eb}{2sU9q%JlFULC$JMgVHbYE-S`bV zlxnIUTugIg8_(htcYE;;7H|y@;6s!G8@P_o@G{O)y&oSVx72ei;tL$Wcen?)a2B^w z=FL#7$oguQ3n?7&bCc9{lq6ehQxg9{Ni@{mPJ9mcGQNhg!FiNVC)Ozt5aa;GQ~4=YG~?GM`r+p|iIvrTkB%NrArXs(mW*$qv&c zz)q9TveV>*_tRy=>_6Kmn?8~Kx#YOzh$XcgnKVhrUqY#S7xPnvOD3r5G}bfDHd?py zPjbyGaoL6!^vLPR)auwT^xBGFK82nI;~h8mzHdhdhMcY=vRGe zYuZF*8M;Ip@8iIk)Ry&vvtikf=}8k*bWK*&72~zh;d$p%DcYW)8x_Zlz(l%awFv_2 zJ+CvB(#s*W^omKGDTTH*(vi;`k&w93*1l_4=hPlB3Fb)_Ei>I&&B>B6erNyoEO zkq%cWBoB3C+@#b`tgDucNn|xrt=NR~vPtNwHake(@k_*u<7lk)w7V}iC;>=VZ71~3 LD$d{P5wHFNN%hwE delta 619 zcmYk(zb^w}9LMqR^~X6qKdMDh5|K2GfuVna4iMnL zE*1mQj+jk$28o2l`*S+@=DyGC`Ej}D`QG!Dc}h24Q?XMcCdp~?jm(iZ4h^vsF-u|* zwO+z3?xT-KIEc;O{3W&+-(egpQ8O2Ju@7q)!#b{+HLO9Wz{E4A(Pec2r*H-Hn86zI z*da{{k5Pxdz<#{NGCm-W&9S>S&SRZo7EuSiVp4^)G0Xn;LMOq*2WsP=-U}Yb?J&-v zKKPER=o5MDo5sTk%?A3ofIFxIHc{WZMk=*7&Y;g}>DoM|*xw3tRLOF0VH4LGZ=*K8 zM{U?e-3o;BBRE8AZIskE`0F-C{tx|CRj#16@KE7^rl`tw8pSZlEreB$Yl2WE3f;A? qK{4@1*d|ZTBddWMJ#$*+xD)KT9VaMxk514{q#bXoTCL3H4(t~%Lo?C< diff --git a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po index 6074aa0551..4053b8b9fa 100644 --- a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po +++ b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po @@ -64,13 +64,16 @@ msgid "" msgstr "" msgid "Models" -msgstr "" +msgstr "Modelle" msgid "" "Models are descriptions of all the objects in the system and their " "associated fields. Each model has a list of fields which can be accessed as " "template variables" msgstr "" +"Modelle is beskrywings van al die objekte in die stelsel met hulle velde. " +"Elke model het 'n lys velde wat bereikbaar is as veranderlikes in 'n " +"sjabloon." msgid "Views" msgstr "" @@ -107,7 +110,7 @@ msgstr "" #, python-format msgid "Model: %(name)s" -msgstr "" +msgstr "Model: %(name)s" msgid "Fields" msgstr "Velde" @@ -202,10 +205,10 @@ msgid "Templates:" msgstr "" msgid "Back to View documentation" -msgstr "" +msgstr "Terug na Sien dokumentasie" msgid "View documentation" -msgstr "" +msgstr "Sien dokumentasie" msgid "Jump to namespace" msgstr "" diff --git a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo index 7d0ec6a16ac954962e7d953934097a746b312b3c..4b9b343ae12798fa864c97c95caf17ba756689f1 100644 GIT binary patch delta 1544 zcmZA0Z%oxy9LMqRg?mA~{J$xXHtyIIF)m*2r4SIIRXtof*Ubl7oBIC1bt@0|{9fn${+x5Z z-*Y(AGTS(OrPP1aDDBjxs##_mrJoCBBw)4y_hKzx#$r9lnSZ|om(Z=lJnXbz--uNXe{8yMGWF^^AGGA>ccc@f?%%Mr&x_ecmY|9{f@k1SCOCn z#pP8@qhffT!AtN3dO(7IWiojAMW>LfC{_aVKiR*H9B}#S{1@c3^0s zSsA{Lns7HhhI>$v9zzB4B@(gyh^2TL^O)cMq`}Y9T&D0})D}#V4y`!IDq3+9YJxG; z0H0tXPN6a}i{*G8m9gun1>ZwuCWqP8FGOzHBISP-jVc-%xC^7$gBox@_WH~YVGsRV z%%+8`CmoOA0j$O2_yqop%48N{D+3i+hm9HEKrQ?zR^#WziHjC6h)H}O*;TuZVf3-DIzv^s4$p>YETch;~LzP=}#l;nfq81uBL{m4b)t!iXvCh!Zc|+wawY<4@Kg% zI28XY+K?uy;#XlsbEVGt!CzM2n&}CxqbAc=a-vin@CY@VsxxO!USLV!aT<+IO`!5+ zWm!A$By|;4F)1P1g|*Zcs!EL7JlEnFAz{w#m~QDz>saZ3LS=lpN>_Kb_b$ z&^Po}VoNPgV{yk_vw+g3X6%N@IP`qJsth7ZL1XghC9uq0aD zBq3XvTW-`yd~i{>7+<=TZ4y{8>Vw%5y$+@-C!BuHJ-7Fq z-|u&B`L5$ySMqj+?R`ZXq}R}Qu2bq&9J292OBE=!7cb#<%r8``96c!CAHZrnjKw&G zPvE<``8nLk^;LWvGbqpB#!{t{>Q4rbG4U^!U|~`AhN?h$P@`M0t@2Ep4M-jj)xSYG5 zAS%h^N9@68SWPzcqpWij%P@gbp&8tOXHY765hamtF)1axk(;=MlJN?*;Lj)vyI9SG z)hG)N;ki7eUcm!guTdTeq?bCgG{C%O;tGD;#Z z@>`X_hfykMAg_~3&N8TH@DbMG*C;RHDpFiq$H)EgfUeup z5b=it+hTP-bHX09KfE??*&ADe0qq|Rha!43Ix-OsMB@HqhRM2r=*5qNzfWCUV* zPa+Vj+|RM2Pq%u!9d3`;?d{awcHhp< zCXd(SF_%kSeN1;gnD#VzX!aq0EbbmQ{E-;pMh%}n6g5J}boZ3-T3~9lKj9BXqs=4H zaIfhotIMC9oJ_Zuoys$BuD?;SD;gaO`;D>jK-`@*N33%AB^Y zn`4gJ^nS-@d6j3ad27k~%DS#IvzcjYF*9o|UUo+ETOL+OXHGD?WG!d!E^x&P+PY?? ztR>AeDQh7!ZH8T+JX+Peu0E&r$l}v1|BjV52g;qqRn~Zajg)njy%$+nqF&4{Hm`Ga m*4$bkR*G$wxT>nBb!LXmQkl1jd67|?@d??!Io(|~WBU)4HdVR+ diff --git a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po index e4e4b0caf8..54de5cfc68 100644 --- a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po @@ -4,17 +4,18 @@ # Bayarkhuu Bataa, 2014 # Claude Paroz , 2014 # Jannis Leidel , 2011 -# Zorig , 2013-2014,2016-2017 +# Turmunkh Batkhuyag, 2023 +# Zorig, 2013-2014,2016-2017 # Анхбаяр Анхаа , 2014-2015 # Баясгалан Цэвлээ , 2015 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-01-19 16:49+0100\n" -"PO-Revision-Date: 2017-09-19 16:40+0000\n" -"Last-Translator: Zorig \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2023-12-24 20:19+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,19 +24,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Administrative Documentation" -msgstr "Удирдлагын баримт" +msgstr "Удирдлагын баримт бичиг" msgid "Home" -msgstr "Админ эхлэл" +msgstr "Нүүр" msgid "Documentation" -msgstr "Баримтжуулалт" +msgstr "Баримт бичиг" msgid "Bookmarklets" -msgstr "Bookmarklet-ууд" +msgstr "Хавчуурга" msgid "Documentation bookmarklets" -msgstr "Мookmarklet-уудын баримтжуулалт" +msgstr "Баримт бичгийн хавчуурга" msgid "" "To install bookmarklets, drag the link to your bookmarks toolbar, or right-" @@ -102,11 +103,9 @@ msgstr "docutils ийг суулгана уу" #, python-format msgid "" -"The admin documentation system requires Python's docutils library." +"The admin documentation system requires Python’s docutils library." msgstr "" -"Админ хэсгийн баримтжуулалтын ажиллуулхад Python ийн docutils санг суулгах шаардлагатай." #, python-format msgid "" @@ -157,13 +156,13 @@ msgid "Template: %(name)s" msgstr "Загвар: %(name)s" #, python-format -msgid "Template: \"%(name)s\"" -msgstr "Загвар: \"%(name)s\"" +msgid "Template: %(name)s" +msgstr "" #. Translators: Search is not a verb here, it qualifies path (a search path) #, python-format -msgid "Search path for template \"%(name)s\":" -msgstr "\"%(name)s\" тэмплэйтын зам хайх" +msgid "Search path for template %(name)s:" +msgstr "" msgid "(does not exist)" msgstr "(Оршдоггүй)" diff --git a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo index 588aaa840f2a84333f38f5f43b3a5a39c063a8da..9814f3295a7eb663b120c0543174f633352855c6 100644 GIT binary patch delta 2024 zcmXxke@s@-=REhE=XuU^ zzR#I%|GgvnbD=M8l-)!Laej$eKUU{(pxnqcdlYA}0$1K;=3px>#}IbnAU5I;7(!p3 znY!r1UJT=VID>`w^4(^e&7w9y<$fB@VFM=c9{d&W!+CrNvuG^9RjBrAq%Ujq+FMZl zbm2-2Vky3bMR*4DF@X=@cUZ>wmZqX7`5RYZ{=H`Wtdhf0+=4yWiXY-RY{Ld-u?CM~ z06#;X$d+)^2Hc98crQMJgQyigjc0KRn;GBsFs*t#g_U>}+wo64ip@M0t8bT)#jx*@ zx!N>p1=5~3Q7bct%+dZr#;_cgP1i3+y^>N?e`_)7qf+HvQ0KV~HBcL>qfXRyd%g1j zYT$lU$8UJ;$57XOfSSlj!G+v7hT08huo{2z+Ov7l%IY%IyRJv|^CCWm5!{BC(2sMd3714k)vZ)o z@JSp(<-!#1z&Ye+bz~;@SO-pF2rF2TGBPT}`L2h}p2Z2A#ecB_ud@Z3u!`9zDfi=c z{0M6?dX36WD%pv$Wxuxqv1Q#gi0cn811J|0i+yqwh66K_Hm$=Z-rw;m+#?4Z|v z9QCB9kfH2b)O9zIexf!{MIHTzyk09@yRd|7P&c%pZg>qf&=4wnPonPo#PbW!E2tIw z5p~^fxD4k}E0D`<)L$*G(Ee|svXO>vWYz3l_Ya;NHNe-XC!R*#n8qxmKWio02tDx@ zLZylzE!@KDyJbDc3Zlt9;~RmRoW^%McXUG01eysA^bDa7ii$oQyaBh6%x+NvYFo7s zn&|U{a;Tipu29)cJWb>fTFpj6MalRaq4C{P$B_qfvsDdR5tU7Z63?d-inb>y;4ZN; zxq(huyZ7l&b^ft>&dIFj0^;V z!O+0r&^~AXfg_=V!N8%A6Q~(-0t5S;NI2}ZG}pY8ct5W@FQ>Y`u6}dumxA)_KscOO zx@_DR>ntpdtuE?{W=5Rkc=|+YI5nKU;GSego#dCvvE*cOEH#{otLH2pvqiSDh&?iscFMhe4r$1)VkSPoG1!a4@h7IDkH#}_ zERMwx4psj(R7P>30SDnBOu;DD;(2UA{aFqta6G=mI{brrqYaFD61JiSeh0^44{B!n z@hqm(co}x$O!~JUR00@am=zeteRvj`bsNR&@e(!;8H?qkW+3ERinMLZkg?c0)C+7v z-M<~R6njza9Y7Br#)xh>Mn#@Rb<~Dx=nCq_+wS>2RL4(I_jkM3-=gmOh#JTj)RO&1 zwU@$){?9;NAI(ASO!YDU8d)J1$QLViU5pyQ3fvh-@?Z_;&;4ebaRQkXz-F9)H}C?! zLM>H<%>01hsw#|Dg4FzmHdZs1b%W}EH7 zYP^eGsI_j+iM??v@^aRW+W+^FWwvhjdLQadf1ze1hw0IMWvF(-sF~Y{tZKw|P~m3> zIp~3Q)B}%D9rdEJ_ABbapROtFL7iu#W^5MfzLiLtSQs?}TT$&DN7BIBa0cGOEbae~ z?jPRVSc6%pkrtpHEW$WcNg%Y>RT#a~k?P6`<;@gAJ777XGLKNFDq43fH7j8&h-yOp z+kB#wC?Vnr6%Al9p*JWX{x6y(l>x*erxx2ST862FhbSfjgkC^pGBMYw#SY3974`2F z^3cgtosdgT;rrv{ggz#D#2kWUwS|PHyo_KqoSmVi(zGTLg+w`_q9tL1oucJZSwiU3 zOj%>u9JLiz63Yl?+g1@3gfd(o5EXqeNLnY0XQ7fTNU$-SJq^y5vyL}O{c#<2$+_O> d5&z_b#>U2uPX9$uv^^&+`fNmU$F__}>OX?)op=BM diff --git a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po index 1fc0bb3453..30e02c1819 100644 --- a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po @@ -1,15 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-17 03:19-0500\n" -"PO-Revision-Date: 2023-04-25 08:09+0000\n" -"Last-Translator: Swara , 2022\n" -"Language-Team: Central Kurdish (http://www.transifex.com/django/django/" +"PO-Revision-Date: 2024-01-25 08:09+0000\n" +"Last-Translator: Swara , 2022,2024\n" +"Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -271,6 +271,8 @@ msgid "" "Enter a valid username. This value may contain only unaccented lowercase a-z " "and uppercase A-Z letters, numbers, and @/./+/-/_ characters." msgstr "" +"ناوی بەکارهێنەرێکی دروست بنوسە. ئەم بەهایە لەوانەیە تەنها پیتی بچووکی بێ " +"زاراوەی تێدابێت a-z و پیتی گەورە A-Z، ژمارەکان، و هێماکانی @/./+/-/_." msgid "" "Enter a valid username. This value may contain only letters, numbers, and " diff --git a/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo b/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo index f33dd236cb23b6d243cbe474d0e76ecd70c47c57..84eef503a354942b36d2d1060359ebf1e15e881b 100644 GIT binary patch literal 10430 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 delta 215 zcmdlNc!k;Go)F7a1|VPrVi_P-0b*t#)&XJ=umIv&KuJp=4N?OGlePIxJwtSzi&7Iy zGV}9vT@p)DtrUz53{7BfVp~^d1?7}lUML7$ds3t>y;EG<`rkArB>)A=jZAd S6y;~7CYKcJ7fgP@zY+j-eKqv} diff --git a/django/contrib/auth/locale/mr/LC_MESSAGES/django.po b/django/contrib/auth/locale/mr/LC_MESSAGES/django.po index 16b3e278b4..fa7b7f7b64 100644 --- a/django/contrib/auth/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-18 09:16+0100\n" -"PO-Revision-Date: 2015-03-18 10:30+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-03-17 03:19-0500\n" +"PO-Revision-Date: 2024-01-25 08:09+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,84 +18,93 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Personal info" -msgstr "" +msgstr "वैयक्तिक माहिती" msgid "Permissions" -msgstr "" +msgstr "परवानगी" msgid "Important dates" -msgstr "" +msgstr "महत्वाच्या दिनांक" #, python-format msgid "%(name)s object with primary key %(key)r does not exist." msgstr "" msgid "Password changed successfully." -msgstr "" +msgstr "गुप्तशब्द यशस्वीरीत्या बदलला." #, python-format msgid "Change password: %s" -msgstr "" +msgstr "गुप्तशब्द बदला: %s" msgid "Authentication and Authorization" -msgstr "" +msgstr "प्रमाणीकरण आणि अधिकृतता" + +msgid "password" +msgstr "गुप्तशब्द" + +msgid "last login" +msgstr "शेवटचा प्रवेश" msgid "No password set." -msgstr "" +msgstr "कोणताही गुप्तशब्द सेट केलेला नाही." msgid "Invalid password format or unknown hashing algorithm." -msgstr "" +msgstr "अयोग्य गुप्तशब्द स्वरूप किंवा अज्ञात हॅशिंग अलगोरीथम." -msgid "The two password fields didn't match." -msgstr "" +msgid "The two password fields didn’t match." +msgstr "दोन गुप्तशब्द क्षेत्र जुळत नाहीत." msgid "Password" -msgstr "" +msgstr "गुप्तशब्द" msgid "Password confirmation" -msgstr "" +msgstr "गुप्तशब्द निच्छितीकरण" -msgid "Enter the same password as above, for verification." -msgstr "" +msgid "Enter the same password as before, for verification." +msgstr "पडताळणीसाठी आधीच्या गुप्तशब्दासारखा समान गुप्तशब्द नमूद करा." msgid "" -"Raw passwords are not stored, so there is no way to see this user's " -"password, but you can change the password using this " -"form." +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." msgstr "" +"कच्चे गुप्तशब्द साठवले जात नाहीत, त्यामुळे या वापरकर्त्याचा गुप्तशब्द पाहण्याचा कोणताही " +"मार्ग नाही, परंतु तुम्ही हा फॉर्म वापरून गुप्तशब्द बदलू शकता. " #, python-format msgid "" "Please enter a correct %(username)s and password. Note that both fields may " "be case-sensitive." msgstr "" +"कृपया करून एक योग्य %(username)s आणि गुप्तशब्द नमूद करा. लक्षात घ्या की दोन्ही रखाणे " +"संवेदनशील असू शकतात." msgid "This account is inactive." -msgstr "" +msgstr "हे खाते निष्क्रिय आहे." msgid "Email" -msgstr "" +msgstr "विपत्र" msgid "New password" -msgstr "" +msgstr "नवीन गुप्तशब्द" msgid "New password confirmation" -msgstr "" +msgstr "नवीन गुप्तशब्द निच्छितीकरण" msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "" +msgstr "तुम्ही जुना गुप्तशब्द चुकीचा टाकला होता. कृपया तो पुन्हा नमूद करा." msgid "Old password" -msgstr "" +msgstr "जुना गुप्तशब्द" msgid "Password (again)" -msgstr "" +msgstr "गुप्तशब्द (पुन्हा)" msgid "algorithm" -msgstr "" +msgstr "अल्गोरिदम" msgid "iterations" -msgstr "" +msgstr "पुनरावृत्ती" msgid "salt" msgstr "" @@ -102,125 +112,188 @@ msgstr "" msgid "hash" msgstr "" +msgid "variety" +msgstr "निरनिराळ्या" + +msgid "version" +msgstr "आवृत्ती" + +msgid "memory cost" +msgstr "स्मरणशक्ती खर्च" + +msgid "time cost" +msgstr "वेळ खर्च" + +msgid "parallelism" +msgstr "समांतरता" + msgid "work factor" -msgstr "" +msgstr "कामाचा घटक" msgid "checksum" -msgstr "" +msgstr "चेकसम" + +msgid "block size" +msgstr "ब्लॉक आकार" msgid "name" -msgstr "" +msgstr "नाव" + +msgid "content type" +msgstr "सामुग्री प्रकार" msgid "codename" -msgstr "" +msgstr "सांकेतिक नाव" msgid "permission" -msgstr "" +msgstr "परवानगी" msgid "permissions" -msgstr "" +msgstr "परवानग्या" msgid "group" -msgstr "" +msgstr "समूह" msgid "groups" -msgstr "" - -msgid "password" -msgstr "" - -msgid "last login" -msgstr "" +msgstr "समूहं" msgid "superuser status" -msgstr "" +msgstr "सुपरयूजर स्थिती" msgid "" "Designates that this user has all permissions without explicitly assigning " "them." -msgstr "" +msgstr "या वापरकर्त्याकडे स्पष्टपणे नियुक्त केल्याशिवाय सर्व परवानग्या आहेत असे नियुक्त करते." msgid "" "The groups this user belongs to. A user will get all permissions granted to " "each of their groups." msgstr "" +"हा वापरकर्ता त्या गटांचा आहे. वापरकर्त्याला त्यांच्या प्रत्येक गटासाठी सर्व परवानग्या " +"मिळतील." msgid "user permissions" -msgstr "" +msgstr "वापरकर्ता परवानग्या" msgid "Specific permissions for this user." -msgstr "" +msgstr "या वापरकर्त्यासाठी विशिष्ट परवानग्या." msgid "username" -msgstr "" +msgstr "वापरकर्तानाव" -msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." -msgstr "" - -msgid "" -"Enter a valid username. This value may contain only letters, numbers and @/./" -"+/-/_ characters." -msgstr "" +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "आवश्यक. 150 किंवा कमी वर्ण. अक्षरे, अंक आणि @/./+/-/_ फक्त. " msgid "A user with that username already exists." -msgstr "" +msgstr "त्या वापरकर्ता नावासह वापरकर्ता आधीपासूनच अस्तित्वात आहे." msgid "first name" -msgstr "" +msgstr "पहिले नाव" msgid "last name" -msgstr "" +msgstr "आडनाव" msgid "email address" -msgstr "" +msgstr "विपत्र पत्ता" msgid "staff status" -msgstr "" +msgstr "कर्मचारी स्थिती" msgid "Designates whether the user can log into this admin site." -msgstr "" +msgstr "वापरकर्ता या प्रशासक स्थळावर प्रवेश करू शकतो की नाही हे नियुक्त करते." msgid "active" -msgstr "" +msgstr "सक्रिय" msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" +"या वापरकर्त्याला सक्रिय मानले जावे की नाही हे नियुक्त करते. खाती हटवण्याऐवजी ही निवड " +"कमी करा. " msgid "date joined" -msgstr "" +msgstr "सहभाग दिनांक" msgid "user" -msgstr "" +msgstr "वापरकर्ता" msgid "users" -msgstr "" +msgstr "वापरकर्ते" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "गुप्तशब्द %(verbose_name)s सारखा अत्यंत सामान्य आहे." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "तुमचा गुप्तशब्द तुमच्या इतर वैयक्तिक माहितीशी सारखा असू शकत नाही." + +msgid "This password is too common." +msgstr "हा गुप्तशब्द खूपच सामान्य आहे." + +msgid "Your password can’t be a commonly used password." +msgstr "तुमचा गुप्तशब्द हा सामान्यतः वापरला जाणारा गुप्तशब्द असू शकत नाही." + +msgid "This password is entirely numeric." +msgstr "हा गुप्तशब्द पूर्णपणे संख्यात्मक आहे." + +msgid "Your password can’t be entirely numeric." +msgstr "तुमचा गुप्तशब्द पूर्णपणे संख्यात्मक असू शकत नाही." #, python-format msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s वरील गुप्तशब्द पुनरस्थापना" + +msgid "" +"Enter a valid username. This value may contain only unaccented lowercase a-z " +"and uppercase A-Z letters, numbers, and @/./+/-/_ characters." msgstr "" +"वैध वापरकर्तानाव प्रविष्ट करा. या मूल्यामध्ये केवळ असुरक्षित लोअरकेस a-z आणि अपरकेस A-Z " +"अक्षरे, संख्या आणि @/./+/-/_ वर्ण असू शकतात." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"वैध वापरकर्तानाव प्रविष्ट करा. या मूल्यामध्ये फक्त अक्षरे, संख्या आणि @/./+/-/_ वर्ण असू " +"शकतात." msgid "Logged out" -msgstr "" +msgstr "बाहेर पडलात" msgid "Password reset" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना" msgid "Password reset sent" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना पाठविले गेले आहे" msgid "Enter new password" -msgstr "" +msgstr "नवीन गुप्तशब्द लिहा" msgid "Password reset unsuccessful" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना अयशस्वी" msgid "Password reset complete" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना पूर्ण" msgid "Password change" -msgstr "" +msgstr "गुप्तशब्द बदलणे" msgid "Password change successful" -msgstr "" +msgstr "गुप्तशब्द बदलणे यशस्वी झाले" diff --git a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50..4f5b10dc6571f325e7fd6053a923f077cdfa172f 100644 GIT binary patch literal 1004 zcmb7BO=}cE5N$PzjC%3n#Y1@zHpJd9Bg6@dpe7K=nkB5B1nJClb|=ns58WL}L_xiX z2M-=XKtvIGF-kBY5Y&tQ6X`$TAMj-L>~4aP98&P6rg~nzdR_DT{Ky)?IEA=~m_?jH zJVE%_K%7H-MqERDL!3qYLHP5(hzp3*#|XKP07MPzr^g9-k9iC880I@C`sa@^-@tkk zGg9~B*j@VW7R5b4`Yo!3r*yBJ&`LM>WWWB_0{*G7Ulk(^^Ie zGdzY&#ylm_K*M+aS7?&2nywUm9z-d&f?ydZEhW7qor&o^u5=8>Nu^BL+yH4ua8wRf?1{wZ7U{p%8XPY z%w-Rmf)-P3;R^QD$B`mB%dEp`o3kv0CVn#A1WH|F@~~22d0sYNAX(%qIVEF@;nW(b)ITIsT4DV>%o(;4e>(fs^`1Ms z?s~7C-FCfa&c1cMm*DJ|!I51nc-v(ES3A3fXUI8N;(+Et0)=tNp!JQjn??N&$2lD0 zzkP6aXHWTsXIOlGa`u2QrGendllC=o**;RahAsX&V3m zmrr7GiEc7ON&q*%HM;-+ diff --git a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po index 822bd2e63c..880ce36a51 100644 --- a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2024-01-24 19:22+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,25 +18,25 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Content Types" -msgstr "" +msgstr "सामुग्रीचे प्रकार" msgid "python model class name" -msgstr "" +msgstr "पायथन मॉडेल वर्गाचे नाव" msgid "content type" -msgstr "" +msgstr "सामुग्री प्रकार" msgid "content types" -msgstr "" +msgstr "सामुग्रीचे प्रकार" #, python-format msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s या सामुग्री प्रकाराच्या ऑब्जेक्टला संबंधित मॉडेल नाही." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" msgstr "" #, python-format -msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" -msgstr "" - -#, python-format -msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" msgstr "" diff --git a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo index aef2cabae3dec1b024641c8e7ae7363cd532caac..d9b1b120e3b8a66f743d27972a01826ac3113333 100644 GIT binary patch delta 177 zcmaDZ_)2iXnffRO1_m}Z28IA2od~3>f%GOI%>$(M*clk?fwVP{_6E|`KspCV9|zLR zK-z?Zfk7QeTL5VdAe{iDfm#_lfwVA?o&cn|f%Fm}4Ki;7RD3UxW(D#uaxn0LC9XpS fo@|a}+{VIaHJP6+3QQVIp2?=bXtjAKn;sJYsa_Yk delta 171 zcmaDQ_*`(pnfgcu1_m}Z1_pm1odBe(fb<3+%>$&h*%=t@fwTpX_6E`wKspCV9|6+L zK-!Rlfk7Qen*wPKARP;&fm#{bfV41>?gi4^KzbpN2AQ`OD!vOyvjX|&I2icA5?7!C b4>w0LZey7&z!n9>29syADQw=urpE*T7$+9o diff --git a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po index dbad306408..dc81ad496c 100644 --- a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po +++ b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po @@ -29,7 +29,7 @@ msgstr "URL" msgid "" "Example: “/about/contact/”. Make sure to have leading and trailing slashes." msgstr "" -"Voorbeeld “/about/kontak/”. Maak seker dat dit begin en eindig met ’n " +"Voorbeeld: “/about/kontak/”. Maak seker dat dit begin en eindig met ’n " "skuinsstreep." msgid "" @@ -41,7 +41,7 @@ msgstr "" msgid "Example: “/about/contact”. Make sure to have a leading slash." msgstr "" -"Voorbeeld “/about/kontak/”. Maak seker dat dit begin met ’n skuinsstreep." +"Voorbeeld: “/about/kontak/”. Maak seker dat dit begin met ’n skuinsstreep." msgid "URL is missing a leading slash." msgstr "’n Skuinsstreep ontbreek vooraan URL." @@ -69,7 +69,7 @@ msgid "" "Example: “flatpages/contact_page.html”. If this isn’t provided, the system " "will use “flatpages/default.html”." msgstr "" -"Voorbeeld “/flatpages/kontakbladsy.html”. As dit weggelaat word, sal die " +"Voorbeeld: “/flatpages/kontakbladsy.html”. As dit weggelaat word, sal die " "stelsel “flatpages/default.html” gebruik." msgid "registration required" diff --git a/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo b/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo index 7d4393d635ec976459a46c633ce748198e214420..6197eac0e75143517fe730d26d6bd565a997839a 100644 GIT binary patch literal 2040 zcmcgs&x;&I6s~CeHU1{SH7JP*gb4WyJb9ER=*^=?4}MiWJ8RY?c(S4A>sR&OtM7g9 z)%?0|?||WX2JcIFKf(Jv-oNnL=bb%_JqKI>E&<;M9t2(n9tHjZeAwlRW{f zjJ^@VK*woiYuq^uMZ7 zgP#zjGbPBR)a9#!V!^{mc8JT6jN(yj4IOjc6}tL>eD_Jm#|d4IDr9wuQ5XDNs?L8avx!8U}iFe)lQXw5jrlD+oUK}WTH5<^bW5q+Lv%d5^3$~ z*iGPH`*&AaWtNeUh6%}Au>ip&fvK4iok+vkDoaXykVQ&_Oh-m&W&~vBMv&x*U?wuL zV9P2!F51Rh2)!dy9)t8)ZImI75UdA4Tfjn@lBBroNe`o zRHgBwYs8sJtU)xSSRdU5;8JcMu7#bLG1^DX*rIuwDV^?QkWo)8t00dk< ziNz(lAw`LK#W{&3`9)R=UWs{mnZ*h|shKIMISMveV6H\n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2024-01-24 19:03+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,56 +18,63 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Advanced options" -msgstr "" +msgstr "प्रगत पर्याय" msgid "Flat Pages" msgstr "" msgid "URL" -msgstr "" +msgstr "यूआरएल" msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "अग्रगण्य आणि अनुगामी स्लॅश असल्याची खात्री करा. उदाहरण: “/about/contact/”." msgid "" "This value must contain only letters, numbers, dots, underscores, dashes, " "slashes or tildes." msgstr "" +"या मूल्यामध्ये फक्त अक्षरे, संख्या, ठिपके, अंडरस्कोअर, डॅश, स्लॅश किंवा टिल्ड असणे आवश्यक आहे." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "अग्रगण्य स्लॅश असल्याची खात्री करा. उदाहरण: “/about/contact”. " msgid "URL is missing a leading slash." -msgstr "" +msgstr "URL मधे अग्रगण्य स्लॅश गहाळ आहे." msgid "URL is missing a trailing slash." -msgstr "" +msgstr "URL मधे अनुगामी स्लॅश गहाळ आहे. " #, python-format msgid "Flatpage with url %(url)s already exists for site %(site)s" msgstr "" msgid "title" -msgstr "" +msgstr "शीर्षक" msgid "content" -msgstr "" +msgstr "सामुग्री" msgid "enable comments" -msgstr "" +msgstr "प्रतिक्रिया सक्षम करा" msgid "template name" -msgstr "" +msgstr "टेम्पलेटचे नाव" msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." msgstr "" msgid "registration required" -msgstr "" +msgstr "नोंदणी आवश्यक" msgid "If this is checked, only logged-in users will be able to view the page." msgstr "" +msgid "sites" +msgstr "स्थळे" + msgid "flat page" msgstr "" diff --git a/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo b/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo index 2ebb08f69c0a305bcaae1e6b9bb330063c123fdc..8643c1fe724b012efe000701b30d7cbc27aaae73 100644 GIT binary patch delta 430 zcmZwBze_?<6bJD0s^@bsf=3O3)up27rzwI%(9j>y)X z5g=NF>u?bsz-4#|WAF~fVGmBhaqBO)0Jm`8gA*_d6YvT~UX-xe+PgFh%tqc9mH zio#7e2M^&5bk&LRK4R}XXBp=-of5mr^K{C&NFK|~*w+e6_PEWD?CG3#xy}t%g4IB= zC2vhJ&-dtU;M5j}Mh9TU-_Oq7RTFaxI) zqAV=JLFmE(cmv1bD@?;~l}Ljb8088u+LvH2Jc5((9FD+uh$tl!H1reH5=4C%WZ?vy zg;DV)bm3uOO3xjm^TxWlQQ6YxR?23@G)nq(F}~%j-&JANGR$&rY0b)e3tb=Hn>3T; ztI!v=*x@$ca?@Lu^|WxrE(fB, 2011 # Jannis Leidel , 2011 # Mariusz Felisiak , 2023 +# Turmunkh Batkhuyag, 2023 # Zorig, 2014,2016 # Анхбаяр Анхаа , 2011-2012,2015 # Баясгалан Цэвлээ , 2011,2015 @@ -12,8 +13,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 18:45+0000\n" -"Last-Translator: Mariusz Felisiak , 2023\n" +"PO-Revision-Date: 2023-12-24 18:45+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" "Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" @@ -53,7 +54,7 @@ msgid "Multi polygon" msgstr "Олон өнцөгтийн олонлог" msgid "Geometry collection" -msgstr "Дүрсний цуглуулга" +msgstr "Геометрийн цуглуулга" msgid "Extent Aggregate Field" msgstr "Aggregate талбарыг өргөтгөх" @@ -62,20 +63,19 @@ msgid "Raster Field" msgstr "Растер талбар" msgid "No geometry value provided." -msgstr "Дүрс оруулаагүй байна." +msgstr "Геометрийн утгыг өгөөгүй." msgid "Invalid geometry value." -msgstr "Буруу дүрс байна." +msgstr "Буруу геометрийн утга байна." msgid "Invalid geometry type." -msgstr "Дүрсийн төрөл буруу байна." +msgstr "Геометер төрөл буруу байна." msgid "" "An error occurred when transforming the geometry to the SRID of the geometry " "form field." msgstr "" -"An error occurred when transforming the geometry to the SRID дүрсний форм " -"талбарын SRID утгыг хөрвүүлэхэд алдаа гарлаа." +"Геометрийг геометрийн форм талбарын SRID болгон хувиргах үед алдаа гарлаа." msgid "Delete all Features" msgstr "Бүх онцлогүүдыг устгах" diff --git a/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo b/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo index 0fc4a9cedae7a0cc53f90d9945093de9255a1570..2c755725db944be034bb97773e46c48135d1a5ca 100644 GIT binary patch delta 274 zcmcb@{Es>1o)F7a1|VPpVi_RT0b*7lwgF-g2moSXAPxlL7)Az$R3L2)#D{=vAc6ys zelT!J%}FguRY=UqQE*F5EGaEYEuLs$>Y*EyT9#RynV+ZYl30>zrC?-WXsl~sqHAQL zU}#}wVybNb1YACe#U;8SMTvREIf*6tMOF&_x!H+D3IT~liAg#@Jw_%I-z!KY78K}} zfD~n>rB>)A=jZCDWF_XM=TFvVTxs)Q$&Lq0Hau9``(Vjd1t5N~wBx~&Z4Z|0f3Rdb cSad#^T>oHcJ5YMYgC+YOEZGE7w`3m!0NCbQIsgCw delta 232 zcmeyze1+NKo)F7a1|VPrVi_P-0b*t#)&XJ=umIv&KuJp=4N?OG6H`psQWHxu z^Ye6F5=&C86pRcEO?3^7bqy^P3@oh-&9n^+4Gg#f{B?s;%QB0xtFy2&Hq|x&0xqA# z;u77EqQt!7oWzp+A}a;2#Js%BVg;Yn%#_p|1)D4|*C7YY)yvFdPRqBO_)tNnyu4hm e1f(r9Eww@~IX_pwpeR2pHMyi%zhJT?<4OQoWjlrd diff --git a/django/contrib/gis/locale/mr/LC_MESSAGES/django.po b/django/contrib/gis/locale/mr/LC_MESSAGES/django.po index 83ef357230..1083d9520e 100644 --- a/django/contrib/gis/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/gis/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-18 09:16+0100\n" -"PO-Revision-Date: 2015-03-18 08:35+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-24 18:45+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +20,11 @@ msgstr "" msgid "GIS" msgstr "" -msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." msgstr "" msgid "Point" @@ -46,6 +51,9 @@ msgstr "" msgid "Extent Aggregate Field" msgstr "" +msgid "Raster Field" +msgstr "" + msgid "No geometry value provided." msgstr "" @@ -61,13 +69,7 @@ msgid "" msgstr "" msgid "Delete all Features" -msgstr "" - -msgid "WKT debugging window:" -msgstr "" - -msgid "Google Maps via GeoDjango" -msgstr "" +msgstr "सर्व वैशिष्ट्ये घालवा" msgid "Debugging window (serialized value)" msgstr "" @@ -76,5 +78,5 @@ msgid "No feeds are registered." msgstr "" #, python-format -msgid "Slug %r isn't registered." +msgid "Slug %r isn’t registered." msgstr "" diff --git a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo index de62154a085e99cff66a5c5ea793fa16ae9da620..0f2c700ef91650ff0d4e7126f02a6477aece9242 100644 GIT binary patch literal 4863 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 diff --git a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po index 8b2de470c0..94bb307b78 100644 --- a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po @@ -3,6 +3,7 @@ # Translators: # Bayarkhuu Bataa, 2014 # Bayarkhuu Bataa, 2013 +# Turmunkh Batkhuyag, 2023 # Zorig, 2013 # Zorig, 2019 # Анхбаяр Анхаа , 2013 @@ -10,10 +11,10 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 20:42+0100\n" -"PO-Revision-Date: 2019-02-19 02:28+0000\n" -"Last-Translator: Zorig\n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-24 18:40+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,24 +28,24 @@ msgstr "Хүнчлэх" #. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). msgctxt "ordinal 11, 12, 13" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 0, e.g. 80th. msgctxt "ordinal 0" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. msgctxt "ordinal 1" msgid "{}st" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. msgctxt "ordinal 2" msgid "{}nd" msgstr "{} дахь" -#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +#. Translators: Ordinal format when value ends with 3, e.g. 83rd, except 13. msgctxt "ordinal 3" msgid "{}rd" msgstr "{} дахь" @@ -52,38 +53,32 @@ msgstr "{} дахь" #. Translators: Ordinal format when value ends with 4, e.g. 84th. msgctxt "ordinal 4" msgid "{}th" -msgstr "{} дахь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 5, e.g. 85th. msgctxt "ordinal 5" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 6, e.g. 86th. msgctxt "ordinal 6" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 7, e.g. 87th. msgctxt "ordinal 7" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 8, e.g. 88th. msgctxt "ordinal 8" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 9, e.g. 89th. msgctxt "ordinal 9" msgid "{}th" -msgstr "{} дэхь" - -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "%(value).1f сая" -msgstr[1] "%(value).1f сая" +msgstr "{} дэх" #, python-format msgid "%(value)s million" @@ -91,35 +86,17 @@ msgid_plural "%(value)s million" msgstr[0] "%(value)s сая" msgstr[1] "%(value)s сая" -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "%(value).1f тэрбум" -msgstr[1] "%(value).1f тэрбум" - #, python-format msgid "%(value)s billion" msgid_plural "%(value)s billion" msgstr[0] "%(value)s тэрбум" msgstr[1] "%(value)s тэрбум" -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "%(value).1f наяд" -msgstr[1] "%(value).1f наяд" - #, python-format msgid "%(value)s trillion" msgid_plural "%(value)s trillion" msgstr[0] "%(value)s наяд" -msgstr[1] "%(value)s наяд" - -#, python-format -msgid "%(value).1f quadrillion" -msgid_plural "%(value).1f quadrillion" -msgstr[0] "%(value).1f тунамал" -msgstr[1] "%(value).1f тунамал" +msgstr[1] "%(value)s их наяд" #, python-format msgid "%(value)s quadrillion" @@ -127,84 +104,42 @@ msgid_plural "%(value)s quadrillion" msgstr[0] "%(value)s тунамал" msgstr[1] "%(value)s тунамал" -#, python-format -msgid "%(value).1f quintillion" -msgid_plural "%(value).1f quintillion" -msgstr[0] "%(value).1f их ингүүмэл " -msgstr[1] "%(value).1f их ингүүмэл " - #, python-format msgid "%(value)s quintillion" msgid_plural "%(value)s quintillion" msgstr[0] "%(value)s их ингүүмэл " msgstr[1] "%(value)s их ингүүмэл " -#, python-format -msgid "%(value).1f sextillion" -msgid_plural "%(value).1f sextillion" -msgstr[0] "%(value).1f ялгаруулагч" -msgstr[1] "%(value).1f ялгаруулагч" - #, python-format msgid "%(value)s sextillion" msgid_plural "%(value)s sextillion" msgstr[0] "%(value)s ялгаруулагч" msgstr[1] "%(value)s ялгаруулагч" -#, python-format -msgid "%(value).1f septillion" -msgid_plural "%(value).1f septillion" -msgstr[0] "%(value).1f их өөр дээр " -msgstr[1] "%(value).1f их өөр дээр " - #, python-format msgid "%(value)s septillion" msgid_plural "%(value)s septillion" msgstr[0] "%(value)s их өөр дээр " msgstr[1] "%(value)s их өөр дээр " -#, python-format -msgid "%(value).1f octillion" -msgid_plural "%(value).1f octillion" -msgstr[0] "%(value).1f өөр дээр " -msgstr[1] "%(value).1f өөр дээр " - #, python-format msgid "%(value)s octillion" msgid_plural "%(value)s octillion" msgstr[0] "%(value)s өөр дээр " msgstr[1] "%(value)s өөр дээр " -#, python-format -msgid "%(value).1f nonillion" -msgid_plural "%(value).1f nonillion" -msgstr[0] "%(value).1f их шалтгааны үзэгдэл" -msgstr[1] "%(value).1f их шалтгааны үзэгдэл" - #, python-format msgid "%(value)s nonillion" msgid_plural "%(value)s nonillion" msgstr[0] "%(value)s их шалтгааны үзэгдэл" msgstr[1] "%(value)s их шалтгааны үзэгдэл" -#, python-format -msgid "%(value).1f decillion" -msgid_plural "%(value).1f decillion" -msgstr[0] "%(value).1f эрхэт" -msgstr[1] "%(value).1f эрхэт" - #, python-format msgid "%(value)s decillion" msgid_plural "%(value)s decillion" msgstr[0] "%(value)s эрхэт" msgstr[1] "%(value)s эрхэт" -#, python-format -msgid "%(value).1f googol" -msgid_plural "%(value).1f googol" -msgstr[0] "%(value).1f googol" -msgstr[1] "%(value).1f googol" - #, python-format msgid "%(value)s googol" msgid_plural "%(value)s googol" @@ -313,86 +248,86 @@ msgstr "одооноос %(delta)s " #. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' #, python-format msgctxt "naturaltime-past" -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жилүүд" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format msgctxt "naturaltime-past" -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format msgctxt "naturaltime-past" -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format msgctxt "naturaltime-past" -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format msgctxt "naturaltime-past" -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format msgctxt "naturaltime-past" -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" #. Translators: 'naturaltime-future' strings will be included in '%(delta)s #. from now' #, python-format msgctxt "naturaltime-future" -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жил" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format msgctxt "naturaltime-future" -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format msgctxt "naturaltime-future" -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format msgctxt "naturaltime-future" -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format msgctxt "naturaltime-future" -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format msgctxt "naturaltime-future" -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" diff --git a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50..9e758b08fc331c1728e8304539dc3bb658f7b4f0 100644 GIT binary patch literal 1506 zcmb`F%WD)d9LJ+ptK<9qMB<^)qSJl2YMoL9YsG>~t5!krV7i;#9oo-`oS!O_!M=ywn^jn{`JOP?~PlI^KFkVZ*0(cg+RY6nlXB4ps{0S}s7hqEp z=UA=-&G>ff+pJH3X8*mG2P}_R9N>Kf1CM!rkQ_aGqemc zcY-Ubx22YUfmG@_)_q%ho|iT22q-H`a->#a!oS1`_lqS>3jPQu1zA%>_<|E5FA@n# zmG=cJ(`3u|gf7k56l|ayHnoeU($Mbaur#d5&xM&;)v%f7;62TDZ?oOkY`dE6{@4b5 zgbNb*qePb!=S0gq8^gOIl|n)Kq9kKH&|I0}K_$=goOb*3?kTPUUkZ=r&ofb!&T(Fq zO1s&h=;z&owPN57Nsl^%1MYD?;+s(S5YybF>11lRo6NZB3{7=;ndHtSnsbx|+8t6% z1ZAeB^5{V20#kI5DK@+dYtk8nh+>TuxjV#J#iLnF>5@;|OIlaGM1obTo!V^R7x-vr zPF50eW`9w(%M%rq=y0Z>GoHoFJu;TGto6P&^0gxs<1LN(l!7B zE}z8W65WuZ#Ju91#FG3XD+RB_yu8d}1)tQ+l++vrn=CNbAqULW%gjs5x10QiSwW_} hyj-sYq%AWowL&jBKUcq?C_gJTxujUXV6qC!N&t}sHU0nq diff --git a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po index b042b29121..97d741ba36 100644 --- a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-24 18:40+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,25 +18,62 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Humanize" -msgstr "" +msgstr "मानवीकरण" -msgid "th" -msgstr "" +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}वा" -msgid "st" -msgstr "" +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}वा" -msgid "nd" -msgstr "" +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}वा" -msgid "rd" -msgstr "" +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}वा" -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "" -msgstr[1] "" +#. Translators: Ordinal format when value ends with 3, e.g. 83rd, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{वा}" #, python-format msgid "%(value)s million" @@ -43,120 +81,60 @@ msgid_plural "%(value)s million" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s billion" msgid_plural "%(value)s billion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s trillion" msgid_plural "%(value)s trillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f quadrillion" -msgid_plural "%(value).1f quadrillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s quadrillion" msgid_plural "%(value)s quadrillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f quintillion" -msgid_plural "%(value).1f quintillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s quintillion" msgid_plural "%(value)s quintillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f sextillion" -msgid_plural "%(value).1f sextillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s sextillion" msgid_plural "%(value)s sextillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f septillion" -msgid_plural "%(value).1f septillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s septillion" msgid_plural "%(value)s septillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f octillion" -msgid_plural "%(value).1f octillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s octillion" msgid_plural "%(value)s octillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f nonillion" -msgid_plural "%(value).1f nonillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s nonillion" msgid_plural "%(value)s nonillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f decillion" -msgid_plural "%(value).1f decillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s decillion" msgid_plural "%(value)s decillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f googol" -msgid_plural "%(value).1f googol" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s googol" msgid_plural "%(value)s googol" @@ -164,98 +142,187 @@ msgstr[0] "" msgstr[1] "" msgid "one" -msgstr "" +msgstr "एक" msgid "two" -msgstr "" +msgstr "दोन" msgid "three" -msgstr "" +msgstr "तीन" msgid "four" -msgstr "" +msgstr "चार" msgid "five" -msgstr "" +msgstr "पाच" msgid "six" -msgstr "" +msgstr "सहा" msgid "seven" -msgstr "" +msgstr "सात" msgid "eight" -msgstr "" +msgstr "आठ" msgid "nine" -msgstr "" +msgstr "नऊ" msgid "today" -msgstr "" +msgstr "आज" msgid "tomorrow" -msgstr "" +msgstr "उद्या" msgid "yesterday" -msgstr "" +msgstr "काल" +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' #, python-format -msgctxt "naturaltime" msgid "%(delta)s ago" -msgstr "" +msgstr "%(delta)s पूर्वी" -msgid "now" -msgstr "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. -#, python-format -msgid "a second ago" -msgid_plural "%(count)s seconds ago" -msgstr[0] "" -msgstr[1] "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. -#, python-format -msgid "a minute ago" -msgid_plural "%(count)s minutes ago" -msgstr[0] "" -msgstr[1] "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "an hour ago" msgid_plural "%(count)s hours ago" msgstr[0] "" msgstr[1] "" +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format -msgctxt "naturaltime" -msgid "%(delta)s from now" -msgstr "" +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "आता" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "a second from now" msgid_plural "%(count)s seconds from now" msgstr[0] "" msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "a minute from now" msgid_plural "%(count)s minutes from now" msgstr[0] "" msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "an hour from now" msgid_plural "%(count)s hours from now" msgstr[0] "" msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo index 652b8fd85f916f4e3e6a7887f8ba7ccc96a6ea37..e5b798fb05ca3535947a39ec0d35f79f3d751668 100644 GIT binary patch delta 816 zcmb8s&r1|x7{Kvo8^^Rv%Qn}_*tbJqWg)ACP+fw45Ct7N1V%XFXsOI@JG+FZy{xha z=`sv?>Zlf!=^zO952PLHQt#|QP}fdD;K57Z9XFw%pm%xR&-1?X&c4t4&T{JGk<#b( z2484NqKkM#93$=~=xFcpFn+-6_ziF3xm_adSjMCH6gx1$6s}_@eno{_cpAG5kp;Yl zb0Q`APLgI~wn3yDSMd;jL4})m5<5+i3wR0pu!NHo6W{>jGrL7x9KlCe#o9q`G;OaR z!yd-Zu(rJ0wef$d!AqNR+kXE9NpkCq9ggW9+z<%-P18MeN zCRD~P=51AYU=`?WHIaR6=hgje(HU0Rk$5U^Iit3E=qe{$P!qQ6ddH3AfO}RhJHNkM z%;o<1?r7e&3SQdiNVvh<#F}CDWO_6GUfJw6tX$4pG`9w;E8%oBqv!QP~W)AH2YYg9w8srdPds7Chp(`9^wGsG3&$z(kGKPg{KMW0KG|R4bN~3 zZ*dP_@Ce;0X&+liKYuaHj7yqe%LI2bG0iwb()+(i#|OA1Jt+IT#RW{zkLF0uHNQSC bX2Q2bsehRqSYh4vEZ_ITQ~RsmaGdlHJIE}Y diff --git a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po index 4c93f29da6..35664e99ed 100644 --- a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po @@ -1,15 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-19 09:22+0000\n" -"Last-Translator: Swara , 2022\n" -"Language-Team: Central Kurdish (http://www.transifex.com/django/django/" +"PO-Revision-Date: 2024-01-19 09:22+0000\n" +"Last-Translator: Swara , 2022,2024\n" +"Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -93,9 +93,9 @@ msgstr "هەندێک کلیلی نەناسراو دابین کران: %(keys)s" #, python-format msgid "" "Ensure that the upper bound of the range is not greater than %(limit_value)s." -msgstr "" +msgstr "دڵنیابە لەوەی کە سنووری سەرەوەی ڕێژەکە زیاتر نییە لە %(limit_value)s." #, python-format msgid "" "Ensure that the lower bound of the range is not less than %(limit_value)s." -msgstr "" +msgstr "دڵنیابە لەوەی کە سنووری خوارەوەی ڕێژەکە کەمتر نییە لە %(limit_value)s." diff --git a/django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d183857384acf0ed361dbfa74f1acc72c5f74ec0 GIT binary patch literal 1132 zcmb_ZK~K~`6t0Mx)Eftt;99g=do z{s^vt`?@U)E%_WLz*(FGP|gGGc|g{QG0_e@5(z~D!8|f`edZeRm|_KMJW^Z|wIoQ? z4(GT`e*Lt_0^iGo+);kWkEs3TGaB26qLUuIiA#MExx`ywQB&Bn zJQh;XYSQ#QI@)d~v@Tp?*JkJ}U-UC6y^4ukQZAM*(_)F1hDmYQEtdz22z#0(iq<8I zl7J~8T{08iVUpCCWOEnMQ@#XA)NHdRr*+OkmsC+wEuZwal!{%)VR2kgnSnpgmkSLM zI-SXWQ1HFo38gb&S0}6E2X819iuRbmP9qF)H^!8TFDoYwm>-RhMvKXWtICb~1RXli zWp~YUNynpx@cgLhlA$?Y{T$OJp|op3Te5&o2pJ|WiQ+s>D&-N10%MT z|6Ze?nRM0Yb))x*(XUPV5T9^bGkV*kD>%K)ldOVd3p%6sOnR^I;i+ZxM&7W6%C6BX zMn5s>W20Yn++O6#w$VFAzc>0_o~}cio9q3;A%h*0J}`O{<&9k4xeA_ZPUetJ`R4!n i{+ZhmL%zgz@`dH^O;<7Z-@O-V7+}dTc#iIWTHrVGU*L)W literal 0 HcmV?d00001 diff --git a/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..42fb58dec0 --- /dev/null +++ b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,97 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Omkar Parab, 2024 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 02:13-0600\n" +"PO-Revision-Date: 2024-01-19 09:22+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "JSON डेटा लोड करू शकलो नाही. " + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "दोन वैध मूल्ये प्रविष्ट करा." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "दोन पूर्ण संख्या प्रविष्ट करा." + +msgid "Enter two numbers." +msgstr "दोन संख्या प्रविष्ट करा." + +msgid "Enter two valid date/times." +msgstr "दोन वैध दिनांक/वेळा प्रविष्ट करा." + +msgid "Enter two valid dates." +msgstr "दोन वैध दिनांका प्रविष्ट करा" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that the upper bound of the range is not greater than %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that the lower bound of the range is not less than %(limit_value)s." +msgstr "" diff --git a/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo b/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50..54b53f3bea340e8aff80c53f2d41698fb36200c6 100644 GIT binary patch literal 1530 zcmb7D&x;gC6s|-Qb&^~>dwAJgc8xu=GwxyOWiQ4R1Q(ZOHaR4h+Me3!*6yyRs%Epf zjY3#N#N@E*!5qTYNC-hCViF-l@aP}lF;s+{LjDK8s`;@hf?Du+?^S*8dtbfk{`>I$ z9foxXb_CXeeFXaj=9h!{vwvXcVgJFtgnjW2V+Y~y!F&9l@E^cGhWGd<@cZE%{8zAl zVMmdl*vHr>hzs}|$iD~3?;m}Su^4_0z6t*wyx)HW{~`SU@F-*N!#uC=?bo}o10iAz zkje5I(1Nj5(aDrZjArdL)0FU%)&+^oq(TuAzOH57GlD8^Qkv!(J91OZki;=<^zxk6 zR?m<&T$!xw($}cOflg9U2-3X-nWm@xo2fCCjvI}q{U7SXUOJV%yyM%w+~*jHtt9Vt zJRyWoM;1IQspN&I)6y0%s$9gLv>`S{X>>yiu99@ftwuLuWUW9ppaWmnc#MJ1JqmUTDlL??P(9kpdlwUx8cs@TjtG&;!*#I$Cc z$D`S~s5M8;`S^J2(^;(A8Lmy#R=m_XH&VrPwm8oft#HNHkD;bD2T0lN@vey4f)_C@ z4Vym9WqA^r9cKN8hQK-gDZTa-_(%v1K_1W5IvNRY`)c&S| zN+Y&RqslSN1xiw`v@nZn?NibG9?tjL5Gq2Q#_AONmb~W z$||IKv9&=4>!1o2!x@2aG9o^y&ph*XMYV^AmQ$~ zco&p2C;%EgE(YvKz_q{*fxzDx%DUqQmz}*iRO`8Xf8P>2AVGwC;*ws%gMi%~OYCC{ z`hgq{VK@9WuhhH^D0+a+N4RdErp7n z7x%_BU(_)k#ZcE|j)4=*byQw*_Eu;DLQw3+H1*PtH&thW_qFeg_BKFY9Nn9IBBN3~ WqJN>csCX0T==;Oa@!SIpkv#({!?O1P delta 234 zcmeyxeTCWLo)F7a1|VPrVi_P-0b*t#)&XJ=umIv&KuJp=4N?OGlbI{ zGBnaQ00J(b#Nra&kfOxA;+({i{30s_uf)8(%wh$f)XbFB90i*!FxMdm%+<@xV@}Jr oo1Dm`AX8pmu2%xmmzkDYp_iPWt6xx*pOu\n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2024-01-24 18:32+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,26 +18,31 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Redirects" -msgstr "" +msgstr "पुनर्निर्देशने" + +msgid "site" +msgstr "स्थळ" msgid "redirect from" -msgstr "" +msgstr "पासून पुनर्निर्देशित" msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "डोमेन नाव वगळून हा एक परिपूर्ण मार्ग असावा. उदाहरण: \"/events/search/\"." msgid "redirect to" -msgstr "" +msgstr "ला पुनर्निर्देशित" msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." msgstr "" +"हा एकतर निरपेक्ष मार्ग असू शकतो (वरीलप्रमाणे) किंवा एखाद्या योजनेपासून सुरू होणारी पूर्ण " +"URL असू शकते जसे की \"https://\"" msgid "redirect" -msgstr "" +msgstr "पुनर्निर्देशित" msgid "redirects" -msgstr "" +msgstr "पुनर्निर्देशने" diff --git a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50..0dc523de98ea17773eb997f9e91a0c8e7aacb034 100644 GIT binary patch literal 768 zcmZXPzl#$=6vszBf3OOIwZ&KnIdrl~ION!nM!kar!-X?vWiyw|ZT2oZyUa`^*999J z?M!1MhZ7MS<*Kt$u(7kWlmY($EiL`dCb=W{;IrR(Z@%x%+n?8##sqN@TnBA%89WC* zj=?4H3HbU~;Jx3$74QT2`Y+&pzro`(g#3kG1>0u{DMJO+`(HwDLJy%O=r^eM{ehyb zn7st`aegWUS4CXF_uTAE9ty3KOll&Ad7=dEawCYI7U$}V{3O{I2lKNgEtTzwj$s>J z_DCo{DWcsyF5@iN5_zT!Yw9@Zvb%#=vvwBIptZ@i#FNBZ*?l|~(ORXp!YWl(TcOp} zsCMU81ra>p+OW3bQun#ZR75w^eXeMWE538P=z&GX10D<37Cen;6IZ5}&{EHsJPJde z=VjvuB)ei*?qq2=-E1!XS$mkOa5-phG}li5p<1p4_cCdO#1aQNwlrdB!o1HDS*M*I zS6Z0Hc6*(zp8EV-yF#%w*~z+zj3c_blbDk=Bbut9)gLI{XX}|tbwp)eq`Fb7)9JBM zlJrJ{R+sAmarW3*>n1Op{pcporukE6-#h!JsD5zvv$L<+Bb2-xVd8#tZEW jNnydi{tbSOD=Xprj>`2C0F8iQi4@Lv)>sQWHxu z^Ye6F5=&C86pRcEO?3?nbq&oG3=ORe%(V>+4Gg#f{B?s;%QA~m)S2iS8t59B0<~Bf z8fhB<0hdo=afxn7QDRyQKH>Sg9Jr{&vC nE@4!VDK9VAD*@@tOiQiMOU}>LFDS~-N=+^))-Ra6hH)hTVAVUT diff --git a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po index 45b727e128..cefc17d300 100644 --- a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"PO-Revision-Date: 2024-01-24 18:26+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +18,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Sessions" -msgstr "" +msgstr "सत्रे" msgid "session key" -msgstr "" +msgstr "सत्राची किल्ली" msgid "session data" -msgstr "" +msgstr "सत्रातील डेटा" msgid "expire date" -msgstr "" +msgstr "संपण्याची दिनांक" msgid "session" -msgstr "" +msgstr "सत्र" msgid "sessions" -msgstr "" +msgstr "सत्रे" diff --git a/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo b/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9fb10c1d39cdf7eb3080abd7a0a7b50..40f14123d20427b1aed79b52803e369be7a88203 100644 GIT binary patch literal 884 zcmY*VPiqu09F1BPMnMtrBp5xlX!f5K%apySEfie3)KxED(wVqBbtf5;RN9+V#DfZ6 zdhsG+Rz;)=qO=$LO(dVeFQ6|ot!;ns@_xVM<>k%%J~OsXP{)DuKo2+pyaYmR0!M)@ zpapCLCxJge(ESC*LVu{zod!Pu&H<;eZw?dk8vGP|34HblAs4{c!NKP~IOtL^t`Nw` zF(Bj#zM;bVy9HTQcQPvs=?w%;Rn9X>CC>#-xRlD$L`fU=xLl>C;E6C)X=?eRsgX1@ z#gMO-da~~>F>ovwL%LcmiNvzGl-(2BWJ<;~UE;E@q6JYXZCS_kvy|Of?iZW`XkKNFN!FUA&8fI??Q#PZ-R8!!p61dFxm7x*^Z6sLX_srhcm;P_ zlaR>%GVcr46FiS;2S;|0(eZ(`MO?4*qNv$mkUbPDwM6ChD%ma#cdplSU7v_LbDf#J zZ)nyU(M|jtArWG=KuRlCY#sk2lhZUAaBYNb-|fw^sXbkI>!HwWMkXrFWIv`;i<$i& zGp4zYy2EA7hiq2q+{9ECX>(#aBHnHK(JSvp-hKC@=a}F5(F^Z3 zFnITg0^a@d?nk+9c=xfCf5kD*)=TYs?_7Dj_ktDX8u1QB2>8vr4`B^G#QTy#av-yJZ>n@V$#K5-jRywE$UjFQ BOsW6? delta 261 zcmeyuc7@sEo)F7a1|VPrVi_P-0b*t#)&XJ=umIv&KuJp=4N?OGlSLU#>qB&%i&7Iy zGV}9vT@p)DtrUz53{7V~8y=2|KECKe@@WMnF6WR#Q?Sn2DRmzV36fQ-ycORdmL&d=2^D9X=D OO)e?cFPMCaaU}rb$wc@7 diff --git a/django/contrib/sites/locale/mr/LC_MESSAGES/django.po b/django/contrib/sites/locale/mr/LC_MESSAGES/django.po index fc1e2a9358..3e041c141e 100644 --- a/django/contrib/sites/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/sites/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"PO-Revision-Date: 2024-01-24 18:05+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +18,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Sites" -msgstr "" +msgstr "स्थळे" msgid "The domain name cannot contain any spaces or tabs." -msgstr "" +msgstr "डोमेन नावामध्ये कोणताही स्पेस किंवा टॅब असू शकत नाहीत." msgid "domain name" -msgstr "" +msgstr "डोमेनचे नाव" msgid "display name" -msgstr "" +msgstr "प्रदर्शन नाव" msgid "site" -msgstr "" +msgstr "स्थळ" msgid "sites" -msgstr "" +msgstr "स्थळे" diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt index 05f80bb00f..ba630c6398 100644 --- a/docs/releases/5.0.2.txt +++ b/docs/releases/5.0.2.txt @@ -4,7 +4,8 @@ Django 5.0.2 release notes *Expected February 5, 2024* -Django 5.0.2 fixes several bugs in 5.0.1. +Django 5.0.2 fixes several bugs in 5.0.1. Also, the latest string translations +from Transifex are incorporated. Bugfixes ======== From 1df8983aa3b51bd37a5b9acf92475ad3a9180fe4 Mon Sep 17 00:00:00 2001 From: David Smith Date: Thu, 25 Jan 2024 12:55:45 +0000 Subject: [PATCH 07/37] Refs #35058 -- Added support for measured geometries to GDAL LineString. --- django/contrib/gis/gdal/geometries.py | 18 +++++++++++++++--- django/contrib/gis/gdal/prototypes/geom.py | 11 +++++++++-- docs/ref/contrib/gis/gdal.txt | 11 +++++++++++ docs/releases/5.1.txt | 9 +++++---- tests/gis_tests/gdal_tests/test_geom.py | 19 +++++++++++++++++-- 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/django/contrib/gis/gdal/geometries.py b/django/contrib/gis/gdal/geometries.py index 85ef265ad1..83b7b39fd0 100644 --- a/django/contrib/gis/gdal/geometries.py +++ b/django/contrib/gis/gdal/geometries.py @@ -625,10 +625,14 @@ class LineString(OGRGeometry): def __getitem__(self, index): "Return the Point at the given index." if 0 <= index < self.point_count: - x, y, z = c_double(), c_double(), c_double() - capi.get_point(self.ptr, index, byref(x), byref(y), byref(z)) + x, y, z, m = c_double(), c_double(), c_double(), c_double() + capi.get_point(self.ptr, index, byref(x), byref(y), byref(z), byref(m)) + if self.is_3d and self.is_measured: + return x.value, y.value, z.value, m.value if self.is_3d: return x.value, y.value, z.value + if self.is_measured: + return x.value, y.value, m.value dim = self.coord_dim if dim == 1: return (x.value,) @@ -673,6 +677,12 @@ class LineString(OGRGeometry): if self.is_3d: return self._listarr(capi.getz) + @property + def m(self): + """Return the M coordinates in a list.""" + if self.is_measured: + return self._listarr(capi.getm) + # LinearRings are used in Polygons. class LinearRing(LineString): @@ -789,9 +799,11 @@ GEO_CLASSES = { 7: GeometryCollection, 101: LinearRing, 2001: Point, # POINT M + 2002: LineString, # LINESTRING M 3001: Point, # POINT ZM + 3002: LineString, # LINESTRING ZM 1 + OGRGeomType.wkb25bit: Point, # POINT Z - 2 + OGRGeomType.wkb25bit: LineString, + 2 + OGRGeomType.wkb25bit: LineString, # LINESTRING Z 3 + OGRGeomType.wkb25bit: Polygon, 4 + OGRGeomType.wkb25bit: MultiPoint, 5 + OGRGeomType.wkb25bit: MultiLineString, diff --git a/django/contrib/gis/gdal/prototypes/geom.py b/django/contrib/gis/gdal/prototypes/geom.py index 6dc6967ecf..25af48570b 100644 --- a/django/contrib/gis/gdal/prototypes/geom.py +++ b/django/contrib/gis/gdal/prototypes/geom.py @@ -137,8 +137,15 @@ get_geom_name = const_string_output( get_geom_type = int_output(lgdal.OGR_G_GetGeometryType, [c_void_p]) get_point_count = int_output(lgdal.OGR_G_GetPointCount, [c_void_p]) get_point = void_output( - lgdal.OGR_G_GetPoint, - [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double)], + lgdal.OGR_G_GetPointZM, + [ + c_void_p, + c_int, + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + ], errcheck=False, ) geom_close_rings = void_output(lgdal.OGR_G_CloseRings, [c_void_p], errcheck=False) diff --git a/docs/ref/contrib/gis/gdal.txt b/docs/ref/contrib/gis/gdal.txt index be6e738160..c2a333f895 100644 --- a/docs/ref/contrib/gis/gdal.txt +++ b/docs/ref/contrib/gis/gdal.txt @@ -936,6 +936,17 @@ coordinate transformation: >>> OGRGeometry("LINESTRING (1 2 3,4 5 6)").z [3.0, 6.0] + .. attribute:: m + + .. versionadded:: 5.1 + + Returns a list of M coordinates in this line or ``None`` if the line does + not have M coordinates: + + .. code-block:: pycon + + >>> OGRGeometry("LINESTRING(0 1 2 10, 1 2 3 11, 2 3 4 12)").m + [10.0, 11.0, 12.0] .. class:: Polygon diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt index 34ef350afd..5d57edde46 100644 --- a/docs/releases/5.1.txt +++ b/docs/releases/5.1.txt @@ -78,10 +78,11 @@ Minor features * The new :meth:`.OGRGeometry.set_3d` method allows addition and removal of the ``Z`` coordinate dimension. -* :class:`~django.contrib.gis.gdal.OGRGeometry` and - :class:`~django.contrib.gis.gdal.Point` now support measured geometries - via the new :attr:`.OGRGeometry.is_measured` and :attr:`.Point.m` properties, - and the :meth:`.OGRGeometry.set_measured` method. +* :class:`~django.contrib.gis.gdal.OGRGeometry`, + :class:`~django.contrib.gis.gdal.Point`, and + :class:`~django.contrib.gis.gdal.LineString` now support measured geometries + via the new :attr:`.OGRGeometry.is_measured` and ``m`` properties, and the + :meth:`.OGRGeometry.set_measured` method. * :attr:`.OGRGeometry.centroid` is now available on all supported geometry types. diff --git a/tests/gis_tests/gdal_tests/test_geom.py b/tests/gis_tests/gdal_tests/test_geom.py index 6bb7aa0724..abcfbc9eab 100644 --- a/tests/gis_tests/gdal_tests/test_geom.py +++ b/tests/gis_tests/gdal_tests/test_geom.py @@ -673,7 +673,7 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin): ("TIN Z", 1016, False), ("Triangle Z", 1017, False), ("Point M", 2001, True), - ("LineString M", 2002, False), + ("LineString M", 2002, True), ("Polygon M", 2003, False), ("MultiPoint M", 2004, False), ("MultiLineString M", 2005, False), @@ -688,7 +688,7 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin): ("TIN M", 2016, False), ("Triangle M", 2017, False), ("Point ZM", 3001, True), - ("LineString ZM", 3002, False), + ("LineString ZM", 3002, True), ("Polygon ZM", 3003, False), ("MultiPoint ZM", 3004, False), ("MultiLineString ZM", 3005, False), @@ -900,6 +900,21 @@ class OGRGeomTest(SimpleTestCase, TestDataMixin): ) self.assertEqual(geometrycollection.centroid.wkt, "POINT (110 30)") + def test_linestring_m_dimension(self): + geom = OGRGeometry("LINESTRING(0 1 2 10, 1 2 3 11, 2 3 4 12)") + self.assertIs(geom.is_measured, True) + self.assertEqual(geom.m, [10.0, 11.0, 12.0]) + self.assertEqual(geom[0], (0.0, 1.0, 2.0, 10.0)) + + geom = OGRGeometry("LINESTRING M (0 1 10, 1 2 11)") + self.assertIs(geom.is_measured, True) + self.assertEqual(geom.m, [10.0, 11.0]) + self.assertEqual(geom[0], (0.0, 1.0, 10.0)) + + geom.set_measured(False) + self.assertIs(geom.is_measured, False) + self.assertIs(geom.m, None) + class DeprecationTests(SimpleTestCase): def test_coord_setter_deprecation(self): From b7154f811f0c01757346f88ee006c8f2034acee3 Mon Sep 17 00:00:00 2001 From: Kris Avi Date: Wed, 26 Oct 2016 20:26:36 +0300 Subject: [PATCH 08/37] Fixed #24128 -- Made admindocs TemplateDetailView respect template_loaders. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Author: Alexander Lazarević --- django/contrib/admindocs/views.py | 9 +++++++-- tests/admin_docs/templates/view_for_loader_test.html | 8 ++++++++ tests/admin_docs/test_views.py | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 tests/admin_docs/templates/view_for_loader_test.html diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py index 4f970e89b3..5c18d676f2 100644 --- a/django/contrib/admindocs/views.py +++ b/django/contrib/admindocs/views.py @@ -404,8 +404,13 @@ class TemplateDetailView(BaseAdminDocsView): # Non-trivial TEMPLATES settings aren't supported (#24125). pass else: - # This doesn't account for template loaders (#24128). - for index, directory in enumerate(default_engine.dirs): + directories = list(default_engine.dirs) + for loader in default_engine.template_loaders: + if hasattr(loader, "get_dirs"): + for dir_ in loader.get_dirs(): + if dir_ not in directories: + directories.append(dir_) + for index, directory in enumerate(directories): template_file = Path(safe_join(directory, template)) if template_file.exists(): template_contents = template_file.read_text() diff --git a/tests/admin_docs/templates/view_for_loader_test.html b/tests/admin_docs/templates/view_for_loader_test.html new file mode 100644 index 0000000000..12130c54cd --- /dev/null +++ b/tests/admin_docs/templates/view_for_loader_test.html @@ -0,0 +1,8 @@ + + + + + Template for Test + + + diff --git a/tests/admin_docs/test_views.py b/tests/admin_docs/test_views.py index bf469181b3..ef7fde1bf9 100644 --- a/tests/admin_docs/test_views.py +++ b/tests/admin_docs/test_views.py @@ -138,6 +138,12 @@ class AdminDocViewTests(TestDataMixin, AdminDocsTestCase): html=True, ) + def test_template_detail_loader(self): + response = self.client.get( + reverse("django-admindocs-templates", args=["view_for_loader_test.html"]) + ) + self.assertContains(response, "view_for_loader_test.html") + def test_missing_docutils(self): utils.docutils_is_available = False try: From 06d0a1bd56a9899c351ca047a05813e8dd6a4e17 Mon Sep 17 00:00:00 2001 From: Natalia <124304+nessita@users.noreply.github.com> Date: Mon, 29 Jan 2024 11:41:53 -0300 Subject: [PATCH 09/37] Added stub release notes and release date for 5.0.2, 4.2.10, and 3.2.24. --- docs/releases/3.2.24.txt | 9 +++++++++ docs/releases/4.2.10.txt | 9 +++++++++ docs/releases/5.0.2.txt | 6 +++--- docs/releases/index.txt | 2 ++ 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 docs/releases/3.2.24.txt create mode 100644 docs/releases/4.2.10.txt diff --git a/docs/releases/3.2.24.txt b/docs/releases/3.2.24.txt new file mode 100644 index 0000000000..1ab7024f73 --- /dev/null +++ b/docs/releases/3.2.24.txt @@ -0,0 +1,9 @@ +=========================== +Django 3.2.24 release notes +=========================== + +*February 6, 2024* + +Django 3.2.24 fixes a security issue with severity "moderate" in 3.2.23. + +... diff --git a/docs/releases/4.2.10.txt b/docs/releases/4.2.10.txt new file mode 100644 index 0000000000..c039f6840f --- /dev/null +++ b/docs/releases/4.2.10.txt @@ -0,0 +1,9 @@ +=========================== +Django 4.2.10 release notes +=========================== + +*February 6, 2024* + +Django 4.2.10 fixes a security issue with severity "moderate" in 4.2.9. + +... diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt index ba630c6398..c795049c73 100644 --- a/docs/releases/5.0.2.txt +++ b/docs/releases/5.0.2.txt @@ -2,10 +2,10 @@ Django 5.0.2 release notes ========================== -*Expected February 5, 2024* +*February 6, 2024* -Django 5.0.2 fixes several bugs in 5.0.1. Also, the latest string translations -from Transifex are incorporated. +Django 5.0.2 fixes a security issue with severity "moderate" and several bugs +in 5.0.1. Also, the latest string translations from Transifex are incorporated. Bugfixes ======== diff --git a/docs/releases/index.txt b/docs/releases/index.txt index 8a70de5869..db0741a136 100644 --- a/docs/releases/index.txt +++ b/docs/releases/index.txt @@ -42,6 +42,7 @@ versions of the documentation contain the release notes for any later releases. .. toctree:: :maxdepth: 1 + 4.2.10 4.2.9 4.2.8 4.2.7 @@ -95,6 +96,7 @@ versions of the documentation contain the release notes for any later releases. .. toctree:: :maxdepth: 1 + 3.2.24 3.2.23 3.2.22 3.2.21 From 22785f0d6b9d1ef601737b1f0076972e7c82e8d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Lazarevi=C4=87?= Date: Mon, 29 Jan 2024 12:16:40 +0100 Subject: [PATCH 10/37] Refs #35141 -- Corrected value of CACHE_MIDDLEWARE_SECONDS in CacheMiddlewareTest tests. --- tests/template_tests/test_response.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/template_tests/test_response.py b/tests/template_tests/test_response.py index 89361be284..d7f5a7eab7 100644 --- a/tests/template_tests/test_response.py +++ b/tests/template_tests/test_response.py @@ -392,7 +392,7 @@ class CustomURLConfTest(SimpleTestCase): }, ) @override_settings( - CACHE_MIDDLEWARE_SECONDS=2.0, ROOT_URLCONF="template_tests.alternate_urls" + CACHE_MIDDLEWARE_SECONDS=2, ROOT_URLCONF="template_tests.alternate_urls" ) class CacheMiddlewareTest(SimpleTestCase): def test_middleware_caching(self): From a5365339eaee043895a79dbbdd7462f1399136e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexander=20Lazarevi=C4=87?= Date: Fri, 26 Jan 2024 03:59:54 +0100 Subject: [PATCH 11/37] Fixed #35141 -- Clarified the expected type of CACHE_MIDDLEWARE_SECONDS setting. --- docs/ref/settings.txt | 4 ++-- docs/topics/cache.txt | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/ref/settings.txt b/docs/ref/settings.txt index 9db029cc60..98434c8833 100644 --- a/docs/ref/settings.txt +++ b/docs/ref/settings.txt @@ -273,8 +273,8 @@ See :doc:`/topics/cache`. Default: ``600`` -The default number of seconds to cache a page for the :ref:`cache middleware -`. +The default integer number of seconds to cache a page for the +:ref:`cache middleware `. See :doc:`/topics/cache`. diff --git a/docs/topics/cache.txt b/docs/topics/cache.txt index 6625b6946c..3d67f9b03a 100644 --- a/docs/topics/cache.txt +++ b/docs/topics/cache.txt @@ -608,8 +608,9 @@ entire site. You'll need to add Then, add the following required settings to your Django settings file: * :setting:`CACHE_MIDDLEWARE_ALIAS` -- The cache alias to use for storage. -* :setting:`CACHE_MIDDLEWARE_SECONDS` -- The number of seconds each page should - be cached. +* :setting:`CACHE_MIDDLEWARE_SECONDS` -- The integer number of seconds each + page should be cached. + * :setting:`CACHE_MIDDLEWARE_KEY_PREFIX` -- If the cache is shared across multiple sites using the same Django installation, set this to the name of the site, or some other string that is unique to this Django instance, to From 820c5f1bacd41713bd30d8b5fefb66752ff15c4c Mon Sep 17 00:00:00 2001 From: Nicolas Delaby Date: Tue, 23 Jan 2024 11:51:24 +0100 Subject: [PATCH 12/37] Fixed #35135 -- Made FilteredRelation raise ValueError on querysets as rhs. Regression in 59f475470494ce5b8cbff816b1e5dafcbd10a3a3. --- django/db/models/sql/query.py | 10 ++++++++++ docs/releases/5.0.2.txt | 5 +++++ tests/filtered_relation/tests.py | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 6e8813b5e7..5100869b34 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -91,6 +91,8 @@ def get_children_from_q(q): def get_child_with_renamed_prefix(prefix, replacement, child): + from django.db.models.query import QuerySet + if isinstance(child, Node): return rename_prefix_from_q(prefix, replacement, child) if isinstance(child, tuple): @@ -105,6 +107,14 @@ def get_child_with_renamed_prefix(prefix, replacement, child): child = child.copy() if child.name.startswith(prefix + LOOKUP_SEP): child.name = child.name.replace(prefix, replacement, 1) + elif isinstance(child, QuerySet): + # QuerySet may contain OuterRef() references which cannot work properly + # without repointing to the filtered annotation and will spawn a + # different JOIN. Always raise ValueError instead of providing partial + # support in other cases. + raise ValueError( + "Passing a QuerySet within a FilteredRelation is not supported." + ) elif hasattr(child, "resolve_expression"): child = child.copy() child.set_source_expressions( diff --git a/docs/releases/5.0.2.txt b/docs/releases/5.0.2.txt index c795049c73..8e2d648ecc 100644 --- a/docs/releases/5.0.2.txt +++ b/docs/releases/5.0.2.txt @@ -19,3 +19,8 @@ Bugfixes * Fixed a bug in Django 5.0 that caused a crash of ``Model.full_clean()`` on models with a ``GeneratedField`` (:ticket:`35127`). + +* Fixed a regression in Django 5.0 that caused a crash of + ``FilteredRelation()`` with querysets as right-hand sides (:ticket:`35135`). + ``FilteredRelation()`` now raises a ``ValueError`` on querysets as right-hand + sides. diff --git a/tests/filtered_relation/tests.py b/tests/filtered_relation/tests.py index 19714e8443..82caba8662 100644 --- a/tests/filtered_relation/tests.py +++ b/tests/filtered_relation/tests.py @@ -828,6 +828,16 @@ class FilteredRelationTests(TestCase): ).filter(rel__isnull=True) self.assertSequenceEqual(qs, []) + def test_conditional_expression_does_not_support_queryset(self): + msg = "Passing a QuerySet within a FilteredRelation is not supported." + with self.assertRaisesMessage(ValueError, msg): + Author.objects.annotate( + poem_book=FilteredRelation( + "book", + condition=Q(book__in=Book.objects.filter(title__istartswith="a")), + ), + ).filter(poem_book__isnull=False) + class FilteredRelationAggregationTests(TestCase): @classmethod From ae8baaee9d717cb48d59514b7130e35ae921d265 Mon Sep 17 00:00:00 2001 From: evananyonga Date: Sat, 20 Jan 2024 11:37:13 +0300 Subject: [PATCH 13/37] Corrected BaseCommand.check() signature in docs. --- docs/howto/custom-management-commands.txt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/howto/custom-management-commands.txt b/docs/howto/custom-management-commands.txt index b472f092e9..d3775905d3 100644 --- a/docs/howto/custom-management-commands.txt +++ b/docs/howto/custom-management-commands.txt @@ -304,7 +304,7 @@ the :meth:`~BaseCommand.handle` method must be implemented. It may return a string which will be printed to ``stdout`` (wrapped by ``BEGIN;`` and ``COMMIT;`` if :attr:`output_transaction` is ``True``). -.. method:: BaseCommand.check(app_configs=None, tags=None, display_num_errors=False) +.. method:: BaseCommand.check(app_configs=None, tags=None,display_num_errors=False, include_deployment_checks=False, fail_level=checks.ERROR, databases=None) Uses the system check framework to inspect the entire Django project for potential problems. Serious problems are raised as a :exc:`CommandError`; @@ -312,8 +312,12 @@ the :meth:`~BaseCommand.handle` method must be implemented. ``stdout``. If ``app_configs`` and ``tags`` are both ``None``, all system checks are - performed. ``tags`` can be a list of check tags, like ``compatibility`` or - ``models``. + performed except deployment and database related checks. ``tags`` can be a + list of check tags, like ``compatibility`` or ``models``. + + You can pass ``include_deployment_checks=True`` to also perform deployment + checks, and list of database aliases in the ``databases`` to run database + related checks against them. .. _ref-basecommand-subclasses: From a0204ac183ad6bca71707676d994d5888cf966aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?An=C5=BEe=20Pe=C4=8Dar?= Date: Tue, 23 Jan 2024 11:51:24 +0100 Subject: [PATCH 14/37] Fixed #29280 -- Made the transactions behavior configurable on SQLite. --- AUTHORS | 1 + django/db/backends/sqlite3/base.py | 21 ++++++++++- docs/ref/databases.txt | 32 +++++++++++++++++ docs/releases/5.1.txt | 3 ++ tests/backends/sqlite/tests.py | 58 ++++++++++++++++++++++++++++-- 5 files changed, 112 insertions(+), 3 deletions(-) diff --git a/AUTHORS b/AUTHORS index 82aab46439..615aa7b7f7 100644 --- a/AUTHORS +++ b/AUTHORS @@ -103,6 +103,7 @@ answer newbie questions, and generally made Django that much better: Antti Kaihola Anubhav Joshi Anvesh Mishra + Anže Pečar Aram Dulyan arien Armin Ronacher diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 10a296c992..8e17ea3d44 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -135,6 +135,8 @@ class DatabaseWrapper(BaseDatabaseWrapper): "iendswith": r"LIKE '%%' || UPPER({}) ESCAPE '\'", } + transaction_modes = frozenset(["DEFERRED", "EXCLUSIVE", "IMMEDIATE"]) + Database = Database SchemaEditorClass = DatabaseSchemaEditor # Classes instantiated in __init__(). @@ -171,6 +173,20 @@ class DatabaseWrapper(BaseDatabaseWrapper): RuntimeWarning, ) kwargs.update({"check_same_thread": False, "uri": True}) + transaction_mode = kwargs.pop("transaction_mode", None) + if ( + transaction_mode is not None + and transaction_mode.upper() not in self.transaction_modes + ): + allowed_transaction_modes = ", ".join( + [f"{mode!r}" for mode in sorted(self.transaction_modes)] + ) + raise ImproperlyConfigured( + f"settings.DATABASES[{self.alias!r}]['OPTIONS']['transaction_mode'] " + f"is improperly configured to '{transaction_mode}'. Use one of " + f"{allowed_transaction_modes}, or None." + ) + self.transaction_mode = transaction_mode.upper() if transaction_mode else None return kwargs def get_database_version(self): @@ -298,7 +314,10 @@ class DatabaseWrapper(BaseDatabaseWrapper): Staying in autocommit mode works around a bug of sqlite3 that breaks savepoints when autocommit is disabled. """ - self.cursor().execute("BEGIN") + if self.transaction_mode is None: + self.cursor().execute("BEGIN") + else: + self.cursor().execute(f"BEGIN {self.transaction_mode}") def is_in_memory_db(self): return self.creation.is_in_memory_db(self.settings_dict["NAME"]) diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt index d98d523db5..d853647730 100644 --- a/docs/ref/databases.txt +++ b/docs/ref/databases.txt @@ -870,6 +870,38 @@ If you're getting this error, you can solve it by: This will make SQLite wait a bit longer before throwing "database is locked" errors; it won't really do anything to solve them. +.. _sqlite-transaction-behavior: + +Transactions behavior +~~~~~~~~~~~~~~~~~~~~~ + +.. versionadded:: 5.1 + +SQLite supports three transaction modes: ``DEFERRED``, ``IMMEDIATE``, and +``EXCLUSIVE``. + +The default is ``DEFERRED``. If you need to use a different mode, set it in the +:setting:`OPTIONS` part of your database configuration in +:setting:`DATABASES`, for example:: + + "OPTIONS": { + # ... + "transaction_mode": "IMMEDIATE", + # ... + } + +To make sure your transactions wait until ``timeout`` before raising "Database +is Locked", change the transaction mode to ``IMMEDIATE``. + +For the best performance with ``IMMEDIATE`` and ``EXCLUSIVE``, transactions +should be as short as possible. This might be hard to guarantee for all of your +views so the usage of :setting:`ATOMIC_REQUESTS ` is +discouraged in this case. + +For more information see `Transactions in SQLite`_. + +.. _`Transactions in SQLite`: https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions + ``QuerySet.select_for_update()`` not supported ---------------------------------------------- diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt index 5d57edde46..284c1f4f74 100644 --- a/docs/releases/5.1.txt +++ b/docs/releases/5.1.txt @@ -235,6 +235,9 @@ Models reload a model's value. This can be used to lock the row before reloading or to select related objects. +* The new ``"transaction_mode"`` option is now supported in :setting:`OPTIONS` + on SQLite to allow specifying the :ref:`sqlite-transaction-behavior`. + Requests and Responses ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/tests/backends/sqlite/tests.py b/tests/backends/sqlite/tests.py index 330ed50488..42fee432f9 100644 --- a/tests/backends/sqlite/tests.py +++ b/tests/backends/sqlite/tests.py @@ -3,9 +3,11 @@ import re import tempfile import threading import unittest +from contextlib import contextmanager from pathlib import Path from unittest import mock +from django.core.exceptions import ImproperlyConfigured from django.db import ( DEFAULT_DB_ALIAS, NotSupportedError, @@ -15,8 +17,8 @@ from django.db import ( ) from django.db.models import Aggregate, Avg, StdDev, Sum, Variance from django.db.utils import ConnectionHandler -from django.test import TestCase, TransactionTestCase, override_settings -from django.test.utils import isolate_apps +from django.test import SimpleTestCase, TestCase, TransactionTestCase, override_settings +from django.test.utils import CaptureQueriesContext, isolate_apps from ..models import Item, Object, Square @@ -245,3 +247,55 @@ class ThreadSharing(TransactionTestCase): for conn in thread_connections: if conn is not main_connection: conn.close() + + +@unittest.skipUnless(connection.vendor == "sqlite", "SQLite tests") +class TestTransactionMode(SimpleTestCase): + databases = {"default"} + + def test_default_transaction_mode(self): + with CaptureQueriesContext(connection) as captured_queries: + with transaction.atomic(): + pass + + begin_query, commit_query = captured_queries + self.assertEqual(begin_query["sql"], "BEGIN") + self.assertEqual(commit_query["sql"], "COMMIT") + + def test_invalid_transaction_mode(self): + msg = ( + "settings.DATABASES['default']['OPTIONS']['transaction_mode'] is " + "improperly configured to 'invalid'. Use one of 'DEFERRED', 'EXCLUSIVE', " + "'IMMEDIATE', or None." + ) + with self.change_transaction_mode("invalid") as new_connection: + with self.assertRaisesMessage(ImproperlyConfigured, msg): + new_connection.ensure_connection() + + def test_valid_transaction_modes(self): + valid_transaction_modes = ("deferred", "immediate", "exclusive") + for transaction_mode in valid_transaction_modes: + with ( + self.subTest(transaction_mode=transaction_mode), + self.change_transaction_mode(transaction_mode) as new_connection, + CaptureQueriesContext(new_connection) as captured_queries, + ): + new_connection.set_autocommit( + False, force_begin_transaction_with_broken_autocommit=True + ) + new_connection.commit() + expected_transaction_mode = transaction_mode.upper() + begin_sql = captured_queries[0]["sql"] + self.assertEqual(begin_sql, f"BEGIN {expected_transaction_mode}") + + @contextmanager + def change_transaction_mode(self, transaction_mode): + new_connection = connection.copy() + new_connection.settings_dict["OPTIONS"] = { + **new_connection.settings_dict["OPTIONS"], + "transaction_mode": transaction_mode, + } + try: + yield new_connection + finally: + new_connection.close() From c317e81378a15379cba4abc289d9519ee0335a80 Mon Sep 17 00:00:00 2001 From: Baptiste Mispelon Date: Tue, 30 Jan 2024 16:13:04 +0100 Subject: [PATCH 15/37] Made cosmetic edits to rocket SVG in the "Congrats" page. This removes unnecessary from rocket SVG, and avoids repeating the SVG rocket's color for the porthole. --- django/views/templates/default_urlconf.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/django/views/templates/default_urlconf.html b/django/views/templates/default_urlconf.html index 6bb170cc67..f9e278006d 100644 --- a/django/views/templates/default_urlconf.html +++ b/django/views/templates/default_urlconf.html @@ -210,8 +210,7 @@ - - + From b9e2a3fc63e68d248d528c73736275ca2746872d Mon Sep 17 00:00:00 2001 From: Marijke Luttekes Date: Sun, 28 Jan 2024 13:51:34 +0100 Subject: [PATCH 16/37] Fixed #35143 -- Improved accessibility of 404/500 debug pages. This: - changes the header, main, and footer content areas to be rendered in a
,
, and
tags, - adds scope attributes to , - uses for a patterns list, - uses instead of . --- AUTHORS | 1 + django/views/templates/technical_404.html | 27 +++++---- django/views/templates/technical_500.html | 72 ++++++++++++---------- docs/releases/5.1.txt | 3 +- tests/view_tests/tests/test_debug.py | 73 +++++++++++++---------- 5 files changed, 100 insertions(+), 76 deletions(-) diff --git a/AUTHORS b/AUTHORS index 615aa7b7f7..8c903ff6c5 100644 --- a/AUTHORS +++ b/AUTHORS @@ -638,6 +638,7 @@ answer newbie questions, and generally made Django that much better: Marc Tamlyn Marc-Aurèle Brothier Marian Andre + Marijke Luttekes Marijn Vriens Mario Gonzalez Mariusz Felisiak diff --git a/django/views/templates/technical_404.html b/django/views/templates/technical_404.html index c47dae22af..f2bfe49372 100644 --- a/django/views/templates/technical_404.html +++ b/django/views/templates/technical_404.html @@ -9,9 +9,9 @@ body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background:#eee; color:#000; } - body>div { border-bottom:1px solid #ddd; } + body > :where(header, main, footer) { border-bottom:1px solid #ddd; } h1 { font-weight:normal; margin-bottom:.4em; } - h1 span { font-size:60%; color:#666; font-weight:normal; } + h1 small { font-size:60%; color:#666; font-weight:normal; } table { border:none; border-collapse: collapse; width:100%; } td, th { vertical-align:top; padding:2px 3px; } th { width:12em; text-align:right; color:#666; padding-right:.5em; } @@ -24,27 +24,28 @@ -
-

Page not found (404)

+
+

Page not found (404)

{% if reason and resolved %}
{{ reason }}
{% endif %} - + - + {% if raising_view_name %} - + {% endif %}
Request Method:Request Method: {{ request.META.REQUEST_METHOD }}
Request URL:Request URL: {{ request.build_absolute_uri }}
Raised by:Raised by: {{ raising_view_name }}
-
-
+
+ +
{% if urlpatterns %}

Using the URLconf defined in {{ urlconf }}, @@ -54,8 +55,10 @@ {% for pattern in urlpatterns %}

  • {% for pat in pattern %} + {{ pat.pattern }} {% if forloop.last and pat.name %}[name='{{ pat.name }}']{% endif %} + {% endfor %}
  • {% endfor %} @@ -69,14 +72,14 @@ {% if resolved %}matched the last one.{% else %}didn’t match any of these.{% endif %}

    {% endif %} - +
    -
    +

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

    -
    + diff --git a/django/views/templates/technical_500.html b/django/views/templates/technical_500.html index a5c187147b..305c4655ad 100644 --- a/django/views/templates/technical_500.html +++ b/django/views/templates/technical_500.html @@ -10,7 +10,7 @@ body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background-color:#fff; color:#000; } - body>div { border-bottom:1px solid #ddd; } + body > :where(header, main, footer) { border-bottom:1px solid #ddd; } h1 { font-weight:normal; } h2 { margin-bottom:.8em; } h3 { margin:1em 0 .5em 0; } @@ -47,6 +47,8 @@ .user div.commands a { color: black; } #summary { background: #ffc; } #summary h2 { font-weight: normal; color: #666; } + #info { padding: 0; } + #info > * { padding:10px 20px; } #explanation { background:#eee; } #template, #template-not-exist { background:#f6f6f6; } #template-not-exist ul { margin: 0 0 10px 20px; } @@ -97,67 +99,69 @@ {% endif %} -
    +

    {% if exception_type %}{{ exception_type }}{% else %}Report{% endif %} {% if request %} at {{ request.path_info }}{% endif %}

    {% if exception_value %}{{ exception_value|force_escape }}{% if exception_notes %}{{ exception_notes }}{% endif %}{% else %}No exception message supplied{% endif %}
    {% if request %} - + - + {% endif %} - + {% if exception_type %} - + {% endif %} {% if exception_type and exception_value %} - + {% endif %} {% if lastframe %} - + {% endif %} {% if raising_view_name %} - + {% endif %} - + - + - - + + - +
    Request Method:Request Method: {{ request.META.REQUEST_METHOD }}
    Request URL:Request URL: {{ request_insecure_uri }}
    Django Version:Django Version: {{ django_version_info }}
    Exception Type:Exception Type: {{ exception_type }}
    Exception Value:Exception Value:
    {{ exception_value|force_escape }}
    Exception Location:Exception Location: {{ lastframe.filename }}, line {{ lastframe.lineno }}, in {{ lastframe.function }}
    Raised during:Raised during: {{ raising_view_name }}
    Python Executable:Python Executable: {{ sys_executable }}
    Python Version:Python Version: {{ sys_version_info }}
    Python Path:
    {{ sys_path|pprint }}
    Python Path:
    {{ sys_path|pprint }}
    Server time:Server time: {{server_time|date:"r"}}
    -
    + + +
    {% if unicode_hint %}

    Unicode error hint

    @@ -195,11 +199,11 @@ {% if template_info.bottom != template_info.total %} cut-bottom{% endif %}"> {% for source_line in template_info.source_lines %} {% if source_line.0 == template_info.line %} - {{ source_line.0 }} + {{ source_line.0 }} {{ template_info.before }}{{ template_info.during }}{{ template_info.after }} {% else %} - {{ source_line.0 }} + {{ source_line.0 }} {{ source_line.1 }} {% endif %} {% endfor %} @@ -266,8 +270,8 @@ - - + + @@ -354,8 +358,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -376,8 +380,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -398,8 +402,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -420,8 +424,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -441,8 +445,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -463,8 +467,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -478,14 +482,16 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    SettingValueSettingValue
    +
    + {% if not is_email %} -
    +

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.

    -
    + {% endif %} diff --git a/docs/releases/5.1.txt b/docs/releases/5.1.txt index 284c1f4f74..f166474607 100644 --- a/docs/releases/5.1.txt +++ b/docs/releases/5.1.txt @@ -156,7 +156,8 @@ Email Error Reporting ~~~~~~~~~~~~~~~ -* ... +* In order to improve accessibility, the technical 404 and 500 error pages now + use HTML landmark elements for the header, footer, and main content areas. File Storage ~~~~~~~~~~~~ diff --git a/tests/view_tests/tests/test_debug.py b/tests/view_tests/tests/test_debug.py index 03db07a61c..45a0dc70ee 100644 --- a/tests/view_tests/tests/test_debug.py +++ b/tests/view_tests/tests/test_debug.py @@ -176,6 +176,12 @@ class DebugViewTests(SimpleTestCase): self.assertContains( response, "Django tried these URL patterns", status_code=404 ) + self.assertContains( + response, + "technical404/ [name='my404']", + status_code=404, + html=True, + ) self.assertContains( response, "

    The current path, not-in-urls, didn’t match any " @@ -204,6 +210,9 @@ class DebugViewTests(SimpleTestCase): def test_technical_404(self): response = self.client.get("/technical404/") + self.assertContains(response, '

    ', status_code=404) + self.assertContains(response, '
    ', status_code=404) + self.assertContains(response, '