summaryrefslogtreecommitdiff
path: root/django/db
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2015-06-10 17:24:04 -0400
committerTim Graham <timograham@gmail.com>2015-10-25 06:02:21 -0400
commite2ea30c4403fca1b0a2032aae7a783f8705fc08b (patch)
tree3f4f39f8422db192425cdde82d1af1344df5fc22 /django/db
parent84ec3bfc1111525ee0b21afff870840b2eb13771 (diff)
[1.8.x] Fixed #24979 -- Removed usage of inspect.getargspec().
Backport of 3872a33132a4bb6aa22b237927597bbfdf6f21d7 from master
Diffstat (limited to 'django/db')
-rw-r--r--django/db/migrations/writer.py13
-rw-r--r--django/db/models/fields/files.py5
-rw-r--r--django/db/utils.py12
3 files changed, 18 insertions, 12 deletions
diff --git a/django/db/migrations/writer.py b/django/db/migrations/writer.py
index 1bed59b3ef..779c842af3 100644
--- a/django/db/migrations/writer.py
+++ b/django/db/migrations/writer.py
@@ -3,7 +3,6 @@ from __future__ import unicode_literals
import collections
import datetime
import decimal
-import inspect
import math
import os
import re
@@ -19,6 +18,7 @@ from django.utils import datetime_safe, six
from django.utils._os import upath
from django.utils.encoding import force_text
from django.utils.functional import Promise
+from django.utils.inspect import get_func_args
from django.utils.timezone import utc
from django.utils.version import get_docs_version
@@ -97,7 +97,7 @@ class OperationWriter(object):
imports = set()
name, args, kwargs = self.operation.deconstruct()
- argspec = inspect.getargspec(self.operation.__init__)
+ operation_args = get_func_args(self.operation.__init__)
# See if this operation is in django.db.migrations. If it is,
# We can just use the fact we already have that imported,
@@ -110,16 +110,15 @@ class OperationWriter(object):
self.indent()
- # Start at one because argspec includes "self"
- for i, arg in enumerate(args, 1):
+ for i, arg in enumerate(args):
arg_value = arg
- arg_name = argspec.args[i]
+ arg_name = operation_args[i]
_write(arg_name, arg_value)
i = len(args)
# Only iterate over remaining arguments
- for arg_name in argspec.args[i + 1:]:
- if arg_name in kwargs:
+ for arg_name in operation_args[i:]:
+ if arg_name in kwargs: # Don't sort to maintain signature order
arg_value = kwargs[arg_name]
_write(arg_name, arg_value)
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index 73c67bef81..d6c1eaf49f 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -1,7 +1,6 @@
import datetime
import os
import warnings
-from inspect import getargspec
from django import forms
from django.core import checks
@@ -13,6 +12,7 @@ from django.db.models.fields import Field
from django.utils import six
from django.utils.deprecation import RemovedInDjango110Warning
from django.utils.encoding import force_str, force_text
+from django.utils.inspect import func_supports_parameter
from django.utils.translation import ugettext_lazy as _
@@ -89,8 +89,7 @@ class FieldFile(File):
def save(self, name, content, save=True):
name = self.field.generate_filename(self.instance, name)
- args, varargs, varkw, defaults = getargspec(self.storage.save)
- if 'max_length' in args:
+ if func_supports_parameter(self.storage.save, 'max_length'):
self.name = self.storage.save(name, content, max_length=self.field.max_length)
else:
warnings.warn(
diff --git a/django/db/utils.py b/django/db/utils.py
index 2261a69f71..47dd5fd937 100644
--- a/django/db/utils.py
+++ b/django/db/utils.py
@@ -333,8 +333,16 @@ class ConnectionRouter(object):
# If the router doesn't have a method, skip to the next one.
continue
- argspec = inspect.getargspec(method)
- if len(argspec.args) == 3 and not argspec.keywords:
+ if six.PY3:
+ sig = inspect.signature(router.allow_migrate)
+ has_deprecated_signature = not any(
+ p.kind == inspect.Parameter.VAR_KEYWORD for p in sig.parameters.values()
+ )
+ else:
+ argspec = inspect.getargspec(router.allow_migrate)
+ has_deprecated_signature = len(argspec.args) == 3 and not argspec.keywords
+
+ if has_deprecated_signature:
warnings.warn(
"The signature of allow_migrate has changed from "
"allow_migrate(self, db, model) to "