newslynx / opportunities

A garden of NewsLynx futures
1 stars 0 forks source link

Error PUTing a list to user settings value #161

Closed mhkeller closed 8 years ago

mhkeller commented 8 years ago

I'm updating the user setting at /api/v1/me/settings/select-dimensions which currently looks like this

{
  "user_id": 1,
  "name": "select-dimensions",
  "level": "me",
  "org_id": 1,
  "value": [
    {
      "kind": "text",
      "name": "title"
    },
    {
      "kind": "date",
      "name": "created"
    },
    {
      "kind": "metric",
      "name": "ga_pageviews"
    },
    {
      "kind": "metric",
      "name": "twitter_shares"
    },
    {
      "kind": "metric",
      "name": "facebook_likes"
    },
    {
      "kind": "metric",
      "name": "facebook_shares"
    },
    {
      "kind": "metric",
      "name": "facebook_comments"
    },
    {
      "kind": "bars",
      "name": "subject_tags"
    }
  ],
  "json_value": true,
  "id": 3
}

with a new the same list of items for value except one field for impact_tags

I get the following error:

23:57:00 | newslynx.core-1423 | Exception on /api/v1/me/settings/select-dimensions [PUT]
Traceback (most recent call last):
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/newslynx/views/decorators.py", line 35, in decorated_function
    return f(*args, **kw)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/newslynx/views/decorators.py", line 75, in decorated_function
    return f(*args, **kw)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/newslynx/views/api/settings_api.py", line 169, in update_setting
    db.session.commit()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/scoping.py", line 150, in do
    return getattr(self.registry(), name)(*args, **kwargs)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 790, in commit
    self.transaction.commit()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 392, in commit
    self._prepare_impl()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 372, in _prepare_impl
    self.session.flush()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2004, in flush
    self._flush(objects)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2122, in _flush
    transaction.rollback(_capture_exception=True)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/util/langhelpers.py", line 60, in __exit__
    compat.reraise(exc_type, exc_value, exc_tb)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/session.py", line 2086, in _flush
    flush_context.execute()
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 373, in execute
    rec.execute(self)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/unitofwork.py", line 532, in execute
    uow
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 170, in save_obj
    mapper, table, update)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/orm/persistence.py", line 692, in _emit_update_statements
    execute(statement, multiparams)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 914, in execute
    return meth(self, multiparams, params)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/sql/elements.py", line 323, in _execute_on_connection
    return connection._execute_clauseelement(self, multiparams, params)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1010, in _execute_clauseelement
    compiled_sql, distilled_params
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
    context)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    exc_info
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/Users/mike/.virtualenvs/nll/lib/python2.7/site-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    cursor.execute(statement, parameters)
ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'dict' [SQL: 'UPDATE org_settings SET value=%(value)s WHERE org_settings.id = %(org_settings_id)s'] [parameters: {'org_settings_id': 3, 'value': [{u'kind': u'text', u'name': u'title'}, {u'kind': u'date', u'name': u'created'}, {u'kind': u'metric', u'name': u'ga_pageviews'}, {u'kind': u'metric', u'name': u'twitter_shares'}, {u'kind': u'metric', u'name': u'facebook_likes'}, {u'kind': u'metric', u'name': u'facebook_shares'}, {u'kind': u'metric', u'name': u'facebook_comments'}, {u'kind': u'bars', u'name': u'subject_tags'}, {u'kind': u'bars', u'name': u'impact_tags'}]}]
abelsonlive commented 8 years ago

I can't reproduce. If I save the file above as s.json and run this curl command, it works:

curl -X POST -H 'Content-Type:application/json' --data-binary @s.json \
http://localhost:5000/api/v1/me/settings\?apikey=<apikey>\&org=2
abelsonlive commented 8 years ago

whups it's an update. got it.

abelsonlive commented 8 years ago

testing with:

curl -X PUT -H 'Content-Type:application/json' --data-binary @s.json \
http://localhost:5000/api/v1/me/settings/select-dimensions\?apikey=<apikey>\&org=2
abelsonlive commented 8 years ago

testing on prod.