0
0
mirror of https://github.com/django/django.git synced 2024-11-21 19:09:18 +01:00

Merge branch 'main' into ticket_27587

This commit is contained in:
Josiah White 2022-10-23 19:03:27 -07:00
commit 3315497633
10 changed files with 42 additions and 11 deletions

View File

@ -84,7 +84,6 @@ class TemplateCommand(BaseCommand):
)
def handle(self, app_or_project, name, target=None, **options):
self.written_files = []
self.app_or_project = app_or_project
self.a_or_an = "an" if app_or_project == "app" else "a"
self.paths_to_remove = []
@ -209,7 +208,6 @@ class TemplateCommand(BaseCommand):
else:
shutil.copyfile(old_path, new_path)
self.written_files.append(new_path)
if self.verbosity >= 2:
self.stdout.write("Creating %s" % new_path)
try:
@ -232,7 +230,7 @@ class TemplateCommand(BaseCommand):
else:
shutil.rmtree(path_to_remove)
run_formatters(self.written_files, **formatter_paths)
run_formatters([top_dir], **formatter_paths)
def handle_template(self, template, subdir):
"""

View File

@ -255,7 +255,7 @@ patches. Those patches will typically exist as pull requests on GitHub and
can be easily integrated into your local repository::
git checkout -b pull_xxxxx upstream/main
curl https://github.com/django/django/pull/xxxxx.patch | git am
curl -L https://github.com/django/django/pull/xxxxx.patch | git am
This will create a new branch and then apply the changes from the pull request
to it. At this point you can run the tests or do anything else you need to

View File

@ -407,7 +407,7 @@ Once you're in the shell, explore the :doc:`database API </topics/db/queries>`::
>>> q.question_text
"What's new?"
>>> q.pub_date
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=datetime.timezone.utc)
# Change values by changing the attributes, then calling save().
>>> q.question_text = "What's up?"

View File

@ -721,8 +721,8 @@ Usage example::
{'date': datetime.date(2014, 6, 15),
'day': datetime.datetime(2014, 6, 16, 0, 0, tzinfo=zoneinfo.ZoneInfo('Australia/Melbourne')),
'hour': datetime.datetime(2014, 6, 16, 0, 0, tzinfo=zoneinfo.ZoneInfo('Australia/Melbourne')),
'minute': 'minute': datetime.datetime(2014, 6, 15, 14, 30, tzinfo=zoneinfo.ZoneInfo('UTC')),
'second': datetime.datetime(2014, 6, 15, 14, 30, 50, tzinfo=zoneinfo.ZoneInfo('UTC'))
'minute': 'minute': datetime.datetime(2014, 6, 15, 14, 30, tzinfo=timezone.utc),
'second': datetime.datetime(2014, 6, 15, 14, 30, 50, tzinfo=timezone.utc)
}
``TimeField`` truncation

View File

@ -1659,8 +1659,8 @@ one, doing so will result in an error.
have measured that the difference between returning the fields you need and
the full set of fields for the model will be significant.
Even if you think you are in the advanced use-case situation, **only use
``defer()`` when you cannot, at queryset load time, determine if you will
Even if you think you are in the advanced use-case situation, **only use**
``defer()`` **when you cannot, at queryset load time, determine if you will
need the extra fields or not**. If you are frequently loading and using a
particular subset of your data, the best choice you can make is to
normalize your models and put the non-loaded data into a separate model

View File

@ -80,7 +80,7 @@ Argument Value
arguments passed to ``__init__()``)
``kwargs`` ``{'question_text': "What's new?",``
``'pub_date': datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)}``
``'pub_date': datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=datetime.timezone.utc)}``
========== ===============================================================
``post_init``

View File

@ -9,4 +9,6 @@ Django 4.1.3 fixes several bugs in 4.1.2.
Bugfixes
========
* ...
* Fixed a bug in Django 4.1 that caused non-Python files created by
``startproject`` and ``startapp`` management commands from custom templates
to be incorrectly formatted using the ``black`` command (:ticket:`34085`).

View File

@ -0,0 +1,5 @@
# Should not be processed by `black`.
Django<4.2
environs[django]
psycopg2-binary
django-extensions

View File

@ -2483,6 +2483,23 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
self.assertTrue(os.path.isdir(testproject_dir))
self.assertTrue(os.path.exists(os.path.join(testproject_dir, "additional_dir")))
def test_custom_project_template_non_python_files_not_formatted(self):
template_path = os.path.join(custom_templates_dir, "project_template")
args = ["startproject", "--template", template_path, "customtestproject"]
testproject_dir = os.path.join(self.test_dir, "customtestproject")
_, err = self.run_django_admin(args)
self.assertNoOutput(err)
with open(
os.path.join(template_path, "additional_dir", "requirements.in")
) as f:
expected = f.read()
with open(
os.path.join(testproject_dir, "additional_dir", "requirements.in")
) as f:
result = f.read()
self.assertEqual(expected, result)
def test_template_dir_with_trailing_slash(self):
"Ticket 17475: Template dir passed has a trailing path separator"
template_path = os.path.join(custom_templates_dir, "project_template" + os.sep)

View File

@ -41,6 +41,14 @@ try:
except ImportError:
argon2 = None
# scrypt requires OpenSSL 1.1+
try:
import hashlib
scrypt = hashlib.scrypt
except ImportError:
scrypt = None
class PBKDF2SingleIterationHasher(PBKDF2PasswordHasher):
iterations = 1
@ -797,6 +805,7 @@ class TestUtilsHashPassArgon2(SimpleTestCase):
setattr(hasher, attr, old_value)
@skipUnless(scrypt, "scrypt not available")
@override_settings(PASSWORD_HASHERS=PASSWORD_HASHERS)
class TestUtilsHashPassScrypt(SimpleTestCase):
def test_scrypt(self):