From 3ce67e439e5e72e9d8e284f91fdfd4a07d877787 Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Tue, 2 May 2017 14:30:22 -0500 Subject: [PATCH 1/3] API Change repr name for table schema Not API breaking, since pandas 0.20.0 hasn't been released yet. --- pandas/core/config_init.py | 2 +- pandas/core/generic.py | 2 +- pandas/tests/io/formats/test_printing.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pandas/core/config_init.py b/pandas/core/config_init.py index 81fb8090a7afe..ed28b75ff1085 100644 --- a/pandas/core/config_init.py +++ b/pandas/core/config_init.py @@ -362,7 +362,7 @@ def table_schema_cb(key): from IPython.core.formatters import BaseFormatter class TableSchemaFormatter(BaseFormatter): - print_method = '_repr_table_schema_' + print_method = '_repr_data_resource_' _return_type = (dict,) # register it: formatters[mimetype] = TableSchemaFormatter() diff --git a/pandas/core/generic.py b/pandas/core/generic.py index b3498583f6e14..2bc64795b5f20 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -129,7 +129,7 @@ def __init__(self, data, axes=None, copy=False, dtype=None, object.__setattr__(self, '_data', data) object.__setattr__(self, '_item_cache', {}) - def _repr_table_schema_(self): + def _repr_data_resource_(self): """ Not a real Jupyter special repr method, but we use the same naming convention. diff --git a/pandas/tests/io/formats/test_printing.py b/pandas/tests/io/formats/test_printing.py index 3acd5c7a5e8c5..1aeb28783c3e3 100644 --- a/pandas/tests/io/formats/test_printing.py +++ b/pandas/tests/io/formats/test_printing.py @@ -180,14 +180,14 @@ def test_publishes_not_implemented(self): def test_config_on(self): df = pd.DataFrame({"A": [1, 2]}) with pd.option_context("display.html.table_schema", True): - result = df._repr_table_schema_() + result = df._repr_data_resource_() assert result is not None def test_config_default_off(self): df = pd.DataFrame({"A": [1, 2]}) with pd.option_context("display.html.table_schema", False): - result = df._repr_table_schema_() + result = df._repr_data_resource_() assert result is None From e27619de2efa7b8f95edaf5900b173ef4702093f Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Wed, 3 May 2017 06:57:48 -0500 Subject: [PATCH 2/3] REF: Move Formatter to printing --- pandas/core/config_init.py | 32 ++---------------------- pandas/io/formats/printing.py | 32 ++++++++++++++++++++++++ pandas/tests/io/formats/test_printing.py | 6 +---- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/pandas/core/config_init.py b/pandas/core/config_init.py index ed28b75ff1085..5f046123c648a 100644 --- a/pandas/core/config_init.py +++ b/pandas/core/config_init.py @@ -342,36 +342,8 @@ def mpl_style_cb(key): def table_schema_cb(key): - # first, check if we are in IPython - if 'IPython' not in sys.modules: - # definitely not in IPython - return - from IPython import get_ipython - ip = get_ipython() - if ip is None: - # still not in IPython - return - - formatters = ip.display_formatter.formatters - - mimetype = "application/vnd.dataresource+json" - - if cf.get_option(key): - if mimetype not in formatters: - # define tableschema formatter - from IPython.core.formatters import BaseFormatter - - class TableSchemaFormatter(BaseFormatter): - print_method = '_repr_data_resource_' - _return_type = (dict,) - # register it: - formatters[mimetype] = TableSchemaFormatter() - # enable it if it's been disabled: - formatters[mimetype].enabled = True - else: - # unregister tableschema mime-type - if mimetype in formatters: - formatters[mimetype].enabled = False + from pandas.io.formats.printing import _enable_data_resource_formatter + _enable_data_resource_formatter(cf.get_option(key)) with cf.config_prefix('display'): diff --git a/pandas/io/formats/printing.py b/pandas/io/formats/printing.py index 5ea47df2c817f..cbad603630bd3 100644 --- a/pandas/io/formats/printing.py +++ b/pandas/io/formats/printing.py @@ -2,6 +2,7 @@ printing tools """ +import sys from pandas.core.dtypes.inference import is_sequence from pandas import compat from pandas.compat import u @@ -233,3 +234,34 @@ def as_escaped_unicode(thing, escape_chars=escape_chars): def pprint_thing_encoded(object, encoding='utf-8', errors='replace', **kwds): value = pprint_thing(object) # get unicode representation of object return value.encode(encoding, errors, **kwds) + + +def _enable_data_resource_formatter(enable): + if 'IPython' not in sys.modules: + # definitely not in IPython + return + from IPython import get_ipython + ip = get_ipython() + if ip is None: + # still not in IPython + return + + formatters = ip.display_formatter.formatters + mimetype = "application/vnd.dataresource+json" + + if enable: + if mimetype not in formatters: + # define tableschema formatter + from IPython.core.formatters import BaseFormatter + + class TableSchemaFormatter(BaseFormatter): + print_method = '_repr_data_resource_' + _return_type = (dict,) + # register it: + formatters[mimetype] = TableSchemaFormatter() + # enable it if it's been disabled: + formatters[mimetype].enabled = True + else: + # unregister tableschema mime-type + if mimetype in formatters: + formatters[mimetype].enabled = False diff --git a/pandas/tests/io/formats/test_printing.py b/pandas/tests/io/formats/test_printing.py index 1aeb28783c3e3..44fbd5a958d8c 100644 --- a/pandas/tests/io/formats/test_printing.py +++ b/pandas/tests/io/formats/test_printing.py @@ -191,12 +191,8 @@ def test_config_default_off(self): assert result is None - def test_config_monkeypatches(self): + def test_enable_data_resource_formatter(self): # GH 10491 - df = pd.DataFrame({"A": [1, 2]}) - assert not hasattr(df, '_ipython_display_') - assert not hasattr(df['A'], '_ipython_display_') - formatters = self.display_formatter.formatters mimetype = 'application/vnd.dataresource+json' From 529ada4a6a04e4b9855dd5a446be23beacd7539f Mon Sep 17 00:00:00 2001 From: Tom Augspurger Date: Wed, 3 May 2017 10:48:56 -0500 Subject: [PATCH 3/3] pep8 --- pandas/core/config_init.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/core/config_init.py b/pandas/core/config_init.py index 5f046123c648a..7e6ffaaffb72b 100644 --- a/pandas/core/config_init.py +++ b/pandas/core/config_init.py @@ -9,7 +9,6 @@ module is imported, register them here rather then in the module. """ -import sys import warnings import pandas.core.config as cf