Django

Code

Changeset 3070

Show
Ignore:
Timestamp:
06/03/06 08:37:34 (2 years ago)
Author:
lukeplant
Message:

Eliminated lots of mutable default arguments (since they are bugs
waiting to happen and are memory leaks too).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/contrib/admin/utils.py

    r2809 r3070  
    8282 
    8383def create_reference_role(rolename, urlbase): 
    84     def _role(name, rawtext, text, lineno, inliner, options={}, content=[]): 
     84    def _role(name, rawtext, text, lineno, inliner, options=None, content=None): 
     85        if options is None: options = {} 
     86        if content is None: content = [] 
    8587        node = docutils.nodes.reference(rawtext, text, refuri=(urlbase % (inliner.document.settings.link_base, text.lower())), **options) 
    8688        return [node], [] 
    8789    docutils.parsers.rst.roles.register_canonical_role(rolename, _role) 
    8890 
    89 def default_reference_role(name, rawtext, text, lineno, inliner, options={}, content=[]): 
     91def default_reference_role(name, rawtext, text, lineno, inliner, options=None, content=None): 
     92    if options is None: options = {} 
     93    if content is None: content = [] 
    9094    context = inliner.document.settings.default_reference_context 
    9195    node = docutils.nodes.reference(rawtext, text, refuri=(ROLES[context] % (inliner.document.settings.link_base, text.lower())), **options) 
  • django/trunk/django/contrib/admin/views/main.py

    r3036 r3070  
    580580        return filter_specs, bool(filter_specs) 
    581581 
    582     def get_query_string(self, new_params={}, remove=[]): 
     582    def get_query_string(self, new_params=None, remove=None): 
     583        if new_params is None: new_params = {} 
     584        if remove is None: remove = [] 
    583585        p = self.params.copy() 
    584586        for r in remove: 
  • django/trunk/django/core/validators.py

    r3048 r3070  
    400400    specify one on instantiation. 
    401401    """ 
    402     def __init__(self, validator_list=[], error_message=gettext_lazy("This field is invalid.")): 
     402    def __init__(self, validator_list=None, error_message=gettext_lazy("This field is invalid.")): 
     403        if validator_list is None: validator_list = [] 
    403404        self.validator_list = validator_list 
    404405        self.error_message = error_message 
  • django/trunk/django/db/backends/oracle/base.py

    r2993 r3070  
    6666    you'll need to use "%%s". 
    6767    """ 
    68     def execute(self, query, params=[]): 
     68    def execute(self, query, params=None): 
     69        if params is None: params = [] 
    6970        query = self.convert_arguments(query, len(params)) 
    7071        return Database.Cursor.execute(self, query, params) 
    7172 
    72     def executemany(self, query, params=[]): 
     73    def executemany(self, query, params=None): 
     74        if params is None: params = [] 
    7375        query = self.convert_arguments(query, len(params[0])) 
    7476        return Database.Cursor.executemany(self, query, params) 
  • django/trunk/django/forms/__init__.py

    r3048 r3070  
    368368class TextField(FormField): 
    369369    input_type = "text" 
    370     def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=[], member_name=None): 
     370    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None, member_name=None): 
     371        if validator_list is None: validator_list = [] 
    371372        self.field_name = field_name 
    372373        self.length, self.maxlength = length, maxlength 
     
    405406 
    406407class LargeTextField(TextField): 
    407     def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=[], maxlength=None): 
     408    def __init__(self, field_name, rows=10, cols=40, is_required=False, validator_list=None, maxlength=None): 
     409        if validator_list is None: validator_list = [] 
    408410        self.field_name = field_name 
    409411        self.rows, self.cols, self.is_required = rows, cols, is_required 
     
    423425 
    424426class HiddenField(FormField): 
    425     def __init__(self, field_name, is_required=False, validator_list=[]): 
     427    def __init__(self, field_name, is_required=False, validator_list=None): 
     428        if validator_list is None: validator_list = [] 
    426429        self.field_name, self.is_required = field_name, is_required 
    427430        self.validator_list = validator_list[:] 
     
    453456 
    454457class SelectField(FormField): 
    455     def __init__(self, field_name, choices=[], size=1, is_required=False, validator_list=[], member_name=None): 
     458    def __init__(self, field_name, choices=None, size=1, is_required=False, validator_list=None, member_name=None): 
     459        if validator_list is None: validator_list = [] 
     460        if choices is None: choices = [] 
    456461        self.field_name = field_name 
    457462        # choices is a list of (value, human-readable key) tuples because order matters 
     
    489494 
    490495class RadioSelectField(FormField): 
    491     def __init__(self, field_name, choices=[], ul_class='', is_required=False, validator_list=[], member_name=None): 
     496    def __init__(self, field_name, choices=None, ul_class='', is_required=False, validator_list=None, member_name=None): 
     497        if validator_list is None: validator_list = [] 
     498        if choices is None: choices = [] 
    492499        self.field_name = field_name 
    493500        # choices is a list of (value, human-readable key) tuples because order matters 
     
    553560class NullBooleanField(SelectField): 
    554561    "This SelectField provides 'Yes', 'No' and 'Unknown', mapping results to True, False or None" 
    555     def __init__(self, field_name, is_required=False, validator_list=[]): 
     562    def __init__(self, field_name, is_required=False, validator_list=None): 
     563        if validator_list is None: validator_list = [] 
    556564        SelectField.__init__(self, field_name, choices=[('1', 'Unknown'), ('2', 'Yes'), ('3', 'No')], 
    557565            is_required=is_required, validator_list=validator_list) 
     
    606614    """ 
    607615    requires_data_list = True 
    608     def __init__(self, field_name, choices=[], validator_list=[]): 
     616    def __init__(self, field_name, choices=None, validator_list=None): 
     617        if validator_list is None: validator_list = [] 
     618        if choices is None: choices = [] 
    609619        SelectMultipleField.__init__(self, field_name, choices, size=1, is_required=False, validator_list=validator_list) 
    610620 
     
    637647 
    638648class FileUploadField(FormField): 
    639     def __init__(self, field_name, is_required=False, validator_list=[]): 
     649    def __init__(self, field_name, is_required=False, validator_list=None): 
     650        if validator_list is None: validator_list = [] 
    640651        self.field_name, self.is_required = field_name, is_required 
    641652        self.validator_list = [self.isNonEmptyFile] + validator_list 
     
    676687 
    677688class IntegerField(TextField): 
    678     def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[], member_name=None): 
     689    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None, member_name=None): 
     690        if validator_list is None: validator_list = [] 
    679691        validator_list = [self.isInteger] + validator_list 
    680692        if member_name is not None: 
     
    695707 
    696708class SmallIntegerField(IntegerField): 
    697     def __init__(self, field_name, length=5, maxlength=5, is_required=False, validator_list=[]): 
     709    def __init__(self, field_name, length=5, maxlength=5, is_required=False, validator_list=None): 
     710        if validator_list is None: validator_list = [] 
    698711        validator_list = [self.isSmallInteger] + validator_list 
    699712        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list) 
     
    704717 
    705718class PositiveIntegerField(IntegerField): 
    706     def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=[]): 
     719    def __init__(self, field_name, length=10, maxlength=None, is_required=False, validator_list=None): 
     720        if validator_list is None: validator_list = [] 
    707721        validator_list = [self.isPositive] + validator_list 
    708722        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list) 
     
    713727 
    714728class PositiveSmallIntegerField(IntegerField): 
    715     def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=[]): 
     729    def __init__(self, field_name, length=5, maxlength=None, is_required=False, validator_list=None): 
     730        if validator_list is None: validator_list = [] 
    716731        validator_list = [self.isPositiveSmall] + validator_list 
    717732        IntegerField.__init__(self, field_name, length, maxlength, is_required, validator_list) 
     
    722737 
    723738class FloatField(TextField): 
    724     def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=[]): 
     739    def __init__(self, field_name, max_digits, decimal_places, is_required=False, validator_list=None): 
     740        if validator_list is None: validator_list = [] 
    725741        self.max_digits, self.decimal_places = max_digits, decimal_places 
    726742        validator_list = [self.isValidFloat] + validator_list 
     
    747763    """A FormField that automatically converts its data to a datetime.datetime object. 
    748764    The data should be in the format YYYY-MM-DD HH:MM:SS.""" 
    749     def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=[]): 
     765    def __init__(self, field_name, length=30, maxlength=None, is_required=False, validator_list=None): 
     766        if validator_list is None: validator_list = [] 
    750767        self.field_name = field_name 
    751768        self.length, self.maxlength = length, maxlength 
     
    770787    """A FormField that automatically converts its data to a datetime.date object. 
    771788    The data should be in the format YYYY-MM-DD.""" 
    772     def __init__(self, field_name, is_required=False, validator_list=[]): 
     789    def __init__(self, field_name, is_required=False, validator_list=None): 
     790        if validator_list is None: validator_list = [] 
    773791        validator_list = [self.isValidDate] + validator_list 
    774792        TextField.__init__(self, field_name, length=10, maxlength=10, 
     
    794812    """A FormField that automatically converts its data to a datetime.time object. 
    795813    The data should be in the format HH:MM:SS or HH:MM:SS.mmmmmm.""" 
    796     def __init__(self, field_name, is_required=False, validator_list=[]): 
     814    def __init__(self, field_name, is_required=False, validator_list=None): 
     815        if validator_list is None: validator_list = [] 
    797816        validator_list = [self.isValidTime] + validator_list 
    798817        TextField.__init__(self, field_name, length=8, maxlength=8, 
     
    828847class EmailField(TextField): 
    829848    "A convenience FormField for validating e-mail addresses" 
    830     def __init__(self, field_name, length=50, maxlength=75, is_required=False, validator_list=[]): 
     849    def __init__(self, field_name, length=50, maxlength=75, is_required=False, validator_list=None): 
     850        if validator_list is None: validator_list = [] 
    831851        validator_list = [self.isValidEmail] + validator_list 
    832852        TextField.__init__(self, field_name, length, maxlength=maxlength, 
     
    841861class URLField(TextField): 
    842862    "A convenience FormField for validating URLs" 
    843     def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=[]): 
     863    def __init__(self, field_name, length=50, maxlength=200, is_required=False, validator_list=None): 
     864        if validator_list is None: validator_list = [] 
    844865        validator_list = [self.isValidURL] + validator_list 
    845866        TextField.__init__(self, field_name, length=length, maxlength=maxlength, 
     
    853874 
    854875class IPAddressField(TextField): 
    855     def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=[]): 
     876    def __init__(self, field_name, length=15, maxlength=15, is_required=False, validator_list=None): 
     877        if validator_list is None: validator_list = [] 
    856878        validator_list = [self.isValidIPAddress] + validator_list 
    857879        TextField.__init__(self, field_name, length=length, maxlength=maxlength, 
     
    874896class FilePathField(SelectField): 
    875897    "A SelectField whose choices are the files in a given directory." 
    876     def __init__(self, field_name, path, match=None, recursive=False, is_required=False, validator_list=[]): 
     898    def __init__(self, field_name, path, match=None, recursive=False, is_required=False, validator_list=None): 
    877899        import os 
    878900        if match is not None: 
     
    897919class PhoneNumberField(TextField): 
    898920    "A convenience FormField for validating phone numbers (e.g. '630-555-1234')" 
    899     def __init__(self, field_name, is_required=False, validator_list=[]): 
     921    def __init__(self, field_name, is_required=False, validator_list=None): 
     922        if validator_list is None: validator_list = [] 
    900923        validator_list = [self.isValidPhone] + validator_list 
    901924        TextField.__init__(self, field_name, length=12, maxlength=12, 
     
    910933class USStateField(TextField): 
    911934    "A convenience FormField for validating U.S. states (e.g. 'IL')" 
    912     def __init__(self, field_name, is_required=False, validator_list=[]): 
     935    def __init__(self, field_name, is_required=False, validator_list=None): 
     936        if validator_list is None: validator_list = [] 
    913937        validator_list = [self.isValidUSState] + validator_list 
    914938        TextField.__init__(self, field_name, length=2, maxlength=2, 
     
    930954class CommaSeparatedIntegerField(TextField): 
    931955    "A convenience FormField for validating comma-separated integer fields" 
    932     def __init__(self, field_name, maxlength=None, is_required=False, validator_list=[]): 
     956    def __init__(self, field_name, maxlength=None, is_required=False, validator_list=None): 
     957        if validator_list is None: validator_list = [] 
    933958        validator_list = [self.isCommaSeparatedIntegerList] + validator_list 
    934959        TextField.__init__(self, field_name, length=20, maxlength=maxlength, 
  • django/trunk/django/template/__init__.py

    r2906 r3070  
    228228            self.add_library(lib) 
    229229 
    230     def parse(self, parse_until=[]): 
     230    def parse(self, parse_until=None): 
     231        if parse_until is None: parse_until = [] 
    231232        nodelist = self.create_nodelist() 
    232233        while self.tokens: 
  • django/trunk/django/utils/datastructures.py

    r2809 r3070  
    4343class SortedDict(dict): 
    4444    "A dictionary that keeps its keys in the order in which they're inserted." 
    45     def __init__(self, data={}): 
     45    def __init__(self, data=None): 
     46        if data is None: data = {} 
    4647        dict.__init__(self, data) 
    4748        self.keyOrder = data.keys() 
     
    124125        return self.__class__(dict.items(self)) 
    125126 
    126     def __deepcopy__(self, memo={}): 
     127    def __deepcopy__(self, memo): 
    127128        import copy 
    128129        result = self.__class__() 
  • django/trunk/django/utils/xmlutils.py

    r3 r3070  
    66 
    77class SimplerXMLGenerator(XMLGenerator): 
    8     def addQuickElement(self, name, contents=None, attrs={}): 
     8    def addQuickElement(self, name, contents=None, attrs=None): 
    99        "Convenience method for adding an element with no children" 
     10        if attrs is None: attrs = {} 
    1011        self.startElement(name, attrs) 
    1112        if contents is not None: 
  • django/trunk/django/views/generic/create_update.py

    r2951 r3070  
    1010 
    1111def create_object(request, model, template_name=None, 
    12         template_loader=loader, extra_context={}, post_save_redirect=None, 
     12        template_loader=loader, extra_context=None, post_save_redirect=None, 
    1313        login_required=False, follow=None, context_processors=None): 
    1414    """ 
     
    2020            the form wrapper for the object 
    2121    """ 
     22    if extra_context is None: extra_context = {} 
    2223    if login_required and request.user.is_anonymous(): 
    2324        return redirect_to_login(request.path) 
     
    7273def update_object(request, model, object_id=None, slug=None, 
    7374        slug_field=None, template_name=None, template_loader=loader, 
    74         extra_context={}, post_save_redirect=None, 
     75        extra_context=None, post_save_redirect=None, 
    7576        login_required=False, follow=None, context_processors=None, 
    7677        template_object_name='object'): 
     
    8586            the original object being edited 
    8687    """ 
     88    if extra_context is None: extra_context = {} 
    8789    if login_required and request.user.is_anonymous(): 
    8890        return redirect_to_login(request.path) 
     
    144146def delete_object(request, model, post_delete_redirect, 
    145147        object_id=None, slug=None, slug_field=None, template_name=None, 
    146         template_loader=loader, extra_context={}
     148        template_loader=loader, extra_context=None
    147149        login_required=False, context_processors=None, template_object_name='object'): 
    148150    """ 
     
    158160            the original object being deleted 
    159161    """ 
     162    if extra_context is None: extra_context = {} 
    160163    if login_required and request.user.is_anonymous(): 
    161164        return redirect_to_login(request.path) 
  • django/trunk/django/views/generic/date_based.py

    r3039 r3070  
    77def archive_index(request, queryset, date_field, num_latest=15, 
    88        template_name=None, template_loader=loader, 
    9         extra_context={}, allow_empty=False, context_processors=None, 
     9        extra_context=None, allow_empty=False, context_processors=None, 
    1010        mimetype=None): 
    1111    """ 
     
    1919            Latest N (defaults to 15) objects by date 
    2020    """ 
     21    if extra_context is None: extra_context = {} 
    2122    model = queryset.model 
    2223    queryset = queryset.filter(**{'%s__lte' % date_field: datetime.datetime.now()}) 
     
    4546 
    4647def archive_year(request, year, queryset, date_field, template_name=None, 
    47         template_loader=loader, extra_context={}, allow_empty=False, 
     48        template_loader=loader, extra_context=None, allow_empty=False, 
    4849        context_processors=None, template_object_name='object', mimetype=None, 
    4950        make_object_list=False): 
     
    6162            (Only available if make_object_list argument is True) 
    6263    """ 
     64    if extra_context is None: extra_context = {} 
    6365    model = queryset.model 
    6466    now = datetime.datetime.now() 
     
    9395def archive_month(request, year, month, queryset, date_field, 
    9496        month_format='%b', template_name=None, template_loader=loader, 
    95         extra_context={}, allow_empty=False, context_processors=None, 
     97        extra_context=None, allow_empty=False, context_processors=None, 
    9698        template_object_name='object', mimetype=None): 
    9799    """ 
     
    109111            list of objects published in the given month 
    110112    """ 
     113    if extra_context is None: extra_context = {} 
    111114    try: 
    112115        date = datetime.date(*time.strptime(year+month, '%Y'+month_format)[:3]) 
     
    149152def archive_week(request, year, week, queryset, date_field, 
    150153        template_name=None, template_loader=loader, 
    151         extra_context={}, allow_empty=True, context_processors=None, 
     154        extra_context=None, allow_empty=True, context_processors=None, 
    152155        template_object_name='object', mimetype=None): 
    153156    """ 
     
    161164            list of objects published in the given week 
    162165    """ 
     166    if extra_context is None: extra_context = {} 
    163167    try: 
    164168        date = datetime.date(*time.strptime(year+'-0-'+week, '%Y-%w-%U')[:3]) 
     
    196200def archive_day(request, year, month, day, queryset, date_field, 
    197201        month_format='%b', day_format='%d', template_name=None, 
    198         template_loader=loader, extra_context={}, allow_empty=False, 
     202        template_loader=loader, extra_context=None, allow_empty=False, 
    199203        context_processors=None, template_object_name='object', 
    200204        mimetype=None): 
     
    213217            (datetime) the next day, or None if the current day is today 
    214218    """ 
     219    if extra_context is None: extra_context = {} 
    215220    try: 
    216221        date = datetime.date(*time.strptime(year+month+day, '%Y'+month_format+day_format)[:3]) 
     
    262267        month_format='%b', day_format='%d', object_id=None, slug=None, 
    263268        slug_field=None, template_name=None, template_name_field=None, 
    264         template_loader=loader, extra_context={}, context_processors=None, 
     269        template_loader=loader, extra_context=None, context_processors=None, 
    265270        template_object_name='object', mimetype=None): 
    266271    """ 
     
    272277            the object to be detailed 
    273278    """ 
     279    if extra_context is None: extra_context = {} 
    274280    try: 
    275281        date = datetime.date(*time.strptime(year+month+day, '%Y'+month_format+day_format)[:3]) 
  • django/trunk/django/views/generic/list_detail.py

    r3022 r3070  
    77def object_list(request, queryset, paginate_by=None, allow_empty=False, 
    88        template_name=None, template_loader=loader, 
    9         extra_context={}, context_processors=None, template_object_name='object', 
     9        extra_context=None, context_processors=None, template_object_name='object', 
    1010        mimetype=None): 
    1111    """ 
     
    3535            number of objects, total 
    3636    """ 
     37    if extra_context is None: extra_context = {} 
    3738    queryset = queryset._clone() 
    3839    if paginate_by: 
     
    7980def object_detail(request, queryset, object_id=None, slug=None, 
    8081        slug_field=None, template_name=None, template_name_field=None, 
    81         template_loader=loader, extra_context={}
     82        template_loader=loader, extra_context=None
    8283        context_processors=None, template_object_name='object', 
    8384        mimetype=None): 
     
    9091            the object 
    9192    """ 
     93    if extra_context is None: extra_context = {} 
    9294    model = queryset.model 
    9395    if object_id: