mirror of
				https://github.com/django/django.git
				synced 2025-10-30 17:16:10 +00:00 
			
		
		
		
	Started attackign the next flake8 violation
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| VERSION = (1, 7, 0, 'alpha', 0) | ||||
|  | ||||
|  | ||||
| def get_version(*args, **kwargs): | ||||
|     # Don't litter django/__init__.py with all the get_version stuff. | ||||
|     # Only import if it's actually called. | ||||
|   | ||||
| @@ -12,6 +12,7 @@ import os | ||||
| import pstats | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def gather_stats(p): | ||||
|     profiles = {} | ||||
|     for f in os.listdir(p): | ||||
|   | ||||
| @@ -3,6 +3,7 @@ | ||||
| import os | ||||
| import sys | ||||
|  | ||||
|  | ||||
| def unique_messages(): | ||||
|     basedir = None | ||||
|  | ||||
|   | ||||
| @@ -13,6 +13,7 @@ handler403 = 'django.views.defaults.permission_denied' | ||||
| handler404 = 'django.views.defaults.page_not_found' | ||||
| handler500 = 'django.views.defaults.server_error' | ||||
|  | ||||
|  | ||||
| def include(arg, namespace=None, app_name=None): | ||||
|     if isinstance(arg, tuple): | ||||
|         # callable returning a namespace hint | ||||
| @@ -39,6 +40,7 @@ def include(arg, namespace=None, app_name=None): | ||||
|  | ||||
|     return (urlconf_module, app_name, namespace) | ||||
|  | ||||
|  | ||||
| def patterns(prefix, *args): | ||||
|     pattern_list = [] | ||||
|     for t in args: | ||||
| @@ -49,6 +51,7 @@ def patterns(prefix, *args): | ||||
|         pattern_list.append(t) | ||||
|     return pattern_list | ||||
|  | ||||
|  | ||||
| def url(regex, view, kwargs=None, name=None, prefix=''): | ||||
|     if isinstance(view, (list, tuple)): | ||||
|         # For include(...) processing. | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django.conf import settings | ||||
| from django.conf.urls import patterns, url | ||||
| from django.core.urlresolvers import LocaleRegexURLResolver | ||||
|  | ||||
|  | ||||
| def i18n_patterns(prefix, *args): | ||||
|     """ | ||||
|     Adds the language code prefix to every URL pattern within this | ||||
|   | ||||
| @@ -1,8 +1,10 @@ | ||||
| import re | ||||
|  | ||||
| from django.conf import settings | ||||
| from django.conf.urls import patterns, url | ||||
| from django.core.exceptions import ImproperlyConfigured | ||||
|  | ||||
|  | ||||
| def static(prefix, view='django.views.static.serve', **kwargs): | ||||
|     """ | ||||
|     Helper function to return a URL pattern for serving files in debug mode. | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.template.response import TemplateResponse | ||||
| from django.utils.encoding import force_text | ||||
| from django.utils.translation import ugettext_lazy, ugettext as _ | ||||
|  | ||||
|  | ||||
| def delete_selected(modeladmin, request, queryset): | ||||
|     """ | ||||
|     Default action which deletes the selected objects. | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import sys | ||||
|  | ||||
| js_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'static', 'admin', 'js') | ||||
|  | ||||
|  | ||||
| def main(): | ||||
|     usage = "usage: %prog [file1..fileN]" | ||||
|     description = """With no file paths given this script will automatically | ||||
|   | ||||
| @@ -16,6 +16,7 @@ from django.contrib.admin.utils import (get_model_from_relation, | ||||
|     reverse_field_path, get_limit_choices_to_from_path, prepare_lookup_value) | ||||
| from django.contrib.admin.options import IncorrectLookupParameters | ||||
|  | ||||
|  | ||||
| class ListFilter(object): | ||||
|     title = None  # Human-readable title to appear in the right sidebar. | ||||
|     template = 'admin/filter.html' | ||||
|   | ||||
| @@ -19,6 +19,7 @@ from django.conf import settings | ||||
|  | ||||
| ACTION_CHECKBOX_NAME = '_selected_action' | ||||
|  | ||||
|  | ||||
| class ActionForm(forms.Form): | ||||
|     action = forms.ChoiceField(label=_('Action:')) | ||||
|     select_across = forms.BooleanField(label='', required=False, initial=0, | ||||
| @@ -26,6 +27,7 @@ class ActionForm(forms.Form): | ||||
|  | ||||
| checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False) | ||||
|  | ||||
|  | ||||
| class AdminForm(object): | ||||
|     def __init__(self, form, fieldsets, prepopulated_fields, readonly_fields=None, model_admin=None): | ||||
|         self.form, self.fieldsets = form, normalize_fieldsets(fieldsets) | ||||
| @@ -53,6 +55,7 @@ class AdminForm(object): | ||||
|         return media | ||||
|     media = property(_media) | ||||
|  | ||||
|  | ||||
| class Fieldset(object): | ||||
|     def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(), | ||||
|       description=None, model_admin=None): | ||||
| @@ -77,6 +80,7 @@ class Fieldset(object): | ||||
|         for field in self.fields: | ||||
|             yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin) | ||||
|  | ||||
|  | ||||
| class Fieldline(object): | ||||
|     def __init__(self, form, field, readonly_fields=None, model_admin=None): | ||||
|         self.form = form # A django.forms.Form instance | ||||
| @@ -103,6 +107,7 @@ class Fieldline(object): | ||||
|     def errors(self): | ||||
|         return mark_safe('\n'.join(self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields).strip('\n')) | ||||
|  | ||||
|  | ||||
| class AdminField(object): | ||||
|     def __init__(self, form, field, is_first): | ||||
|         self.field = form[field] # A django.forms.BoundField instance | ||||
| @@ -128,6 +133,7 @@ class AdminField(object): | ||||
|     def errors(self): | ||||
|         return mark_safe(self.field.errors.as_ul()) | ||||
|  | ||||
|  | ||||
| class AdminReadonlyField(object): | ||||
|     def __init__(self, form, field, is_first, model_admin=None): | ||||
|         label = label_for_field(field, form._meta.model, model_admin) | ||||
| @@ -183,6 +189,7 @@ class AdminReadonlyField(object): | ||||
|                     result_repr = display_for_field(value, f) | ||||
|         return conditional_escape(result_repr) | ||||
|  | ||||
|  | ||||
| class InlineAdminFormSet(object): | ||||
|     """ | ||||
|     A wrapper around an inline formset for use in the admin system. | ||||
| @@ -238,6 +245,7 @@ class InlineAdminFormSet(object): | ||||
|         return media | ||||
|     media = property(_media) | ||||
|  | ||||
|  | ||||
| class InlineAdminForm(AdminForm): | ||||
|     """ | ||||
|     A wrapper around an inline form for use in the admin system. | ||||
| @@ -300,6 +308,7 @@ class InlineAdminForm(AdminForm): | ||||
|         from django.forms.formsets import ORDERING_FIELD_NAME | ||||
|         return AdminField(self.form, ORDERING_FIELD_NAME, False) | ||||
|  | ||||
|  | ||||
| class InlineFieldset(Fieldset): | ||||
|     def __init__(self, formset, *args, **kwargs): | ||||
|         self.formset = formset | ||||
| @@ -313,6 +322,7 @@ class InlineFieldset(Fieldset): | ||||
|             yield Fieldline(self.form, field, self.readonly_fields, | ||||
|                 model_admin=self.model_admin) | ||||
|  | ||||
|  | ||||
| class AdminErrorList(forms.utils.ErrorList): | ||||
|     """ | ||||
|     Stores all errors for the form/formsets in an add/change stage view. | ||||
| @@ -325,6 +335,7 @@ class AdminErrorList(forms.utils.ErrorList): | ||||
|                 for errors_in_inline_form in inline_formset.errors: | ||||
|                     self.extend(list(six.itervalues(errors_in_inline_form))) | ||||
|  | ||||
|  | ||||
| def normalize_fieldsets(fieldsets): | ||||
|     """ | ||||
|     Make sure the keys in fieldset dictionaries are strings. Returns the | ||||
| @@ -335,6 +346,7 @@ def normalize_fieldsets(fieldsets): | ||||
|         result.append((name, normalize_dictionary(options))) | ||||
|     return result | ||||
|  | ||||
|  | ||||
| def normalize_dictionary(data_dict): | ||||
|     """ | ||||
|     Converts all the keys in "data_dict" to strings. The keys must be | ||||
|   | ||||
| @@ -25,6 +25,7 @@ register = Library() | ||||
|  | ||||
| DOT = '.' | ||||
|  | ||||
|  | ||||
| @register.simple_tag | ||||
| def paginator_number(cl, i): | ||||
|     """ | ||||
| @@ -40,6 +41,7 @@ def paginator_number(cl, i): | ||||
|                            mark_safe(' class="end"' if i == cl.paginator.num_pages-1 else ''), | ||||
|                            i+1) | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/pagination.html') | ||||
| def pagination(cl): | ||||
|     """ | ||||
| @@ -86,6 +88,7 @@ def pagination(cl): | ||||
|         '1': 1, | ||||
|     } | ||||
|  | ||||
|  | ||||
| def result_headers(cl): | ||||
|     """ | ||||
|     Generates the list column headers. | ||||
| @@ -167,11 +170,13 @@ def result_headers(cl): | ||||
|             "class_attrib": format_html(' class="{0}"', ' '.join(th_classes)) if th_classes else '', | ||||
|         } | ||||
|  | ||||
|  | ||||
| def _boolean_icon(field_val): | ||||
|     icon_url = static('admin/img/icon-%s.gif' % | ||||
|                       {True: 'yes', False: 'no', None: 'unknown'}[field_val]) | ||||
|     return format_html('<img src="{0}" alt="{1}" />', icon_url, field_val) | ||||
|  | ||||
|  | ||||
| def items_for_result(cl, result, form): | ||||
|     """ | ||||
|     Generates the actual list of data. | ||||
| @@ -266,6 +271,7 @@ def items_for_result(cl, result, form): | ||||
|     if form and not form[cl.model._meta.pk.name].is_hidden: | ||||
|         yield format_html('<td>{0}</td>', force_text(form[cl.model._meta.pk.name])) | ||||
|  | ||||
|  | ||||
| class ResultList(list): | ||||
|     # Wrapper class used to return items in a list_editable | ||||
|     # changelist, annotated with the form object for error | ||||
| @@ -275,6 +281,7 @@ class ResultList(list): | ||||
|         self.form = form | ||||
|         super(ResultList, self).__init__(*items) | ||||
|  | ||||
|  | ||||
| def results(cl): | ||||
|     if cl.formset: | ||||
|         for res, form in zip(cl.result_list, cl.formset.forms): | ||||
| @@ -283,12 +290,14 @@ def results(cl): | ||||
|         for res in cl.result_list: | ||||
|             yield ResultList(None, items_for_result(cl, res, None)) | ||||
|  | ||||
|  | ||||
| def result_hidden_fields(cl): | ||||
|     if cl.formset: | ||||
|         for res, form in zip(cl.result_list, cl.formset.forms): | ||||
|             if form[cl.model._meta.pk.name].is_hidden: | ||||
|                 yield mark_safe(force_text(form[cl.model._meta.pk.name])) | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag("admin/change_list_results.html") | ||||
| def result_list(cl): | ||||
|     """ | ||||
| @@ -305,6 +314,7 @@ def result_list(cl): | ||||
|             'num_sorted_fields': num_sorted_fields, | ||||
|             'results': list(results(cl))} | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/date_hierarchy.html') | ||||
| def date_hierarchy(cl): | ||||
|     """ | ||||
| @@ -382,6 +392,7 @@ def date_hierarchy(cl): | ||||
|                 } for year in years] | ||||
|             } | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/search_form.html') | ||||
| def search_form(cl): | ||||
|     """ | ||||
| @@ -393,6 +404,7 @@ def search_form(cl): | ||||
|         'search_var': SEARCH_VAR | ||||
|     } | ||||
|  | ||||
|  | ||||
| @register.simple_tag | ||||
| def admin_list_filter(cl, spec): | ||||
|     tpl = get_template(spec.template) | ||||
| @@ -402,6 +414,7 @@ def admin_list_filter(cl, spec): | ||||
|         'spec': spec, | ||||
|     })) | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/actions.html', takes_context=True) | ||||
| def admin_actions(context): | ||||
|     """ | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django import template | ||||
|  | ||||
| register = template.Library() | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/prepopulated_fields_js.html', takes_context=True) | ||||
| def prepopulated_fields_js(context): | ||||
|     """ | ||||
| @@ -19,6 +20,7 @@ def prepopulated_fields_js(context): | ||||
|     context.update({'prepopulated_fields': prepopulated_fields}) | ||||
|     return context | ||||
|  | ||||
|  | ||||
| @register.inclusion_tag('admin/submit_line.html', takes_context=True) | ||||
| def submit_row(context): | ||||
|     """ | ||||
| @@ -43,6 +45,7 @@ def submit_row(context): | ||||
|         ctx['original'] = context['original'] | ||||
|     return ctx | ||||
|  | ||||
|  | ||||
| @register.filter | ||||
| def cell_count(inline_admin_form): | ||||
|     """Returns the number of cells used in a tabular inline""" | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.contrib.admin.models import LogEntry | ||||
|  | ||||
| register = template.Library() | ||||
|  | ||||
|  | ||||
| class AdminLogNode(template.Node): | ||||
|     def __init__(self, limit, varname, user): | ||||
|         self.limit, self.varname, self.user = limit, varname, user | ||||
| @@ -20,6 +21,7 @@ class AdminLogNode(template.Node): | ||||
|             context[self.varname] = LogEntry.objects.filter(user__pk__exact=user_id).select_related('content_type', 'user')[:int(self.limit)] | ||||
|         return '' | ||||
|  | ||||
|  | ||||
| @register.tag | ||||
| def get_admin_log(parser, token): | ||||
|     """ | ||||
|   | ||||
| @@ -18,6 +18,7 @@ from django.utils import six | ||||
| from django.utils.translation import ungettext | ||||
| from django.core.urlresolvers import reverse, NoReverseMatch | ||||
|  | ||||
|  | ||||
| def lookup_needs_distinct(opts, lookup_path): | ||||
|     """ | ||||
|     Returns True if 'distinct()' should be used to query the given lookup path. | ||||
| @@ -31,6 +32,7 @@ def lookup_needs_distinct(opts, lookup_path): | ||||
|         return True | ||||
|     return False | ||||
|  | ||||
|  | ||||
| def prepare_lookup_value(key, value): | ||||
|     """ | ||||
|     Returns a lookup value prepared to be used in queryset filtering. | ||||
| @@ -46,6 +48,7 @@ def prepare_lookup_value(key, value): | ||||
|             value = True | ||||
|     return value | ||||
|  | ||||
|  | ||||
| def quote(s): | ||||
|     """ | ||||
|     Ensure that primary key values do not confuse the admin URLs by escaping | ||||
|   | ||||
| @@ -410,14 +410,17 @@ def check_type(cls, attr, type_): | ||||
|         raise ImproperlyConfigured("'%s.%s' should be a %s." | ||||
|                 % (cls.__name__, attr, type_.__name__)) | ||||
|  | ||||
|  | ||||
| def check_isseq(cls, label, obj): | ||||
|     if not isinstance(obj, (list, tuple)): | ||||
|         raise ImproperlyConfigured("'%s.%s' must be a list or tuple." % (cls.__name__, label)) | ||||
|  | ||||
|  | ||||
| def check_isdict(cls, label, obj): | ||||
|     if not isinstance(obj, dict): | ||||
|         raise ImproperlyConfigured("'%s.%s' must be a dictionary." % (cls.__name__, label)) | ||||
|  | ||||
|  | ||||
| def get_field(cls, model, label, field): | ||||
|     try: | ||||
|         return model._meta.get_field(field) | ||||
| @@ -425,6 +428,7 @@ def get_field(cls, model, label, field): | ||||
|         raise ImproperlyConfigured("'%s.%s' refers to field '%s' that is missing from model '%s.%s'." | ||||
|                 % (cls.__name__, label, field, model._meta.app_label, model.__name__)) | ||||
|  | ||||
|  | ||||
| def fetch_attr(cls, model, label, field): | ||||
|     try: | ||||
|         return model._meta.get_field(field) | ||||
|   | ||||
| @@ -49,8 +49,8 @@ class FilteredSelectMultiple(forms.SelectMultiple): | ||||
|             % (name, self.verbose_name.replace('"', '\\"'), int(self.is_stacked), static('admin/'))) | ||||
|         return mark_safe(''.join(output)) | ||||
|  | ||||
| class AdminDateWidget(forms.DateInput): | ||||
|  | ||||
| class AdminDateWidget(forms.DateInput): | ||||
|     @property | ||||
|     def media(self): | ||||
|         js = ["calendar.js", "admin/DateTimeShortcuts.js"] | ||||
| @@ -62,8 +62,8 @@ class AdminDateWidget(forms.DateInput): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminDateWidget, self).__init__(attrs=final_attrs, format=format) | ||||
|  | ||||
| class AdminTimeWidget(forms.TimeInput): | ||||
|  | ||||
| class AdminTimeWidget(forms.TimeInput): | ||||
|     @property | ||||
|     def media(self): | ||||
|         js = ["calendar.js", "admin/DateTimeShortcuts.js"] | ||||
| @@ -75,6 +75,7 @@ class AdminTimeWidget(forms.TimeInput): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminTimeWidget, self).__init__(attrs=final_attrs, format=format) | ||||
|  | ||||
|  | ||||
| class AdminSplitDateTime(forms.SplitDateTimeWidget): | ||||
|     """ | ||||
|     A SplitDateTime Widget that has some admin-specific styling. | ||||
| @@ -90,6 +91,7 @@ class AdminSplitDateTime(forms.SplitDateTimeWidget): | ||||
|                            _('Date:'), rendered_widgets[0], | ||||
|                            _('Time:'), rendered_widgets[1]) | ||||
|  | ||||
|  | ||||
| class AdminRadioFieldRenderer(RadioFieldRenderer): | ||||
|     def render(self): | ||||
|         """Outputs a <ul> for this set of radio fields.""" | ||||
| @@ -98,15 +100,18 @@ class AdminRadioFieldRenderer(RadioFieldRenderer): | ||||
|                            format_html_join('\n', '<li>{0}</li>', | ||||
|                                             ((force_text(w),) for w in self))) | ||||
|  | ||||
|  | ||||
| class AdminRadioSelect(forms.RadioSelect): | ||||
|     renderer = AdminRadioFieldRenderer | ||||
|  | ||||
|  | ||||
| class AdminFileWidget(forms.ClearableFileInput): | ||||
|     template_with_initial = ('<p class="file-upload">%s</p>' | ||||
|                             % forms.ClearableFileInput.template_with_initial) | ||||
|     template_with_clear = ('<span class="clearable-file-input">%s</span>' | ||||
|                            % forms.ClearableFileInput.template_with_clear) | ||||
|  | ||||
|  | ||||
| def url_params_from_lookup_dict(lookups): | ||||
|     """ | ||||
|     Converts the type of lookups specified in a ForeignKey limit_choices_to | ||||
| @@ -129,6 +134,7 @@ def url_params_from_lookup_dict(lookups): | ||||
|         params.update(dict(items)) | ||||
|     return params | ||||
|  | ||||
|  | ||||
| class ForeignKeyRawIdWidget(forms.TextInput): | ||||
|     """ | ||||
|     A Widget for displaying ForeignKeys in the "raw_id" interface rather than | ||||
| @@ -187,6 +193,7 @@ class ForeignKeyRawIdWidget(forms.TextInput): | ||||
|         except (ValueError, self.rel.to.DoesNotExist): | ||||
|             return '' | ||||
|  | ||||
|  | ||||
| class ManyToManyRawIdWidget(ForeignKeyRawIdWidget): | ||||
|     """ | ||||
|     A Widget for displaying ManyToMany ids in the "raw_id" interface rather than | ||||
| @@ -275,6 +282,7 @@ class RelatedFieldWidgetWrapper(forms.Widget): | ||||
|     def id_for_label(self, id_): | ||||
|         return self.widget.id_for_label(id_) | ||||
|  | ||||
|  | ||||
| class AdminTextareaWidget(forms.Textarea): | ||||
|     def __init__(self, attrs=None): | ||||
|         final_attrs = {'class': 'vLargeTextField'} | ||||
| @@ -282,6 +290,7 @@ class AdminTextareaWidget(forms.Textarea): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminTextareaWidget, self).__init__(attrs=final_attrs) | ||||
|  | ||||
|  | ||||
| class AdminTextInputWidget(forms.TextInput): | ||||
|     def __init__(self, attrs=None): | ||||
|         final_attrs = {'class': 'vTextField'} | ||||
| @@ -289,6 +298,7 @@ class AdminTextInputWidget(forms.TextInput): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminTextInputWidget, self).__init__(attrs=final_attrs) | ||||
|  | ||||
|  | ||||
| class AdminEmailInputWidget(forms.EmailInput): | ||||
|     def __init__(self, attrs=None): | ||||
|         final_attrs = {'class': 'vTextField'} | ||||
| @@ -296,6 +306,7 @@ class AdminEmailInputWidget(forms.EmailInput): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminEmailInputWidget, self).__init__(attrs=final_attrs) | ||||
|  | ||||
|  | ||||
| class AdminURLFieldWidget(forms.URLInput): | ||||
|     def __init__(self, attrs=None): | ||||
|         final_attrs = {'class': 'vURLField'} | ||||
| @@ -325,9 +336,11 @@ class AdminIntegerFieldWidget(forms.TextInput): | ||||
|             final_attrs.update(attrs) | ||||
|         super(AdminIntegerFieldWidget, self).__init__(attrs=final_attrs) | ||||
|  | ||||
|  | ||||
| class AdminBigIntegerFieldWidget(AdminIntegerFieldWidget): | ||||
|     class_name = 'vBigIntegerField' | ||||
|  | ||||
|  | ||||
| class AdminCommaSeparatedIntegerFieldWidget(forms.TextInput): | ||||
|     def __init__(self, attrs=None): | ||||
|         final_attrs = {'class': 'vCommaSeparatedIntegerField'} | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| from django.conf import settings | ||||
| from django import http | ||||
|  | ||||
|  | ||||
| class XViewMiddleware(object): | ||||
|     """ | ||||
|     Adds an X-View header to internal HEAD requests -- used by the documentation system. | ||||
|   | ||||
| @@ -11,6 +11,7 @@ from django.utils.translation import ugettext as _ | ||||
| class CustomField(models.Field): | ||||
|     description = "A custom field type" | ||||
|  | ||||
|  | ||||
| class DescriptionLackingField(models.Field): | ||||
|     pass | ||||
|  | ||||
|   | ||||
| @@ -16,6 +16,7 @@ except ImportError: | ||||
| else: | ||||
|     docutils_is_available = True | ||||
|  | ||||
|  | ||||
| def trim_docstring(docstring): | ||||
|     """ | ||||
|     Uniformly trims leading/trailing whitespace from docstrings. | ||||
| @@ -30,6 +31,7 @@ def trim_docstring(docstring): | ||||
|     trimmed = [lines[0].lstrip()] + [line[indent:].rstrip() for line in lines[1:]] | ||||
|     return "\n".join(trimmed).strip() | ||||
|  | ||||
|  | ||||
| def parse_docstring(docstring): | ||||
|     """ | ||||
|     Parse out the parts of a docstring.  Returns (title, body, metadata). | ||||
| @@ -55,6 +57,7 @@ def parse_docstring(docstring): | ||||
|                 body = "\n\n".join(parts[1:]) | ||||
|     return title, body, metadata | ||||
|  | ||||
|  | ||||
| def parse_rst(text, default_reference_context, thing_being_parsed=None): | ||||
|     """ | ||||
|     Convert the string from reST to an XHTML fragment. | ||||
| @@ -92,6 +95,7 @@ ROLES = { | ||||
|     'tag': '%s/tags/#%s', | ||||
| } | ||||
|  | ||||
|  | ||||
| def create_reference_role(rolename, urlbase): | ||||
|     def _role(name, rawtext, text, lineno, inliner, options=None, content=None): | ||||
|         if options is None: | ||||
| @@ -102,6 +106,7 @@ def create_reference_role(rolename, urlbase): | ||||
|         return [node], [] | ||||
|     docutils.parsers.rst.roles.register_canonical_role(rolename, _role) | ||||
|  | ||||
|  | ||||
| def default_reference_role(name, rawtext, text, lineno, inliner, options=None, content=None): | ||||
|     if options is None: | ||||
|         options = {} | ||||
|   | ||||
| @@ -21,10 +21,12 @@ from django.utils.translation import ugettext as _ | ||||
| # Exclude methods starting with these strings from documentation | ||||
| MODEL_METHODS_EXCLUDE = ('_', 'add_', 'delete', 'save', 'set_') | ||||
|  | ||||
|  | ||||
| class GenericSite(object): | ||||
|     domain = 'example.com' | ||||
|     name = 'my site' | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def doc_index(request): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -33,6 +35,7 @@ def doc_index(request): | ||||
|         'root_path': urlresolvers.reverse('admin:index'), | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def bookmarklets(request): | ||||
|     admin_root = urlresolvers.reverse('admin:index') | ||||
| @@ -41,6 +44,7 @@ def bookmarklets(request): | ||||
|         'admin_url': "%s://%s%s" % (request.scheme, request.get_host(), admin_root), | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def template_tag_index(request): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -76,6 +80,7 @@ def template_tag_index(request): | ||||
|         'tags': tags | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def template_filter_index(request): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -111,6 +116,7 @@ def template_filter_index(request): | ||||
|         'filters': filters | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def view_index(request): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -141,6 +147,7 @@ def view_index(request): | ||||
|         'views': views | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def view_detail(request, view): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -166,6 +173,7 @@ def view_detail(request, view): | ||||
|         'meta': metadata, | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def model_index(request): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -176,6 +184,7 @@ def model_index(request): | ||||
|         'models': m_list | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def model_detail(request, app_label, model_name): | ||||
|     if not utils.docutils_is_available: | ||||
| @@ -278,6 +287,7 @@ def model_detail(request, app_label, model_name): | ||||
|         'fields': fields, | ||||
|     }, context_instance=RequestContext(request)) | ||||
|  | ||||
|  | ||||
| @staff_member_required | ||||
| def template_detail(request, template): | ||||
|     templates = [] | ||||
| @@ -307,10 +317,12 @@ def template_detail(request, template): | ||||
| # Helper functions # | ||||
| #################### | ||||
|  | ||||
|  | ||||
| def missing_docutils_page(request): | ||||
|     """Display an error message for people without docutils""" | ||||
|     return render_to_response('admin_doc/missing_docutils.html') | ||||
|  | ||||
|  | ||||
| def load_all_installed_template_libraries(): | ||||
|     # Load/register all template tag libraries from installed apps. | ||||
|     for module_name in template.get_templatetags_modules(): | ||||
| @@ -329,6 +341,7 @@ def load_all_installed_template_libraries(): | ||||
|             except template.InvalidTemplateLibrary: | ||||
|                 pass | ||||
|  | ||||
|  | ||||
| def get_return_data_type(func_name): | ||||
|     """Return a somewhat-helpful data type given a function name""" | ||||
|     if func_name.startswith('get_'): | ||||
| @@ -338,6 +351,7 @@ def get_return_data_type(func_name): | ||||
|             return 'Integer' | ||||
|     return '' | ||||
|  | ||||
|  | ||||
| def get_readable_field_data_type(field): | ||||
|     """Returns the description for a given field type, if it exists, | ||||
|     Fields' descriptions can contain format strings, which will be interpolated | ||||
| @@ -345,6 +359,7 @@ def get_readable_field_data_type(field): | ||||
|  | ||||
|     return field.description % field.__dict__ | ||||
|  | ||||
|  | ||||
| def extract_views_from_urlpatterns(urlpatterns, base=''): | ||||
|     """ | ||||
|     Return a list of views from a list of urlpatterns. | ||||
| @@ -371,6 +386,7 @@ def extract_views_from_urlpatterns(urlpatterns, base=''): | ||||
| named_group_matcher = re.compile(r'\(\?P(<\w+>).+?\)') | ||||
| non_named_group_matcher = re.compile(r'\(.*?\)') | ||||
|  | ||||
|  | ||||
| def simplify_regex(pattern): | ||||
|     """ | ||||
|     Clean up urlpattern regexes into something somewhat readable by Mere Humans: | ||||
|   | ||||
| @@ -1,6 +1,7 @@ | ||||
| # PermWrapper and PermLookupDict proxy the permissions system into objects that | ||||
| # the template system can understand. | ||||
|  | ||||
|  | ||||
| class PermLookupDict(object): | ||||
|     def __init__(self, user, app_label): | ||||
|         self.user, self.app_label = user, app_label | ||||
|   | ||||
| @@ -27,6 +27,7 @@ def check_password(environ, username, password): | ||||
|     finally: | ||||
|         db.close_old_connections() | ||||
|  | ||||
|  | ||||
| def groups_for_user(environ, username): | ||||
|     """ | ||||
|     Authorizes a user based on groups | ||||
|   | ||||
| @@ -711,6 +711,7 @@ class LogoutTest(AuthViewsTestCase): | ||||
|                             "%s should be allowed" % good_url) | ||||
|             self.confirm_logged_out() | ||||
|  | ||||
|  | ||||
| @skipIfCustomUser | ||||
| @override_settings( | ||||
|     PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',), | ||||
|   | ||||
| @@ -10,11 +10,13 @@ from django.shortcuts import render_to_response | ||||
| from django.template import Template, RequestContext | ||||
| from django.views.decorators.cache import never_cache | ||||
|  | ||||
|  | ||||
| class CustomRequestAuthenticationForm(AuthenticationForm): | ||||
|     def __init__(self, request, *args, **kwargs): | ||||
|         assert isinstance(request, HttpRequest) | ||||
|         super(CustomRequestAuthenticationForm, self).__init__(request, *args, **kwargs) | ||||
|  | ||||
|  | ||||
| @never_cache | ||||
| def remote_user_auth_view(request): | ||||
|     "Dummy view for remote user tests" | ||||
| @@ -22,6 +24,7 @@ def remote_user_auth_view(request): | ||||
|     c = RequestContext(request, {}) | ||||
|     return HttpResponse(t.render(c)) | ||||
|  | ||||
|  | ||||
| def auth_processor_no_attr_access(request): | ||||
|     render_to_response('context_processors/auth_attrs_no_access.html', | ||||
|         RequestContext(request, {}, processors=[context_processors.auth])) | ||||
| @@ -29,32 +32,39 @@ def auth_processor_no_attr_access(request): | ||||
|     return render_to_response('context_processors/auth_attrs_test_access.html', | ||||
|         {'session_accessed': request.session.accessed}) | ||||
|  | ||||
|  | ||||
| def auth_processor_attr_access(request): | ||||
|     render_to_response('context_processors/auth_attrs_access.html', | ||||
|         RequestContext(request, {}, processors=[context_processors.auth])) | ||||
|     return render_to_response('context_processors/auth_attrs_test_access.html', | ||||
|         {'session_accessed': request.session.accessed}) | ||||
|  | ||||
|  | ||||
| def auth_processor_user(request): | ||||
|     return render_to_response('context_processors/auth_attrs_user.html', | ||||
|         RequestContext(request, {}, processors=[context_processors.auth])) | ||||
|  | ||||
|  | ||||
| def auth_processor_perms(request): | ||||
|     return render_to_response('context_processors/auth_attrs_perms.html', | ||||
|         RequestContext(request, {}, processors=[context_processors.auth])) | ||||
|  | ||||
|  | ||||
| def auth_processor_perm_in_perms(request): | ||||
|     return render_to_response('context_processors/auth_attrs_perm_in_perms.html', | ||||
|         RequestContext(request, {}, processors=[context_processors.auth])) | ||||
|  | ||||
|  | ||||
| def auth_processor_messages(request): | ||||
|     info(request, "Message 1") | ||||
|     return render_to_response('context_processors/auth_attrs_messages.html', | ||||
|          RequestContext(request, {}, processors=[context_processors.auth])) | ||||
|  | ||||
|  | ||||
| def userpage(request): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| def custom_request_auth_login(request): | ||||
|     return login(request, authentication_form=CustomRequestAuthenticationForm) | ||||
|  | ||||
|   | ||||
| @@ -234,6 +234,7 @@ def password_reset_confirm(request, uidb64=None, token=None, | ||||
|     return TemplateResponse(request, template_name, context, | ||||
|                             current_app=current_app) | ||||
|  | ||||
|  | ||||
| def password_reset_complete(request, | ||||
|                             template_name='registration/password_reset_complete.html', | ||||
|                             current_app=None, extra_context=None): | ||||
|   | ||||
| @@ -154,6 +154,7 @@ class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)): | ||||
|         setattr(instance, self.fk_field, fk) | ||||
|         setattr(instance, self.cache_attr, value) | ||||
|  | ||||
|  | ||||
| class GenericRelation(ForeignObject): | ||||
|     """Provides an accessor to generic related objects (e.g. comments)""" | ||||
|  | ||||
| @@ -293,6 +294,7 @@ class ReverseGenericRelatedObjectsDescriptor(object): | ||||
|         for obj in value: | ||||
|             manager.add(obj) | ||||
|  | ||||
|  | ||||
| def create_generic_related_manager(superclass): | ||||
|     """ | ||||
|     Factory function for a manager that subclasses 'superclass' (which is a | ||||
| @@ -390,11 +392,12 @@ def create_generic_related_manager(superclass): | ||||
|  | ||||
|     return GenericRelatedObjectManager | ||||
|  | ||||
| class GenericRel(ForeignObjectRel): | ||||
|  | ||||
| class GenericRel(ForeignObjectRel): | ||||
|     def __init__(self, field, to, related_name=None, limit_choices_to=None): | ||||
|         super(GenericRel, self).__init__(field, to, related_name, limit_choices_to) | ||||
|  | ||||
|  | ||||
| class BaseGenericInlineFormSet(BaseModelFormSet): | ||||
|     """ | ||||
|     A formset for generic inline objects to a parent. | ||||
| @@ -475,6 +478,7 @@ def generic_inlineformset_factory(model, form=ModelForm, | ||||
|     FormSet.for_concrete_model = for_concrete_model | ||||
|     return FormSet | ||||
|  | ||||
|  | ||||
| class GenericInlineModelAdmin(InlineModelAdmin): | ||||
|     ct_field = "content_type" | ||||
|     ct_fk_field = "object_id" | ||||
| @@ -516,8 +520,10 @@ class GenericInlineModelAdmin(InlineModelAdmin): | ||||
|  | ||||
|         return generic_inlineformset_factory(self.model, **defaults) | ||||
|  | ||||
|  | ||||
| class GenericStackedInline(GenericInlineModelAdmin): | ||||
|     template = 'admin/edit_inline/stacked.html' | ||||
|  | ||||
|  | ||||
| class GenericTabularInline(GenericInlineModelAdmin): | ||||
|     template = 'admin/edit_inline/tabular.html' | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.utils.translation import ugettext_lazy as _ | ||||
| from django.utils.encoding import smart_text, force_text | ||||
| from django.utils.encoding import python_2_unicode_compatible | ||||
|  | ||||
|  | ||||
| class ContentTypeManager(models.Manager): | ||||
|  | ||||
|     # Cache to avoid re-looking up ContentType objects all over the place. | ||||
|   | ||||
| @@ -15,10 +15,12 @@ from django.utils.encoding import python_2_unicode_compatible | ||||
| class ConcreteModel(models.Model): | ||||
|     name = models.CharField(max_length=10) | ||||
|  | ||||
|  | ||||
| class ProxyModel(ConcreteModel): | ||||
|     class Meta: | ||||
|         proxy = True | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class FooWithoutUrl(models.Model): | ||||
|     """ | ||||
| @@ -39,6 +41,7 @@ class FooWithUrl(FooWithoutUrl): | ||||
|     def get_absolute_url(self): | ||||
|         return "/users/%s/" % urlquote(self.name) | ||||
|  | ||||
|  | ||||
| class FooWithBrokenAbsoluteUrl(FooWithoutUrl): | ||||
|     """ | ||||
|     Fake model defining a ``get_absolute_url`` method containing an error | ||||
| @@ -47,8 +50,8 @@ class FooWithBrokenAbsoluteUrl(FooWithoutUrl): | ||||
|     def get_absolute_url(self): | ||||
|         return "/users/%s/" % self.unknown_field | ||||
|  | ||||
| class ContentTypesTests(TestCase): | ||||
|  | ||||
| class ContentTypesTests(TestCase): | ||||
|     def setUp(self): | ||||
|         self.old_Site_meta_installed = Site._meta.installed | ||||
|         ContentType.objects.clear_cache() | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from django.contrib.sites.models import Site, get_current_site | ||||
| from django.core.exceptions import ObjectDoesNotExist | ||||
| from django.utils.translation import ugettext as _ | ||||
|  | ||||
|  | ||||
| def shortcut(request, content_type_id, object_id): | ||||
|     """ | ||||
|     Redirect to an object's page based on a content-type ID and an object ID. | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.contrib.flatpages.models import FlatPage | ||||
| from django.utils.translation import ugettext_lazy as _ | ||||
| from django.contrib.flatpages.forms import FlatpageForm | ||||
|  | ||||
|  | ||||
| class FlatPageAdmin(admin.ModelAdmin): | ||||
|     form = FlatpageForm | ||||
|     fieldsets = ( | ||||
|   | ||||
| @@ -3,6 +3,7 @@ from django.conf import settings | ||||
| from django.contrib.flatpages.models import FlatPage | ||||
| from django.utils.translation import ugettext, ugettext_lazy as _ | ||||
|  | ||||
|  | ||||
| class FlatpageForm(forms.ModelForm): | ||||
|     url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/\.~]+$', | ||||
|         help_text = _("Example: '/about/contact/'. Make sure to have leading" | ||||
|   | ||||
| @@ -2,6 +2,7 @@ from django.contrib.flatpages.views import flatpage | ||||
| from django.http import Http404 | ||||
| from django.conf import settings | ||||
|  | ||||
|  | ||||
| class FlatpageFallbackMiddleware(object): | ||||
|     def process_response(self, request, response): | ||||
|         if response.status_code != 404: | ||||
|   | ||||
| @@ -6,6 +6,7 @@ from django.core.urlresolvers import get_script_prefix | ||||
| from django.utils.translation import ugettext_lazy as _ | ||||
| from django.utils.encoding import iri_to_uri, python_2_unicode_compatible | ||||
|  | ||||
|  | ||||
| @python_2_unicode_compatible | ||||
| class FlatPage(models.Model): | ||||
|     url = models.CharField(_('URL'), max_length=100, db_index=True) | ||||
|   | ||||
| @@ -7,6 +7,7 @@ from django.test import TestCase | ||||
| from django.test.utils import override_settings | ||||
| from django.utils import translation | ||||
|  | ||||
|  | ||||
| @override_settings(SITE_ID=1) | ||||
| class FlatpageAdminFormTests(TestCase): | ||||
|     fixtures = ['example_site'] | ||||
|   | ||||
| @@ -17,6 +17,8 @@ DEFAULT_TEMPLATE = 'flatpages/default.html' | ||||
| # or a redirect is required for authentication, the 404 needs to be returned | ||||
| # without any CSRF checks. Therefore, we only | ||||
| # CSRF protect the internal implementation. | ||||
|  | ||||
|  | ||||
| def flatpage(request, url): | ||||
|     """ | ||||
|     Public interface to the flat page view. | ||||
| @@ -44,6 +46,7 @@ def flatpage(request, url): | ||||
|             raise | ||||
|     return render_flatpage(request, f) | ||||
|  | ||||
|  | ||||
| @csrf_protect | ||||
| def render_flatpage(request, f): | ||||
|     """ | ||||
|   | ||||
| @@ -10,6 +10,7 @@ from django.contrib.formtools.utils import form_hmac | ||||
|  | ||||
| AUTO_ID = 'formtools_%s' # Each form here uses this as its auto_id parameter. | ||||
|  | ||||
|  | ||||
| class FormPreview(object): | ||||
|     preview_template = 'formtools/preview.html' | ||||
|     form_template = 'formtools/form.html' | ||||
|   | ||||
| @@ -1,15 +1,18 @@ | ||||
| from django import forms | ||||
|  | ||||
|  | ||||
| class TestForm(forms.Form): | ||||
|     field1 = forms.CharField() | ||||
|     field1_ = forms.CharField() | ||||
|     bool1 = forms.BooleanField(required=False) | ||||
|     date1 = forms.DateField(required=False) | ||||
|  | ||||
|  | ||||
| class HashTestForm(forms.Form): | ||||
|     name = forms.CharField() | ||||
|     bio = forms.CharField() | ||||
|  | ||||
|  | ||||
| class HashTestBlankForm(forms.Form): | ||||
|     name = forms.CharField(required=False) | ||||
|     bio = forms.CharField(required=False) | ||||
|   | ||||
| @@ -19,6 +19,7 @@ from django.contrib.formtools.tests.forms import ( | ||||
| success_string = "Done was called!" | ||||
| success_string_encoded = success_string.encode() | ||||
|  | ||||
|  | ||||
| class TestFormPreview(preview.FormPreview): | ||||
|     def get_context(self, request, form): | ||||
|         context = super(TestFormPreview, self).get_context(request, form) | ||||
| @@ -31,6 +32,7 @@ class TestFormPreview(preview.FormPreview): | ||||
|     def done(self, request, cleaned_data): | ||||
|         return http.HttpResponse(success_string) | ||||
|  | ||||
|  | ||||
| @override_settings( | ||||
|     TEMPLATE_DIRS=( | ||||
|         os.path.join(os.path.dirname(upath(__file__)), 'templates'), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user