0 votes

Django/App Engine/Python 2.5 : le paramètre par défaut __new__ ne prend aucun paramètre

Nouveau sur App Engine et Django. Je pense que c'est un problème avec mon installation de django, qui est 1.1.1, mais j'ai aussi lu que je peux simplement utiliser le django packagé avec le SDK de l'app engine.

Toute aide sur la raison pour laquelle j'obtiens cette erreur lorsque je teste localement serait grandement appréciée.

Le rappel :

Variable Value
callback 
<class 'ourlat.main.views.SettingsPage'>
callback_args 
()
callback_kwargs 
{}
e 
TypeError('default __new__ takes no parameters',)
exc_info 
(<type 'exceptions.TypeError'>, TypeError('default __new__ takes no parameters',), <traceback object at 0x02201B48>)
exceptions 
<module 'django.core.exceptions' from 'C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\exceptions.pyc'>
middleware_method 
<bound method CommonMiddleware.process_request of <django.middleware.common.CommonMiddleware object at 0x021F5170>>
receivers 
[(<function _rollback_on_exception at 0x02063730>, None)]
request 
<WSGIRequest GET:<QueryDict: {}>, POST:<QueryDict: {}>, COOKIES:{}, META:{'APPLICATION_ID': 'ourlat', 'AUTH_DOMAIN': 'gmail.com', 'CONTENT_LENGTH': '', 'CONTENT_TYPE': 'application/x-www-form-urlencoded', 'CURRENT_VERSION_ID': '1.1', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT': 'application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'HTTP_ACCEPT_LANGUAGE': 'en-US,en;q=0.8', 'HTTP_CACHE_CONTROL': 'max-age=0', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_HOST': 'localhost:8080', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.1 (KHTML, like Gecko) Chrome/5.0.335.1 Safari/533.1', 'PATH_INFO': u'/', 'PATH_TRANSLATED': 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\main.py', 'QUERY_STRING': '', 'REMOTE_ADDR': '127.0.0.1', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': u'', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8080', 'SERVER_PROTOCOL': 'HTTP/1.0', 'SERVER_SOFTWARE': 'Development/1.0', 'TZ': 'UTC', 'USER_EMAIL': '', 'USER_ID': '', 'USER_ORGANIZATION': '', 'wsgi.errors': <open file '<stderr>', mode 'w' at 0x00B1F0B0>, 'wsgi.input': <cStringIO.StringI object at 0x022A0260>, 'wsgi.multiprocess': False, 'wsgi.multithread': False, 'wsgi.run_once': True, 'wsgi.url_scheme': 'http', 'wsgi.version': (1, 0)}>
resolver 
<RegexURLResolver urls (None:None) ^/>
response 
None
self 
<django.core.handlers.wsgi.WSGIHandler object at 0x021F5790>
settings 
<django.conf.LazySettings object at 0x01E997B0>
urlconf 
'urls'
urlresolvers 
<module 'django.core.urlresolvers' from 'C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\urlresolvers.pyc'>

L'erreur :

TypeError at /
default __new__ takes no parameters
Request Method: GET
Request URL: http://localhost:8080/
Exception Type: TypeError
Exception Value: 
default __new__ takes no parameters
Exception Location: C:\Documents and Settings\Jeremy Gordon\eclipse-workspace\ourlat\django\core\handlers\base.py in get_response, line 92
Python Executable: C:\Python25\python.exe
Python Version: 2.5.0
Python Path: ['C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Program Files\\Google\\google_appengine\\lib\\antlr3', 'C:\\Program Files\\Google\\google_appengine\\lib\\django', 'C:\\Program Files\\Google\\google_appengine\\lib\\ipaddr', 'C:\\Program Files\\Google\\google_appengine\\lib\\webob', 'C:\\Program Files\\Google\\google_appengine\\lib\\yaml\\lib', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Python25\\lib\\site-packages\\beautifulsoup-3.1.0.1-py2.5.egg', 'C:\\Python25\\lib\\site-packages\\django-1.1.1-py2.5.egg', 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\ourlat', 'C:\\Program Files\\Google\\google_appengine', 'C:\\Program Files\\Google\\google_appengine\\lib\\webob', 'C:\\Program Files\\Google\\google_appengine\\lib\\yaml', 'C:\\Program Files\\Google\\google_appengine\\lib', 'C:\\Program Files\\Google\\google_appengine\\lib\\simplejson-2.0.9', 'C:\\Program Files\\Google\\google_appengine\\lib\\geopy', 'C:\\Program Files\\Google\\google_appengine\\lib\\BeautifulSoup-3.0.8', 'C:\\Documents and Settings\\Jeremy Gordon\\eclipse-workspace\\ourlat\\django', 'C:\\Python25', 'C:\\Python25\\DLLs', 'C:\\Python25\\lib', 'C:\\Python25\\lib\\lib-tk', 'C:\\Python25\\lib\\plat-win', 'C:\\Python25\\lib\\site-packages', 'C:\\Python25\\lib\\site-packages\\setuptools-0.6c7-py2.5.egg', 'C:\\Python25\\lib\\site-packages\\simplejson-2.0.9-py2.5.egg', 'C:\\Python25\\Lib\\site-packages\\geopy-0.93dev_r0-py2.5.egg', 'C:\\WINDOWS\\system32\\python25.zip']
Server time: Sat, 6 Mar 2010 01:18:27 +0000

Source de la page des paramètres

class SettingsPage(webapp.RequestHandler):
    def get(self):
        if users.get_current_user():
            url = users.create_logout_url(self.request.uri)
            url_linktext = 'Logout'
            account_query = OLAccount.all().filter('owner =',users.get_current_user())
            if account_query.count() < 1:
                thisuser = OLAccount(owner = users.get_current_user())
                thisuser.put()
            else:
                thisuser = account_query.fetch(1)[0]

            tracks = [db.get(key) for key in thisuser.track_keys] 
            template_values = {
                'url': url,
                'url_linktext': url_linktext,
                'thisuser': thisuser,
                'tracks': tracks
                }

            path = os.path.join(os.path.dirname(__file__), 'html/settings.html')
            self.response.out.write(template.render(path, template_values))
        else:
            self.redirect(users.create_login_url(self.request.uri))

2voto

Alex Martelli Points 330805

Il semble que vous ayez sous-classé (au moins une fois) une classe de vue Django avec une classe __init__ (mais pas un __new__ ) avec une signature non standard. Si vous cliquez sur le triangle vers le début de ce message (dans votre propre environnement -- le clic ne fonctionne pas sur ce msg copié/collé en SO, bien sûr;-) vous devriez voir les variables locales, y compris par exemple la variable callback qui est la vue que vous essayez d'appeler (vient de votre résolveur d'URL, voir la source à la ligne 68) -- cette information aidera à poursuivre le débogage.

Editar : il semble que le problème soit que vous mélangez les résolveurs d'url de Django (qui attendent des appelables Django-id, en prenant la requête comme argument) avec une sous-classe de l'outil de résolution d'url de Google. webapp.RequestHandler (qui ne prend pas d'arguments dans __init__ ) : ne faites pas ça. Utilisez app.yaml pour choisir ce que .py script gère les requêtes vers chaque groupe de chemins dans votre application, et dans chaque .py script utiliser uniquement Django ou uniquement webapp -- pas de mélange.

BTW, le Django qui est livré avec le SDK du moteur d'application est 0.96, comme celui par défaut sur les serveurs de google ; mais sur les serveurs de google vous pouvez facilement passer à des versions plus modernes de django avec utilisation_bibliothèque alors que vous ne pouvez pas le faire avec votre SDK, c'est-à-dire sans installer votre propre django en local, etc. Voir la page que je viens de vous indiquer et les liens qui s'y trouvent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X