ipython / ipython/ipykernel

ValueError: Can't clean for JSON: datetime.time(10, 0)

Aberta
#546 0 comentários 4 reações 0 responsáveis Ver no GitHub
Linguagem predominante
Python
Estrelas
734
Forks
412
Merge médio
1d 5h
PRs com merge (30d)
8

Descrição

Hi there!

I'm on `ipykernel==5.3.4`

I'm adding a custom mimebundle formatter to ipython for pandas dataframes, and I'm getting an error in the `jsonutil.py` `json_clean`. Here's my minimum reproduction example:

```python
from IPython import get_ipython
import datetime
import pandas as pd

def dataframe_formatter(df):
return { 'application/the21st': { 'rows': [{'datetime': datetime.time(10, 0) }]} }

get_ipython().display_formatter.mimebundle_formatter.for_type(pd.DataFrame, dataframe_formatter)
```

Displaying any dataframe in jupyter then produces an error with stack trace:

stack trace

```
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in
---> 1 df

/opt/venv/lib/python3.7/site-packages/IPython/core/displayhook.py in __call__(self, result)
264 self.fill_exec_result(result)
265 if format_dict:
--> 266 self.write_format_data(format_dict, md_dict)
267 self.log_output(format_dict)
268 self.finish_displayhook()

/opt/venv/lib/python3.7/site-packages/ipykernel/displayhook.py in write_format_data(self, format_dict, md_dict)
69
70 def write_format_data(self, format_dict, md_dict=None):
---> 71 self.msg['content']['data'] = json_clean(encode_images(format_dict))
72 self.msg['content']['metadata'] = md_dict
73

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
175
176 if isinstance(obj, list):
--> 177 return [json_clean(x) for x in obj]
178
179 if isinstance(obj, dict):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in (.0)
175
176 if isinstance(obj, list):
--> 177 return [json_clean(x) for x in obj]
178
179 if isinstance(obj, dict):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
189 out = {}
190 for k,v in iteritems(obj):
--> 191 out[unicode_type(k)] = json_clean(v)
192 return out
193 if isinstance(obj, datetime):

/opt/venv/lib/python3.7/site-packages/ipykernel/jsonutil.py in json_clean(obj)
195
196 # we don't understand it, it's probably an unserializable object
--> 197 raise ValueError("Can't clean for JSON: %r" % obj)

ValueError: Can't clean for JSON: datetime.time(10, 0)
```

Guia de contribuição

Abrir o guia de contribuição

Direção de pesquisa

Start in ipykernel/jsonutil.py at json_clean and reproduce the issue with the custom mimebundle formatter shown in the report. Check how datetime values are handled and verify that the datetime.time value no longer raises the reported JSON-cleaning error.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
jupyter, python
Domínio
backend
Tipo de issue
Bug
Dificuldade
2/5
Tempo estimado
1-3 horas
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
50/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.