summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAd Timmering <awtimmering@gmail.com>2021-11-22 22:08:24 +0900
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-11-25 20:36:04 +0100
commit9a6e2df3a8f01ea761529bec48e5a8dc0ea9575b (patch)
tree627ae39fe9ba59f0ad6df6e82c59b2bc173fc870 /django
parente361621dbc77b5d926ec4deff5e7c792a61db71e (diff)
Fixed #32397 -- Made startapp/startproject management commands set User-Agent.
This sets User-Agent to 'Django/<version>'.
Diffstat (limited to 'django')
-rw-r--r--django/core/management/templates.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/django/core/management/templates.py b/django/core/management/templates.py
index 6449342ae1..cfcaff7c0f 100644
--- a/django/core/management/templates.py
+++ b/django/core/management/templates.py
@@ -7,7 +7,7 @@ import shutil
import stat
import tempfile
from importlib import import_module
-from urllib.request import urlretrieve
+from urllib.request import build_opener
import django
from django.conf import settings
@@ -277,8 +277,14 @@ class TemplateCommand(BaseCommand):
if self.verbosity >= 2:
self.stdout.write('Downloading %s' % display_url)
+
+ the_path = os.path.join(tempdir, filename)
+ opener = build_opener()
+ opener.addheaders = [('User-Agent', f'Django/{django.__version__}')]
try:
- the_path, info = urlretrieve(url, os.path.join(tempdir, filename))
+ with opener.open(url) as source, open(the_path, 'wb') as target:
+ headers = source.info()
+ target.write(source.read())
except OSError as e:
raise CommandError("couldn't download URL %s to %s: %s" %
(url, filename, e))
@@ -286,7 +292,7 @@ class TemplateCommand(BaseCommand):
used_name = the_path.split('/')[-1]
# Trying to get better name from response headers
- content_disposition = info.get('content-disposition')
+ content_disposition = headers['content-disposition']
if content_disposition:
_, params = cgi.parse_header(content_disposition)
guessed_filename = params.get('filename') or used_name
@@ -295,7 +301,7 @@ class TemplateCommand(BaseCommand):
# Falling back to content type guessing
ext = self.splitext(guessed_filename)[1]
- content_type = info.get('content-type')
+ content_type = headers['content-type']
if not ext and content_type:
ext = mimetypes.guess_extension(content_type)
if ext: