Django

Code

Changeset 6864

Show
Ignore:
Timestamp:
12/03/07 11:37:33 (9 months ago)
Author:
jkocherhans
Message:

newforms-admin: Merged changes from trunk up to [6863].

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/newforms-admin

    • Property svnmerge-integrated changed from /django/trunk:1-4345,4350-4357,4359-4365,4371-4372,4374-4377,4380-4386,4388,4390-4391,4400-4402,4404-4408,4410,4412-4419,4426-4427,4430-4432,4434,4441,4443-4444,4446-4447,4450,4452-4453,4455-4458,4476,4503,4546,4564-4569,4580-4586,4617,4630,4641-6390,6392-6782 to /django/trunk:1-4345,4350-4357,4359-4365,4371-4372,4374-4377,4380-4386,4388,4390-4391,4400-4402,4404-4408,4410,4412-4419,4426-4427,4430-4432,4434,4441,4443-4444,4446-4447,4450,4452-4453,4455-4458,4476,4503,4546,4564-4569,4580-4586,4617,4630,4641-6390,6392-6863
  • django/branches/newforms-admin/AUTHORS

    r6777 r6864  
    9191    Pete Crosier <pete.crosier@gmail.com> 
    9292    Matt Croydon <http://www.postneo.com/> 
     93    Leah Culver <leah@pownce.com> 
    9394    flavio.curella@gmail.com 
    9495    Jure Cuhalev <gandalf@owca.info> 
     
    134135    gandalf@owca.info 
    135136    Marc Garcia <marc.garcia@accopensys.com> 
     137    Andy Gayton <andy-django@thecablelounge.com> 
    136138    Baishampayan Ghose 
    137139    Dimitris Glezos <dimitris@glezos.com> 
     
    174176    Antti Kaihola <http://akaihola.blogspot.com/> 
    175177    Nagy Károly <charlie@rendszergazda.com> 
     178    Erik Karulf <erik@karulf.com> 
    176179    Ben Dean Kawamura <ben.dean.kawamura@gmail.com> 
    177180    Ian G. Kelly <ian.g.kelly@gmail.com> 
     
    193196    konrad@gwu.edu 
    194197    knox <christobzr@gmail.com> 
     198    David Krauth 
    195199    kurtiss@meetro.com 
    196200    lakin.wecker@gmail.com 
     
    208212    Philip Lindborg <philip.lindborg@gmail.com> 
    209213    Simon Litchfield <simon@quo.com.au> 
     214    Trey Long <trey@ktrl.com> 
    210215    msaelices <msaelices@gmail.com> 
    211216    Matt McClanahan <http://mmcc.cx/> 
     
    257262    Luke Plant <http://lukeplant.me.uk/> 
    258263    plisk 
     264    Mihai Preda <mihai_preda@yahoo.com> 
    259265    Daniel Poelzleithner <http://poelzi.org/> 
    260266    polpak@yahoo.com 
     
    269275    Brian Ray <http://brianray.chipy.org/> 
    270276    remco@diji.biz 
     277    David Reynolds <david@reynoldsfamily.org.uk> 
    271278    rhettg@gmail.com 
    272279    ricardojbarrios@gmail.com 
     
    288295    jason.sidabras@gmail.com 
    289296    Jozko Skrablin <jozko.skrablin@gmail.com> 
     297    Ben Slavin <benjamin.slavin@gmail.com> 
    290298    SmileyChris <smileychris@gmail.com> 
    291299    smurf@smurf.noris.de 
  • django/branches/newforms-admin/django/conf/global_settings.py

    r6777 r6864  
    254254URL_VALIDATOR_USER_AGENT = "Django/%s (http://www.djangoproject.com)" % get_version() 
    255255 
     256# The tablespaces to use for each model when not specified otherwise. 
     257DEFAULT_TABLESPACE = '' 
     258DEFAULT_INDEX_TABLESPACE = '' 
     259 
    256260############## 
    257261# MIDDLEWARE # 
     
    290294# The cache backend to use.  See the docstring in django.core.cache for the 
    291295# possible values. 
    292 CACHE_BACKEND = 'simple://' 
     296CACHE_BACKEND = 'locmem://' 
    293297CACHE_MIDDLEWARE_KEY_PREFIX = '' 
    294298CACHE_MIDDLEWARE_SECONDS = 600 
  • django/branches/newforms-admin/django/conf/__init__.py

    r6613 r6864  
    5353                raise KeyError 
    5454        except KeyError: 
    55             raise EnvironmentError, "Environment variable %s is undefined." % ENVIRONMENT_VARIABLE 
     55            raise ImportError, "Environment variable %s is undefined so settings cannot be imported." % ENVIRONMENT_VARIABLE   # NOTE: This is arguably an EnvironmentError, but that causes problems with Python's interactive help 
    5656 
    5757        self._target = Settings(settings_module) 
     
    6464        """ 
    6565        if self._target != None: 
    66             raise EnvironmentError, 'Settings already configured.' 
     66            raise RuntimeError, 'Settings already configured.' 
    6767        holder = UserSettingsHolder(default_settings) 
    6868        for name, value in options.items(): 
     
    8383            mod = __import__(self.SETTINGS_MODULE, {}, {}, ['']) 
    8484        except ImportError, e: 
    85             raise EnvironmentError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) 
     85            raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e) 
    8686 
    8787        # Settings that should be converted into tuples if they're mistakenly entered 
  • django/branches/newforms-admin/django/conf/locale/ca/LC_MESSAGES/djangojs.po

    r5572 r6864  
     1# translation of djangojs.po to español 
    12# translation of djangojs.po to 
    23# Catalan translation for the django-admin JS files. 
    34# This file is distributed under the same license as the Django package. 
    45# 
     6# Antoni Aloy <antoni.aloy@trespams.com>, 2007. 
    57msgid "" 
    68msgstr "" 
     
    810"Report-Msgid-Bugs-To: \n" 
    911"POT-Creation-Date: 2007-05-20 18:25+0200\n" 
    10 "PO-Revision-Date: 2007-06-25 17:47+0200\n" 
    11 "Last-Translator: Marc Fargas <telenieko@telenieko.com>\n" 
    12 "Language-Team: <es@li.org>\n" 
     12"PO-Revision-Date: 2007-12-01 12:06+0100\n" 
     13"Last-Translator: Antoni Aloy <antoni.aloy@trespams.com>\n" 
     14"Language-Team: español <ca@li.org>\n" 
    1315"MIME-Version: 1.0\n" 
    1416"Content-Type: text/plain; charset=UTF-8\n" 
    1517"Content-Transfer-Encoding: 8bit\n" 
    16 "X-Generator: VIM 7.0\n" 
     18"X-Generator: KBabel 1.11.4\n" 
    1719"Plural-Forms:  nplurals=2; plural=(n != 1);\n" 
    1820 
     
    5254"January February March April May June July August September October November " 
    5355"December" 
    54 msgstr "" 
    55 "Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre" 
     56msgstr "Gener Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre Desembre" 
    5657 
    5758#: contrib/admin/media/js/dateparse.js:33 
     
    118119msgid "Hide" 
    119120msgstr "Ocultar" 
     121 
  • django/branches/newforms-admin/django/contrib/localflavor/uk/forms.py

    r5918 r6864  
    33""" 
    44 
    5 from django.newforms.fields import RegexField 
     5from django.newforms.fields import RegexField, Select 
    66from django.utils.translation import ugettext 
    77 
     
    1818            error_message=ugettext(u'Enter a postcode. A space is required between the two postcode parts.'), 
    1919            *args, **kwargs) 
     20 
     21class UKCountySelect(Select): 
     22    """ 
     23    A Select widget that uses a list of UK Counties/Regions as its choices. 
     24    """ 
     25    def __init__(self, attrs=None): 
     26        from uk_regions import UK_REGION_CHOICES 
     27        super(UKCountySelect, self).__init__(attrs, choices=UK_REGION_CHOICES) 
     28 
     29class UKNationSelect(Select): 
     30    """ 
     31    A Select widget that uses a list of UK Nations as its choices. 
     32    """ 
     33    def __init__(self, attrs=None): 
     34        from uk_regions import UK_NATIONS_CHOICES 
     35        super(UKNationSelect, self).__init__(attrs, choices=UK_NATIONS_CHOICES) 
  • django/branches/newforms-admin/django/contrib/markup/templatetags/markup.py

    r6776 r6864  
    3333textile.is_safe = True 
    3434 
    35 def markdown(value): 
     35def markdown(value, arg=''): 
     36    """ 
     37    Runs Markdown over a given value, optionally using various 
     38    extensions python-markdown supports. 
     39 
     40    Syntax:: 
     41 
     42        {{ value|markdown:"extension1_name,extension2_name..." }} 
     43 
     44    To enable safe mode, which strips raw HTML and only returns HTML 
     45    generated by actual Markdown syntax, pass "safe" as the first 
     46    extension in the list. 
     47 
     48    If the version of Markdown in use does not support extensions, 
     49    they will be silently ignored. 
     50 
     51    """ 
    3652    try: 
    3753        import markdown 
     
    4157        return force_unicode(value) 
    4258    else: 
    43         return mark_safe(force_unicode(markdown.markdown(smart_str(value)))) 
     59        # markdown.version was first added in 1.6b. The only version of markdown 
     60        # to fully support extensions before 1.6b was the shortlived 1.6a. 
     61        if hasattr(markdown, 'version'): 
     62            extensions = [e for e in arg.split(",") if e] 
     63            if len(extensions) > 0 and extensions[0] == "safe": 
     64                extensions = extensions[1:] 
     65                safe_mode = True 
     66            else: 
     67                safe_mode = False 
     68            return mark_safe(force_unicode(markdown.markdown(smart_str(value), extensions, safe_mode=safe_mode))) 
     69        else: 
     70            return mark_safe(force_unicode(markdown.markdown(smart_str(value)))) 
    4471markdown.is_safe = True 
    4572 
  • django/branches/newforms-admin/django/contrib/markup/tests.py

    r6776 r6864  
    6262        rendered = t.render(Context(locals())).strip() 
    6363        if docutils: 
    64             self.assertEqual(rendered, """<p>Paragraph 1</p> 
     64            # Different versions of docutils return slightly different HTML 
     65            try: 
     66                # Docutils v0.4 and earlier 
     67                self.assertEqual(rendered, """<p>Paragraph 1</p> 
    6568<p>Paragraph 2 with a <a class="reference" href="http://www.example.com/">link</a></p>""") 
     69            except AssertionError, e: 
     70                # Docutils from SVN (which will become 0.5) 
     71                self.assertEqual(rendered, """<p>Paragraph 1</p> 
     72<p>Paragraph 2 with a <a class="reference external" href="http://www.example.com/">link</a></p>""") 
    6673        else: 
    6774            self.assertEqual(rendered, rest_content) 
  • django/branches/newforms-admin/django/contrib/sessions/backends/base.py

    r6613 r6864  
    5151        self.modified = self.modified or key in self._session 
    5252        return self._session.pop(key, *args) 
     53 
     54    def setdefault(self, key, value): 
     55        if key in self._session: 
     56            return self._session[key] 
     57        else: 
     58            self.modified = True 
     59            self._session[key] = value 
     60            return value 
    5361 
    5462    def set_test_cookie(self): 
  • django/branches/newforms-admin/django/contrib/sessions/models.py

    r6459 r6864  
    1818        pickled_md5 = md5.new(pickled + settings.SECRET_KEY).hexdigest() 
    1919        return base64.encodestring(pickled + pickled_md5) 
    20  
    21     def get_new_session_key(self): 
    22         "Returns session key that isn't being used." 
    23         # The random module is seeded when this Apache child is created. 
    24         # Use SECRET_KEY as added salt. 
    25         try: 
    26             pid = os.getpid() 
    27         except AttributeError: 
    28             # No getpid() in Jython, for example 
    29             pid = 1 
    30         while 1: 
    31             session_key = md5.new("%s%s%s%s" % (random.randint(0, sys.maxint - 1), pid, time.time(), settings.SECRET_KEY)).hexdigest() 
    32             try: 
    33                 self.get(session_key=session_key) 
    34             except self.model.DoesNotExist: 
    35                 break 
    36         return session_key 
    37  
    38     def get_new_session_object(self): 
    39         """ 
    40         Returns a new session object. 
    41         """ 
    42         # FIXME: There is a *small* chance of collision here, meaning we will 
    43         # return an existing object. That can be fixed when we add a way to 
    44         # validate (and guarantee) that non-auto primary keys are unique. For 
    45         # now, we save immediately in order to reduce the "window of 
    46         # misfortune" as much as possible. 
    47         created = False 
    48         while not created: 
    49             obj, created = self.get_or_create(session_key=self.get_new_session_key(), 
    50                     expire_date = datetime.datetime.now()) 
    51             # Collision in key generation, so re-seed the generator 
    52             random.seed() 
    53         return obj 
    5420 
    5521    def save(self, session_key, session_dict, expire_date): 
  • django/branches/newforms-admin/django/contrib/sessions/tests.py

    r6613 r6864  
    6767(True, False) 
    6868 
     69>>> s.setdefault('foo', 'bar') 
     70'bar' 
     71>>> s.setdefault('foo', 'baz') 
     72'bar' 
     73 
    6974>>> s.accessed = False  # Reset the accessed flag 
    7075 
  • django/branches/newforms-admin/django/core/cache/backends/filebased.py

    r6613 r6864  
    11"File-based cache backend" 
    22 
    3 from django.core.cache.backends.simple import CacheClass as SimpleCacheClass 
    4 from django.utils.http import urlquote_plus 
    53import os, time 
    64try: 
     
    86except ImportError: 
    97    import pickle 
     8from django.core.cache.backends.base import BaseCache 
     9from django.utils.http import urlquote_plus 
    1010 
    11 class CacheClass(SimpleCacheClass): 
     11class CacheClass(BaseCache): 
    1212    def __init__(self, dir, params): 
     13        BaseCache.__init__(self, params) 
     14         
     15        max_entries = params.get('max_entries', 300) 
     16        try: 
     17            self._max_entries = int(max_entries) 
     18        except (ValueError, TypeError): 
     19            self._max_entries = 300 
     20             
     21        cull_frequency = params.get('cull_frequency', 3) 
     22        try: 
     23            self._cull_frequency = int(cull_frequency) 
     24        except (ValueError, TypeError): 
     25            self._cull_frequency = 3 
     26             
    1327        self._dir = dir 
    1428        if not os.path.exists(self._dir): 
    1529            self._createdir() 
    16         SimpleCacheClass.__init__(self, dir, params) 
    17         del self._cache 
    18         del self._expire_info 
    1930 
    2031    def add(self, key, value, timeout=None): 
  • django/branches/newforms-admin/django/core/cache/backends/locmem.py

    r6777 r6864  
    77    import pickle 
    88 
    9 from django.core.cache.backends.simple import CacheClass as SimpleCacheClass 
     9from django.core.cache.backends.base import BaseCache 
    1010from django.utils.synch import RWLock 
    1111 
    12 class CacheClass(SimpleCacheClass): 
    13     def __init__(self, host, params): 
    14         SimpleCacheClass.__init__(self, host, params) 
     12class CacheClass(BaseCache): 
     13    def __init__(self, _, params): 
     14        BaseCache.__init__(self, params) 
     15        self._cache = {} 
     16        self._expire_info = {} 
     17 
     18        max_entries = params.get('max_entries', 300) 
     19        try: 
     20            self._max_entries = int(max_entries) 
     21        except (ValueError, TypeError): 
     22            self._max_entries = 300 
     23 
     24        cull_frequency = params.get('cull_frequency', 3) 
     25        try: 
     26            self._cull_frequency = int(cull_frequency) 
     27        except (ValueError, TypeError): 
     28            self._cull_frequency = 3 
     29 
    1530        self._lock = RWLock() 
     31 
     32    def _add(self, key, value, timeout=None): 
     33        if len(self._cache) >= self._max_entries: 
     34            self._cull() 
     35        if timeout is None: 
     36            timeout = self.default_timeout 
     37        if key not in self._cache.keys(): 
     38            self._cache[key] = value 
     39            self._expire_info[key] = time.time() + timeout 
    1640 
    1741    def add(self, key, value, timeout=None): 
     
    2044        try: 
    2145            try: 
    22                 super(CacheClass, self).add(key, pickle.dumps(value), timeout) 
     46                self._add(key, pickle.dumps(value), timeout) 
    2347            except pickle.PickleError: 
    2448                pass 
     
    5276                self._lock.writer_leaves() 
    5377 
     78    def _set(self, key, value, timeout=None): 
     79        if len(self._cache) >= self._max_entries: 
     80            self._cull() 
     81        if timeout is None: 
     82            timeout = self.default_timeout 
     83        self._cache[key] = value 
     84        self._expire_info[key] = time.time() + timeout 
     85 
    5486    def set(self, key, value, timeout=None): 
    5587        self._lock.writer_enters() 
     
    5789        try: 
    5890            try: 
    59                 super(CacheClass, self).set(key, pickle.dumps(value), timeout) 
     91                self._set(key, pickle.dumps(value), timeout) 
    6092            except pickle.PickleError: 
    6193                pass 
     
    6395            self._lock.writer_leaves() 
    6496 
     97    def has_key(self, key): 
     98        return key in self._cache 
     99 
     100    def _cull(self): 
     101        if self._cull_frequency == 0: 
     102            self._cache.clear() 
     103            self._expire_info.clear() 
     104        else: 
     105            doomed = [k for (i, k) in enumerate(self._cache) if i % self._cull_frequency == 0] 
     106            for k in doomed: 
     107                self.delete(k) 
     108 
     109    def _delete(self, key): 
     110        try: 
     111            del self._cache[key] 
     112        except KeyError: 
     113            pass 
     114        try: 
     115            del self._expire_info[key] 
     116        except KeyError: 
     117            pass 
     118 
    65119    def delete(self, key): 
    66120        self._lock.writer_enters() 
    67121        try: 
    68             SimpleCacheClass.delete(self, key) 
     122            self._delete(key) 
    69123        finally: 
    70124            self._lock.writer_leaves() 
  • django/branches/newforms-admin/django/core/cache/__init__.py

    r4265 r6864  
    2323    # name for use in settings file --> name of module in "backends" directory 
    2424    'memcached': 'memcached', 
    25     'simple': 'simple', 
    2625    'locmem': 'locmem', 
    2726    'file': 'filebased', 
    2827    'db': 'db', 
    2928    'dummy': 'dummy', 
     29} 
     30 
     31DEPRECATED_BACKENDS = { 
     32    # deprecated backend --> replacement module 
     33    'simple': 'locmem', 
    3034} 
    3135 
     
    3640    if not rest.startswith('//'): 
    3741        raise InvalidCacheBackendError, "Backend URI must start with scheme://" 
     42    if scheme in DEPRECATED_BACKENDS: 
     43        import warnings 
     44        warnings.warn("'%s' backend is deprecated. Use '%s' instead." %  
     45            (scheme, DEPRECATED_BACKENDS[scheme]), DeprecationWarning) 
     46        scheme = DEPRECATED_BACKENDS[scheme] 
    3847    if scheme not in BACKENDS: 
    3948        raise InvalidCacheBackendError, "%r is not a valid cache backend" % scheme 
  • django/branches/newforms-admin/django/core/exceptions.py

    r2809 r6864  
    44    "The requested object does not exist" 
    55    silent_variable_failure = True 
     6 
     7class MultipleObjectsReturned(Exception): 
     8    "The query returned multiple objects when only one was expected." 
     9    pass 
    610 
    711class SuspiciousOperation(Exception): 
  • django/branches/newforms-admin/django/core/handlers/base.py

    r6761 r6864  
     1import sys 
     2 
     3from django import http 
    14from django.core import signals 
    25from django.dispatch import dispatcher 
    3 from django import http 
    4 import sys 
    56 
    67class BaseHandler(object): 
  • django/branches/newforms-admin/django/core/handlers/modpython.py

    r6761 r6864  
     1import os 
     2from pprint import pformat 
     3 
     4from django import http 
     5from django.core import signals 
    16from django.core.handlers.base import BaseHandler 
    2 from django.core import signals 
    37from django.dispatch import dispatcher 
    48from django.utils import datastructures 
    59from django.utils.encoding import force_unicode 
    6 from django import http 
    7 from pprint import pformat 
    8 import os 
    910 
    1011# NOTE: do *not* import settings (or any module which eventually imports 
  • django/branches/newforms-admin/django/core/handlers/wsgi.py

    r6761 r6864  
    66    from StringIO import StringIO 
    77 
     8from django import http 
     9from django.core import signals 
    810from django.core.handlers.base import BaseHandler 
    9 from django.core import signals 
    1011from django.dispatch import dispatcher 
    1112from django.utils import datastructures 
    1213from django.utils.encoding import force_unicode 
    13 from django import http 
    1414 
    1515# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 
  • django/branches/newforms-admin/django/core/management/commands/syncdb.py

    r6342 r6864  
    3434            try: 
    3535                __import__(app_name + '.management', {}, {}, ['']) 
    36             except ImportError: 
    37                 pass 
     36            except ImportError, exc: 
     37                if not exc.args[0].startswith('No module named management'): 
     38                    raise 
    3839 
    3940        cursor = connection.cursor() 
  • django/branches/newforms-admin/django/core/management/__init__.py

    r6777 r6864  
    8585            from django.conf import settings 
    8686            apps = settings.INSTALLED_APPS 
    87         except (AttributeError, EnvironmentError): 
     87        except (AttributeError, ImportError): 
    8888            apps = [] 
    8989 
     
    100100            from django.conf import settings 
    101101            project_directory = setup_environ(__import__(settings.SETTINGS_MODULE)) 
    102         except (AttributeError, EnvironmentError, ImportError): 
     102        except (AttributeError, ImportError): 
    103103            project_directory = None 
    104104 
     
    255255    # "myproject", this code would add "/path/to/myproject" to sys.path. 
    256256    project_directory, settings_filename = os.path.split(settings_mod.__file__) 
     257    if not project_directory: 
     258        project_directory = os.getcwd() 
    257259    project_name = os.path.basename(project_directory) 
    258260    settings_name = os.path.splitext(settings_filename)[0] 
  • django/branches/newforms-admin/django/core/management/validation.py

    r6613 r6864  
    7171            # existing fields, m2m fields, m2m related objects or related objects 
    7272            if f.rel: 
     73                if f.rel.to not in models.get_models(): 
     74                    e.add(opts, "'%s' has relation with model %s, which has not been installed" % (f.name, f.rel.to)) 
     75                # it is a string and we could not find the model it refers to 
     76                # so skip the next section 
     77                if isinstance(f.rel.to, (str, unicode)): 
     78                    continue 
     79 
    7380                rel_opts = f.rel.to._meta 
    74                 if f.rel.to not in models.get_models(): 
    75