Commit 9b86db9b authored by Luke Plant's avatar Luke Plant
Browse files

Eliminated lots of mutable default arguments (since they are bugs

waiting to happen and are memory leaks too).


git-svn-id: http://code.djangoproject.com/svn/django/trunk@3070 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 88d215f7
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -81,12 +81,16 @@ ROLES = {
}

def create_reference_role(rolename, urlbase):
    def _role(name, rawtext, text, lineno, inliner, options={}, content=[]):
    def _role(name, rawtext, text, lineno, inliner, options=None, content=None):
        if options is None: options = {}
        if content is None: content = []
        node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text.lower())), **options)
        return [node], []
    docutils.parsers.rst.roles.register_canonical_role(rolename, _role)

def default_reference_role(name, rawtext, text, lineno, inliner, options={}, content=[]):
def default_reference_role(name, rawtext, text, lineno, inliner, options=None, content=None):
    if options is None: options = {}
    if content is None: content = []
    context = inliner.document.settings.default_reference_context
    node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text.lower())), **options)
    return [node], []
+3 −1
Original line number Diff line number Diff line
@@ -579,7 +579,9 @@ class ChangeList(object):
                    filter_specs.append(spec)
        return filter_specs, bool(filter_specs)

    def get_query_string(self, new_params={}, remove=[]):
    def get_query_string(self, new_params=None, remove=None):
        if new_params is None: new_params = {}
        if remove is None: remove = []
        p = self.params.copy()
        for r in remove:
            for k in p.keys():
+2 −1
Original line number Diff line number Diff line
@@ -399,7 +399,8 @@ class AnyValidator:
    as a validation error. The message is rather unspecific, so it's best to
    specify one on instantiation.
    """
    def __init__(self, validator_list=[], error_message=gettext_lazy("This field is invalid.")):
    def __init__(self, validator_list=None, error_message=gettext_lazy("This field is invalid.")):
        if validator_list is None: validator_list = []
        self.validator_list = validator_list
        self.error_message = error_message
        for v in validator_list:
+4 −2
Original line number Diff line number Diff line
@@ -65,11 +65,13 @@ class FormatStylePlaceholderCursor(Database.Cursor):
    This fixes it -- but note that if you want to use a literal "%s" in a query,
    you'll need to use "%%s".
    """
    def execute(self, query, params=[]):
    def execute(self, query, params=None):
        if params is None: params = []
        query = self.convert_arguments(query, len(params))
        return Database.Cursor.execute(self, query, params)

    def executemany(self, query, params=[]):
    def executemany(self, query, params=None):
        if params is None: params = []
        query = self.convert_arguments(query, len(params[0]))
        return Database.Cursor.executemany(self, query, params)

+48 −23
Original line number Diff line number Diff line
@@ -367,7 +367,8 @@ class FormField:

class TextField(FormField):
    input_type = "text"
    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=[], member_name=None):
    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None, member_name=None):
        if validator_list is None: validator_list = []
        self.field_name = field_name
        self.length, self.maxlength = length, maxlength
        self.is_required = is_required
@@ -404,7 +405,8 @@ class PasswordField(TextField):
    input_type = "password"

class LargeTextField(TextField):
    def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=[], maxlength=None):
    def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=None, maxlength=None):
        if validator_list is None: validator_list = []
        self.field_name = field_name
        self.rows, self.cols, self.is_required = rows, cols, is_required
        self.validator_list = validator_list[:]
@@ -422,7 +424,8 @@ class LargeTextField(TextField):
            self.field_name, self.rows, self.cols, escape(data))

class HiddenField(FormField):
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        self.field_name, self.is_required = field_name, is_required
        self.validator_list = validator_list[:]

@@ -452,7 +455,9 @@ class CheckboxField(FormField):
    html2python = staticmethod(html2python)

class SelectField(FormField):
    def __init__(self, field_name, choices=[], size=1, is_required=False, validator_list=[], member_name=None):
    def __init__(self, field_name, choices=None, size=1, is_required=False, validator_list=None, member_name=None):
        if validator_list is None: validator_list = []
        if choices is None: choices = []
        self.field_name = field_name
        # choices is a list of (value, human-readable key) tuples because order matters
        self.choices, self.size, self.is_required = choices, size, is_required
@@ -488,7 +493,9 @@ class NullSelectField(SelectField):
    html2python = staticmethod(html2python)

class RadioSelectField(FormField):
    def __init__(self, field_name, choices=[], ul_class='', is_required=False, validator_list=[], member_name=None):
    def __init__(self, field_name, choices=None, ul_class='', is_required=False, validator_list=None, member_name=None):
        if validator_list is None: validator_list = []
        if choices is None: choices = []
        self.field_name = field_name
        # choices is a list of (value, human-readable key) tuples because order matters
        self.choices, self.is_required = choices, is_required
@@ -552,7 +559,8 @@ class RadioSelectField(FormField):

class NullBooleanField(SelectField):
    "This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None"
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        SelectField.__init__(self, field_name, choices=[('1', 'Unknown'), ('2', 'Yes'), ('3', 'No')],
            is_required=is_required, validator_list=validator_list)

@@ -605,7 +613,9 @@ class CheckboxSelectMultipleField(SelectMultipleField):
    back into the single list that validators, renderers and save() expect.
    """
    requires_data_list = True
    def __init__(self, field_name, choices=[], validator_list=[]):
    def __init__(self, field_name, choices=None, validator_list=None):
        if validator_list is None: validator_list = []
        if choices is None: choices = []
        SelectMultipleField.__init__(self, field_name, choices, size=1, is_required=False, validator_list=validator_list)

    def prepare(self, new_data):
@@ -636,7 +646,8 @@ class CheckboxSelectMultipleField(SelectMultipleField):
####################

class FileUploadField(FormField):
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        self.field_name, self.is_required = field_name, is_required
        self.validator_list = [self.isNonEmptyFile] + validator_list

@@ -675,7 +686,8 @@ class ImageUploadField(FileUploadField):
####################

class IntegerField(TextField):
    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[], member_name=None):
    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None, member_name=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isInteger] + validator_list
        if member_name is not None:
            self.member_name = member_name
@@ -694,7 +706,8 @@ class IntegerField(TextField):
    html2python = staticmethod(html2python)

class SmallIntegerField(IntegerField):
    def __init__(self, field_name, length=5, maxlength=5, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=5, maxlength=5, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isSmallInteger] + validator_list
        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)

@@ -703,7 +716,8 @@ class SmallIntegerField(IntegerField):
            raise validators.CriticalValidationError, gettext("Enter a whole number between -32,768 and 32,767.")

class PositiveIntegerField(IntegerField):
    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isPositive] + validator_list
        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)

@@ -712,7 +726,8 @@ class PositiveIntegerField(IntegerField):
            raise validators.CriticalValidationError, gettext("Enter a positive number.")

class PositiveSmallIntegerField(IntegerField):
    def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isPositiveSmall] + validator_list
        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list)

@@ -721,7 +736,8 @@ class PositiveSmallIntegerField(IntegerField):
            raise validators.CriticalValidationError, gettext("Enter a whole number between 0 and 32,767.")

class FloatField(TextField):
    def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=[]):
    def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        self.max_digits, self.decimal_places = max_digits, decimal_places
        validator_list = [self.isValidFloat] + validator_list
        TextField.__init__(self, field_name, max_digits+1, max_digits+1, is_required, validator_list)
@@ -746,7 +762,8 @@ class FloatField(TextField):
class DatetimeField(TextField):
    """A FormField that automatically converts its data to a datetime.datetime object.
    The data should be in the format YYYY-MM-DD HH:MM:SS."""
    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        self.field_name = field_name
        self.length, self.maxlength = length, maxlength
        self.is_required = is_required
@@ -769,7 +786,8 @@ class DatetimeField(TextField):
class DateField(TextField):
    """A FormField that automatically converts its data to a datetime.date object.
    The data should be in the format YYYY-MM-DD."""
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidDate] + validator_list
        TextField.__init__(self, field_name, length=10, maxlength=10,
            is_required=is_required, validator_list=validator_list)
@@ -793,7 +811,8 @@ class DateField(TextField):
class TimeField(TextField):
    """A FormField that automatically converts its data to a datetime.time object.
    The data should be in the format HH:MM:SS or HH:MM:SS.mmmmmm."""
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidTime] + validator_list
        TextField.__init__(self, field_name, length=8, maxlength=8,
            is_required=is_required, validator_list=validator_list)
@@ -827,7 +846,8 @@ class TimeField(TextField):

class EmailField(TextField):
    "A convenience FormField for validating e-mail addresses"
    def __init__(self, field_name, length=50, maxlength=75, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=50, maxlength=75, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidEmail] + validator_list
        TextField.__init__(self, field_name, length, maxlength=maxlength,
            is_required=is_required, validator_list=validator_list)
@@ -840,7 +860,8 @@ class EmailField(TextField):

class URLField(TextField):
    "A convenience FormField for validating URLs"
    def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidURL] + validator_list
        TextField.__init__(self, field_name, length=length, maxlength=maxlength,
            is_required=is_required, validator_list=validator_list)
@@ -852,7 +873,8 @@ class URLField(TextField):
            raise validators.CriticalValidationError, e.messages

class IPAddressField(TextField):
    def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=[]):
    def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidIPAddress] + validator_list
        TextField.__init__(self, field_name, length=length, maxlength=maxlength,
            is_required=is_required, validator_list=validator_list)
@@ -873,7 +895,7 @@ class IPAddressField(TextField):

class FilePathField(SelectField):
    "A SelectField whose choices are the files in a given directory."
    def __init__(self, field_name, path, match=None, recursive=False, is_required=False, validator_list=[]):
    def __init__(self, field_name, path, match=None, recursive=False, is_required=False, validator_list=None):
        import os
        if match is not None:
            import re
@@ -896,7 +918,8 @@ class FilePathField(SelectField):

class PhoneNumberField(TextField):
    "A convenience FormField for validating phone numbers (e.g. '630-555-1234')"
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidPhone] + validator_list
        TextField.__init__(self, field_name, length=12, maxlength=12,
            is_required=is_required, validator_list=validator_list)
@@ -909,7 +932,8 @@ class PhoneNumberField(TextField):

class USStateField(TextField):
    "A convenience FormField for validating U.S. states (e.g. 'IL')"
    def __init__(self, field_name, is_required=False, validator_list=[]):
    def __init__(self, field_name, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isValidUSState] + validator_list
        TextField.__init__(self, field_name, length=2, maxlength=2,
            is_required=is_required, validator_list=validator_list)
@@ -929,7 +953,8 @@ class USStateField(TextField):

class CommaSeparatedIntegerField(TextField):
    "A convenience FormField for validating comma-separated integer fields"
    def __init__(self, field_name, maxlength=None, is_required=False, validator_list=[]):
    def __init__(self, field_name, maxlength=None, is_required=False, validator_list=None):
        if validator_list is None: validator_list = []
        validator_list = [self.isCommaSeparatedIntegerList] + validator_list
        TextField.__init__(self, field_name, length=20, maxlength=maxlength,
            is_required=is_required, validator_list=validator_list)
Loading