From 10acea4efd7b3a4b36ebab407eb799fcb6374ac9 Mon Sep 17 00:00:00 2001 From: Guilherme Danno Date: Sun, 17 Apr 2016 22:17:56 -0300 Subject: [PATCH] Remove json monkey-patching and use encoder subclassing --- beetsplug/export.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/beetsplug/export.py b/beetsplug/export.py index 46776354f..379bb708e 100644 --- a/beetsplug/export.py +++ b/beetsplug/export.py @@ -27,9 +27,13 @@ from beets import ui from beets import mediafile from beetsplug.info import make_key_filter, library_data, tag_data -json.JSONEncoder.default = lambda self, obj: \ - (obj.isoformat() if isinstance(obj, datetime) or isinstance(obj, date) - else None) + +class ExportEncoder(json.JSONEncoder): + """Deals with dates because JSON doesn't have a standard""" + def default(self, o): + if isinstance(o, datetime) or isinstance(o, date): + return o.isoformat() + return json.JSONEncoder.default(self, o) class ExportPlugin(BeetsPlugin): @@ -130,7 +134,7 @@ class JsonPrintFormat(ExportFormat): """Outputs to the console""" def export(self, data, **kwargs): - json.dump(data, sys.stdout, **kwargs) + json.dump(data, sys.stdout, cls=ExportEncoder, **kwargs) class JsonFileFormat(ExportFormat): @@ -143,4 +147,4 @@ class JsonFileFormat(ExportFormat): def export(self, data, **kwargs): with codecs.open(self.path, self.mode, self.encoding) as f: - json.dump(data, f, **kwargs) + json.dump(data, f, cls=ExportEncoder, **kwargs)