Opened 12 years ago
Closed 12 years ago
#655 closed defect (fixed)
Mediagoblin gives an error when trying to add an item to an existing collection
Reported by: | sazius | Owned by: | Elrond |
---|---|---|---|
Priority: | critical | Milestone: | 0.3.3 |
Component: | programming | Keywords: | |
Cc: | Christopher Allan Webber | Parent Tickets: |
Description
Go to an existing item, select "Add to a collection", pick an existing collection from the drop down menu, press "Add" => sad goblin appears.
Running with lazyserver to get more informative error message I get (two CRITICA rows added according to pythonsnake's suggestion for added debugging info):
Starting server in PID 32700. serving on 0.0.0.0:6543 view at http://127.0.0.1:6543 2013-03-10 14:13:40,638 CRITICA [mediagoblin.user_pages.views] <class 'mediagoblin.db.models.Collection'> 2013-03-10 14:13:40,638 CRITICA [mediagoblin.user_pages.views] <type 'int'> Error - <class 'sqlalchemy.exc.InterfaceError'>: (InterfaceError) Error binding parameter 0 - probably unsupported type. u'SELECT core__collections.id AS core__collections_id, core__collections.title AS core__collections_title, core__collections.slug AS core__collections_slug, core__collections.created AS core__collections_created, core__collections.description AS core__collections_description, core__collections.creator AS core__collections_creator, core__collections.items AS core__collections_items \nFROM core__collections \nWHERE core__collections.id = ? AND core__collections.creator = ?\n LIMIT ? OFFSET ?' (<mediagoblin.db.models.Collection object at 0x2b81910>, 1, 1, 0) URL: http://saz.im:6543/u/sazius/m/58/collect/ File '/var/www/mediagoblin/lib/python2.6/site-packages/Paste-1.7.5.1-py2.6.egg/paste/exceptions/errormiddleware.py', line 144 in __call__ app_iter = self.application(environ, sr_checker) File '/var/www/mediagoblin/lib/python2.6/site-packages/Paste-1.7.5.1-py2.6.egg/paste/urlmap.py', line 203 in __call__ return app(environ, start_response) File '/var/www/mediagoblin/lib/python2.6/site-packages/Beaker-1.6.4-py2.6.egg/beaker/middleware.py', line 155 in __call__ return self.wrap_app(environ, session_start_response) File '/var/www/mediagoblin/mediagoblin/app.py', line 236 in __call__ return self.call_backend(environ, start_response) File '/var/www/mediagoblin/mediagoblin/app.py', line 216 in call_backend response = controller(request) File '/var/www/mediagoblin/mediagoblin/decorators.py', line 224 in wrapper return controller(request, media=media, *args, **kwargs) File '/var/www/mediagoblin/mediagoblin/decorators.py', line 48 in new_controller_func return controller(request, *args, **kwargs) File '/var/www/mediagoblin/mediagoblin/user_pages/views.py', line 232 in media_collect creator=request.user.id).first() File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py', line 2181 in first ret = list(self[0:1]) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py', line 2048 in __getitem__ return list(res) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py', line 2252 in __iter__ return self._execute_and_instances(context) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/orm/query.py', line 2267 in _execute_and_instances result = conn.execute(querycontext.statement, self._params) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py', line 664 in execute params) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py', line 764 in _execute_clauseelement compiled_sql, distilled_params File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py', line 878 in _execute_context context) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/base.py', line 871 in _execute_context context) File '/var/www/mediagoblin/lib/python2.6/site-packages/SQLAlchemy-0.8.0-py2.6-linux-x86_64.egg/sqlalchemy/engine/default.py', line 320 in do_execute cursor.execute(statement, parameters) InterfaceError: (InterfaceError) Error binding parameter 0 - probably unsupported type. u'SELECT core__collections.id AS core__collections_id, core__collections.title AS core__collections_title, core__collections.slug AS core__collections_slug, core__collections.created AS core__collections_created, core__collections.description AS core__collections_description, core__collections.creator AS core__collections_creator, core__collections.items AS core__collections_items \nFROM core__collections \nWHERE core__collections.id = ? AND core__collections.creator = ?\n LIMIT ? OFFSET ?' (<mediagoblin.db.models.Collection object at 0x2b81910>, 1, 1, 0) CGI Variables ------------- CONTENT_LENGTH: '676' CONTENT_TYPE: 'multipart/form-data; boundary=---------------------------145476651317241088371037342262' CSRF_TOKEN: u'14123432470749457721' HTTP_ACCEPT: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' HTTP_ACCEPT_ENCODING: 'gzip, deflate' HTTP_ACCEPT_LANGUAGE: 'en,en-gb;q=0.8,sv-fi;q=0.6,sv;q=0.4,fi;q=0.2' HTTP_CONNECTION: 'keep-alive' HTTP_COOKIE: 'mediagoblin_csrftoken=14123432470749457721; mediagoblin_csrftoken=14123432470749457721; mediagoblin=c096c3693b3d407a8586a3c412afb3b9' HTTP_DNT: '1' HTTP_HOST: 'saz.im:6543' HTTP_REFERER: 'http://saz.im:6543/u/sazius/m/58/collect/' HTTP_USER_AGENT: 'Mozilla/5.0 (X11; Linux x86_64; rv:10.0.12) Gecko/20100101 Firefox/10.0.12 Iceweasel/10.0.12' PATH_INFO: '/u/sazius/m/58/collect/' REMOTE_ADDR: '82.181.107.174' REQUEST_METHOD: 'POST' SERVER_NAME: '0.0.0.0' SERVER_PORT: '6543' SERVER_PROTOCOL: 'HTTP/1.1' WSGI Variables -------------- application: {(None, ''): <beaker.middleware.SessionMiddleware object at 0x27efdd0>, (None, '/mgoblin_static'): <StaticURLParser '/var/www/mediagoblin/mediagoblin/static'>, (None, '/mgoblin_media'): <StaticURLParser '/var/www/mediagoblin/user_dev/media/public'>, (None, '/theme_static'): <StaticURLParser '/var/www/mediagoblin/user_dev/theme_static'>} beaker.get_session: <bound method SessionMiddleware._get_session of <beaker.middleware.SessionMiddleware object at 0x27efdd0>> beaker.session: {'_accessed_time': 1362921220.6312571, 'user_id': u'1', '_creation_time': 1362921214.262624} paste.httpserver.thread_pool: <paste.httpserver.ThreadPool object at 0xc43d50> paste.throw_errors: True werkzeug.request: <Request 'http://saz.im:6543/u/sazius/m/58/collect/' [POST]> wsgi process: 'Multithreaded' ------------------------------------------------------------
After discussions in irc with pythonsnake this fix was tried and seemed to fix at least this problem:
diff --git a/mediagoblin/user_pages/views.py b/mediagoblin/user_pages/views.py index dc56208..0036ded 100644 --- a/mediagoblin/user_pages/views.py +++ b/mediagoblin/user_pages/views.py @@ -227,7 +227,7 @@ def media_collect(request, media): # Otherwise, use the collection selected from the drop-down else: collection = Collection.query.filter_by( - id=form.collection.data, + id=form.collection.data.id, creator=request.user.id).first() # Make sure the user actually selected a collection
Change History (3)
comment:1 by , 12 years ago
Cc: | added |
---|---|
Milestone: | → 0.3.3 |
Owner: | set to |
Status: | new → accepted |
comment:3 by , 12 years ago
Resolution: | → fixed |
---|---|
Status: | accepted → closed |
Should be fixed in e9330b9552858d46783971e8624ccc5ac80cfe46
.
The problem is:
X = form.collection.data
This works nicely for the completely empty form (X = None
). It does not work for a selected collection, because X will be the collection, not its id.X = request.form.get('collection')
(old code). This one works mostly, except for the completely empty form on postgres, because in this caseX = u"__None"
and postgres does not like comparing an integer column with a string.Suggested fix: