From b5be4a4fcce3ffee950935f763657f6d8902f7d7 Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Fri, 16 Dec 2005 05:05:10 +0000 Subject: [PATCH] magic-removal: Merged to [1686] git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@1687 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/media/css/global.css | 2 +- django/core/cache.py | 2 +- django/core/template/defaultfilters.py | 9 ++++++--- django/utils/autoreload.py | 15 +++++++++------ django/views/generic/create_update.py | 9 +++++---- django/views/generic/date_based.py | 12 ++++++------ django/views/generic/list_detail.py | 6 +++--- docs/tutorial01.txt | 12 ++++++++++++ 8 files changed, 43 insertions(+), 24 deletions(-) diff --git a/django/contrib/admin/media/css/global.css b/django/contrib/admin/media/css/global.css index 4cb51016cd..3922337f07 100644 --- a/django/contrib/admin/media/css/global.css +++ b/django/contrib/admin/media/css/global.css @@ -199,7 +199,7 @@ td ul.errorlist li { margin:0 !important; } /* ACTION ICONS */ .addlink { padding-left:12px; background:url(../img/admin/icon_addlink.gif) 0 .2em no-repeat; } .changelink { padding-left:12px; background:url(../img/admin/icon_changelink.gif) 0 .2em no-repeat; } -.deletelink { padding-left:12px; background:url(../img/admin/icon_deletelink.gif) 0 50% no-repeat; } +.deletelink { padding-left:12px; background:url(../img/admin/icon_deletelink.gif) 0 .2em no-repeat; } a.deletelink:link, a.deletelink:visited { color:#CC3434; } a.deletelink:hover { color:#993333; } diff --git a/django/core/cache.py b/django/core/cache.py index 7216f8f8de..e68de59a55 100644 --- a/django/core/cache.py +++ b/django/core/cache.py @@ -303,7 +303,7 @@ class _FileCache(_SimpleCache): os.remove(fname) else: return pickle.load(f) - except (IOError, OSError, pickle.PickleError): + except (IOError, OSError, EOFError, pickle.PickleError): pass return default diff --git a/django/core/template/defaultfilters.py b/django/core/template/defaultfilters.py index 9fa6f4526f..de6da35cbb 100644 --- a/django/core/template/defaultfilters.py +++ b/django/core/template/defaultfilters.py @@ -2,6 +2,7 @@ from django.core.template import resolve_variable, Library from django.conf.settings import DATE_FORMAT, TIME_FORMAT +from django.utils.translation import gettext import re import random as random_module @@ -351,7 +352,7 @@ def divisibleby(value, arg): "Returns true if the value is devisible by the argument" return int(value) % int(arg) == 0 -def yesno(value, arg=_("yes,no,maybe")): +def yesno(value, arg=None): """ Given a string mapping values for true, false and (optionally) None, returns one of those strings accoding to the value: @@ -365,7 +366,9 @@ def yesno(value, arg=_("yes,no,maybe")): ``None`` ``"yeah,no"`` ``"no"`` (converts None to False if no mapping for None is given. ========== ====================== ================================== - """ + """ + if arg is None: + arg = gettext('yes,no,maybe') bits = arg.split(',') if len(bits) < 2: return value # Invalid arg. @@ -470,4 +473,4 @@ register.filter(urlize) register.filter(urlizetrunc) register.filter(wordcount) register.filter(wordwrap) -register.filter(yesno) \ No newline at end of file +register.filter(yesno) diff --git a/django/utils/autoreload.py b/django/utils/autoreload.py index 04e319c1c7..1edec190d8 100644 --- a/django/utils/autoreload.py +++ b/django/utils/autoreload.py @@ -31,21 +31,24 @@ import os, sys, thread, time RUN_RELOADER = True -reloadFiles = [] def reloader_thread(): mtimes = {} + win = (sys.platform == "win32") while RUN_RELOADER: - for filename in filter(lambda v: v, map(lambda m: getattr(m, "__file__", None), sys.modules.values())) + reloadFiles: + for filename in filter(lambda v: v, map(lambda m: getattr(m, "__file__", None), sys.modules.values())): + if filename.endswith(".pyc") or filename.endswith("*.pyo"): + filename = filename[:-1] if not os.path.exists(filename): continue # File might be in an egg, so it can't be reloaded. - if filename.endswith(".pyc"): - filename = filename[:-1] - mtime = os.stat(filename).st_mtime + stat = os.stat(filename) + mtime = stat.st_mtime + if win: + mtime -= stat.st_ctime if filename not in mtimes: mtimes[filename] = mtime continue - if mtime > mtimes[filename]: + if mtime != mtimes[filename]: sys.exit(3) # force reload time.sleep(1) diff --git a/django/views/generic/create_update.py b/django/views/generic/create_update.py index 87f78c5930..da15bd1a43 100644 --- a/django/views/generic/create_update.py +++ b/django/views/generic/create_update.py @@ -1,6 +1,7 @@ from django import models from django.core.xheaders import populate_xheaders -from django.core import template_loader, formfields, meta +from django.core.template import loader +from django.core import formfields, meta from django.views.auth.login import redirect_to_login from django.core.extensions import DjangoContext as Context from django.core.paginator import ObjectPaginator, InvalidPage @@ -8,7 +9,7 @@ from django.utils.httpwrappers import HttpResponse, HttpResponseRedirect from django.core.exceptions import Http404, ObjectDoesNotExist, ImproperlyConfigured def create_object(request, app_label, module_name, template_name=None, - template_loader=template_loader, extra_context={}, + template_loader=loader, extra_context={}, post_save_redirect=None, login_required=False, follow=None): """ Generic object-creation function. @@ -70,7 +71,7 @@ def create_object(request, app_label, module_name, template_name=None, return HttpResponse(t.render(c)) def update_object(request, app_label, module_name, object_id=None, slug=None, - slug_field=None, template_name=None, template_loader=template_loader, + slug_field=None, template_name=None, template_loader=loader, extra_lookup_kwargs={}, extra_context={}, post_save_redirect=None, login_required=False, follow=None): """ @@ -145,7 +146,7 @@ def update_object(request, app_label, module_name, object_id=None, slug=None, def delete_object(request, app_label, module_name, post_delete_redirect, object_id=None, slug=None, slug_field=None, template_name=None, - template_loader=template_loader, extra_lookup_kwargs={}, + template_loader=loader, extra_lookup_kwargs={}, extra_context={}, login_required=False): """ Generic object-delete function. diff --git a/django/views/generic/date_based.py b/django/views/generic/date_based.py index ca4b4b86e3..eb7386daf3 100644 --- a/django/views/generic/date_based.py +++ b/django/views/generic/date_based.py @@ -1,4 +1,4 @@ -from django.core import template_loader +from django.core.template import loader from django.core.exceptions import Http404, ObjectDoesNotExist from django.core.extensions import DjangoContext as Context from django.core.xheaders import populate_xheaders @@ -7,7 +7,7 @@ from django.utils.httpwrappers import HttpResponse import datetime, time def archive_index(request, app_label, module_name, date_field, num_latest=15, - template_name=None, template_loader=template_loader, + template_name=None, template_loader=loader, extra_lookup_kwargs={}, extra_context={}, allow_empty=False): """ Generic top-level archive of date-based objects. @@ -50,7 +50,7 @@ def archive_index(request, app_label, module_name, date_field, num_latest=15, return HttpResponse(t.render(c)) def archive_year(request, year, app_label, module_name, date_field, - template_name=None, template_loader=template_loader, + template_name=None, template_loader=loader, extra_lookup_kwargs={}, extra_context={}): """ Generic yearly archive view. @@ -87,7 +87,7 @@ def archive_year(request, year, app_label, module_name, date_field, return HttpResponse(t.render(c)) def archive_month(request, year, month, app_label, module_name, date_field, - month_format='%b', template_name=None, template_loader=template_loader, + month_format='%b', template_name=None, template_loader=loader, extra_lookup_kwargs={}, extra_context={}): """ Generic monthly archive view. @@ -136,7 +136,7 @@ def archive_month(request, year, month, app_label, module_name, date_field, def archive_day(request, year, month, day, app_label, module_name, date_field, month_format='%b', day_format='%d', template_name=None, - template_loader=template_loader, extra_lookup_kwargs={}, + template_loader=loader, extra_lookup_kwargs={}, extra_context={}, allow_empty=False): """ Generic daily archive view. @@ -200,7 +200,7 @@ def archive_today(request, **kwargs): def object_detail(request, year, month, day, app_label, module_name, date_field, month_format='%b', day_format='%d', object_id=None, slug=None, slug_field=None, template_name=None, template_name_field=None, - template_loader=template_loader, extra_lookup_kwargs={}, + template_loader=loader, extra_lookup_kwargs={}, extra_context={}): """ Generic detail view from year/month/day/slug or year/month/day/id structure. diff --git a/django/views/generic/list_detail.py b/django/views/generic/list_detail.py index 18500b26de..c4c3e85945 100644 --- a/django/views/generic/list_detail.py +++ b/django/views/generic/list_detail.py @@ -1,5 +1,5 @@ from django import models -from django.core import template_loader +from django.core.template import loader from django.utils.httpwrappers import HttpResponse from django.core.xheaders import populate_xheaders from django.core.extensions import DjangoContext as Context @@ -7,7 +7,7 @@ from django.core.paginator import ObjectPaginator, InvalidPage from django.core.exceptions import Http404, ObjectDoesNotExist def object_list(request, app_label, module_name, paginate_by=None, allow_empty=False, - template_name=None, template_loader=template_loader, + template_name=None, template_loader=loader, extra_lookup_kwargs={}, extra_context={}): """ Generic list of objects. @@ -80,7 +80,7 @@ def object_list(request, app_label, module_name, paginate_by=None, allow_empty=F def object_detail(request, app_label, module_name, object_id=None, slug=None, slug_field=None, template_name=None, template_name_field=None, - template_loader=template_loader, extra_lookup_kwargs={}, + template_loader=loader, extra_lookup_kwargs={}, extra_context={}): """ Generic list of objects. diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt index 5ed5e25bbe..5feb51a27d 100644 --- a/docs/tutorial01.txt +++ b/docs/tutorial01.txt @@ -32,6 +32,18 @@ its setup.py utility. If it's not on your path, you can find it in ``site-packages/django/bin``; consider symlinking to it from some place on your path, such as /usr/local/bin.) +.. admonition:: Where should this code live? + + If your background is in PHP, you're probably used to putting code under the + Web server's document root (in a place such as ``/var/www``). With Django, + you don't do that. It's not a good idea to put any of this Python code within + your Web server's document root, because it risks the possibility that + people may be able to view your code over the Web. That's not good for + security. + + Put your code in some directory **outside** of the document root, such as + ``/home/mycode``. + A project is a collection of settings for an instance of Django -- including database configuration, Django-specific options and application-specific settings. Let's look at what ``startproject`` created::