Hi Dannon,

I got this error with a detail view (/api/quotas/f597429621d6eb2b) when the quota has associated users with a disk usage different of 0, total_disk_usage in the user dictionary is a Decimal object and is not serializable. I worked on it this afternoon, it's possible to correct it just by adding the key 'total_disk_usage' in the value_mapper of the show method of QuotaAPIController class like the show method of UserAPIController class.
I join a patch for the quota.py file with this email
I can propose a pull request if you want.


Best,

--
Fabien Mareuil | Centre d'Informatique pour la Biologie
fabien.mare...@pasteur.fr <mailto:fabien.mare...@pasteur.fr> | Institut Pasteur
25,28 rue du Docteur Roux 75015 Paris, France



Le 08/03/2016 16:24, Dannon Baker a écrit :
Hi Fabien,

I'm having trouble reproducing this error on my side. In the trace it looks like the error is being thrown at the collection view (/api/quotas) and not the detail view (/api/quotas/f597429621d6eb2b or the like). Is that true?

Can you show me the exact configuration of this quota in the admin panel?

On Tue, Mar 8, 2016 at 8:10 AM, Fabien Mareuil <fmare...@pasteur.fr <mailto:fmare...@pasteur.fr>> wrote:

    Hi,

    We got an error when we used API to see a quota detail, we get the
    following traceback:

    157.99.60.167 - - [08/Mar/2016:10:13:58 +0200] "GET /api/quotas
    HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
    rv:44.0) Gecko/20100101 Firefox/44.0"
    galaxy.web.framework.decorators ERROR 2016-03-08 10:14:10,273
    Uncaught exception in exposed API method:
    Traceback (most recent call last):
      File ".../lib/galaxy/web/framework/decorators.py", line 142, in
    decorator
        rval = dumps( rval, indent=4, sort_keys=True )
      File ".../lib/galaxy/util/json.py", line 65, in safe_dumps
        dumped = json.dumps( *args, allow_nan=False, **kwargs )
      File "/usr/lib64/python2.6/json/__init__.py", line 237, in dumps
        **kw).encode(obj)
      File "/usr/lib64/python2.6/json/encoder.py", line 367, in encode
        chunks = list(self.iterencode(o))
      File "/usr/lib64/python2.6/json/encoder.py", line 309, in
    _iterencode
        for chunk in self._iterencode_dict(o, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 275, in
    _iterencode_dict
        for chunk in self._iterencode(value, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 306, in
    _iterencode
        for chunk in self._iterencode_list(o, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 204, in
    _iterencode_list
        for chunk in self._iterencode(value, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 309, in
    _iterencode
        for chunk in self._iterencode_dict(o, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 275, in
    _iterencode_dict
        for chunk in self._iterencode(value, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 309, in
    _iterencode
        for chunk in self._iterencode_dict(o, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 275, in
    _iterencode_dict
        for chunk in self._iterencode(value, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 317, in
    _iterencode
        for chunk in self._iterencode_default(o, markers):
      File "/usr/lib64/python2.6/json/encoder.py", line 323, in
    _iterencode_default
        newobj = self.default(o)
      File "/usr/lib64/python2.6/json/encoder.py", line 344, in default
        raise TypeError(repr(o) + " is not JSON serializable")
    TypeError: Decimal('856488698767') is not JSON serializable

    json can't serialize Decimal object.
    I tested it with simplejson and it works.
    An other solution is to convert the Decimal object to a float
    before the dumps.

    Thanks a lot for your help
    Best regards,

-- Fabien Mareuil | Centre d'Informatique pour la Biologie
    fabien.mare...@pasteur.fr <mailto:fabien.mare...@pasteur.fr> |
    Institut Pasteur
    25,28 rue du Docteur Roux 75015 Paris, France


    ___________________________________________________________
    Please keep all replies on the list by using "reply all"
    in your mail client.  To manage your subscriptions to this
    and other Galaxy lists, please use the interface at:
    https://lists.galaxyproject.org/

    To search Galaxy mailing lists use the unified search at:
    http://galaxyproject.org/search/mailinglists/



--- lib/galaxy/webapps/galaxy/api/quotas_orig.py	2016-03-08 17:27:03.235186824 +0100
+++ lib/galaxy/webapps/galaxy/api/quotas.py	2016-03-08 17:27:53.339187785 +0100
@@ -50,7 +50,7 @@
         Displays information about a quota.
         """
         quota = self.get_quota( trans, id, deleted=util.string_as_bool( deleted ) )
-        return quota.to_dict( view='element', value_mapper={ 'id': trans.security.encode_id } )
+        return quota.to_dict( view='element', value_mapper={ 'id': trans.security.encode_id, 'total_disk_usage': float } )
 
     @web.expose_api
     @web.require_admin
___________________________________________________________
Please keep all replies on the list by using "reply all"
in your mail client.  To manage your subscriptions to this
and other Galaxy lists, please use the interface at:
  https://lists.galaxyproject.org/

To search Galaxy mailing lists use the unified search at:
  http://galaxyproject.org/search/mailinglists/

Reply via email to