diff --git a/beetsplug/export.py b/beetsplug/export.py index 0666747b2..63939f7e4 100644 --- a/beetsplug/export.py +++ b/beetsplug/export.py @@ -42,6 +42,9 @@ class ExportPlugin(BeetsPlugin): def __init__(self): super(ExportPlugin, self).__init__() + # Used when testing export plugin + self.run_results = None + self.export_format = None self.config.add({ 'default_format': 'json', @@ -68,7 +71,7 @@ class ExportPlugin(BeetsPlugin): 'formatting': { 'ensure_ascii': False, 'indent': 4, - 'separators': (''), + 'separators': ('>'), 'sort_keys': True } } @@ -105,13 +108,12 @@ class ExportPlugin(BeetsPlugin): return [cmd] def run(self, lib, opts, args): - file_path = opts.output file_mode = 'a' if opts.append else 'w' file_format = opts.format format_options = self.config[file_format]['formatting'].get(dict) - export_format = ExportFormat.factory( + self.export_format = ExportFormat.factory( file_type=file_format, **{ 'file_path': file_path, @@ -135,7 +137,9 @@ class ExportPlugin(BeetsPlugin): continue data = key_filter(data) items += [data] - export_format.export(items, **format_options) + + self.run_results = items + self.export_format.export(self.run_results, **format_options) class ExportFormat(object): @@ -144,6 +148,8 @@ class ExportFormat(object): self.path = file_path self.mode = file_mode self.encoding = encoding + # Used for testing + self.results = None @classmethod def factory(cls, file_type, **kwargs): @@ -167,11 +173,13 @@ class JsonFormat(ExportFormat): self.export = self.export_to_file if self.path else self.export_to_terminal def export_to_terminal(self, data, **kwargs): - json.dump(data, sys.stdout, cls=ExportEncoder, **kwargs) + r = json.dump(data, sys.stdout, cls=ExportEncoder, **kwargs) + self.results = str(r) def export_to_file(self, data, **kwargs): with codecs.open(self.path, self.mode, self.encoding) as f: - json.dump(data, f, cls=ExportEncoder, **kwargs) + r = json.dump(data, f, cls=ExportEncoder, **kwargs) + self.results = str(r) class CSVFormat(ExportFormat): @@ -192,12 +200,15 @@ class CSVFormat(ExportFormat): writer = csv.DictWriter(sys.stdout, fieldnames=self.header) writer.writeheader() writer.writerows(data) + self.results = str(writer) + def export_to_file(self, data, **kwargs): with codecs.open(self.path, self.mode, self.encoding) as f: writer = csv.DictWriter(f, fieldnames=self.header) writer.writeheader() writer.writerows(data) + self.results = str(writer) class XMLFormat(ExportFormat): @@ -233,7 +244,9 @@ class XMLFormat(ExportFormat): def export_to_terminal(self, data, **kwargs): print(data) + self.results = str(data) def export_to_file(self, data, **kwargs): with codecs.open(self.path, self.mode, self.encoding) as f: - f.write(data) \ No newline at end of file + f.write(data) + self.results = str(data) \ No newline at end of file