mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +01:00
Aligned export related code with flake8 standards
This commit is contained in:
parent
ec705fae1e
commit
fa2c9ba259
2 changed files with 31 additions and 44 deletions
|
|
@ -57,17 +57,23 @@ class ExportPlugin(BeetsPlugin):
|
||||||
'csv': {
|
'csv': {
|
||||||
# CSV module formatting options.
|
# CSV module formatting options.
|
||||||
'formatting': {
|
'formatting': {
|
||||||
'delimiter': ',', # The delimiter used to seperate columns.
|
# The delimiter used to seperate columns.
|
||||||
'dialect': 'excel' # The type of dialect to use when formating the file output.
|
'delimiter': ',',
|
||||||
|
# The dialect to use when formating the file output.
|
||||||
|
'dialect': 'excel'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'xml': {
|
'xml': {
|
||||||
# XML module formatting options.
|
# XML module formatting options.
|
||||||
'formatting': {
|
'formatting': {
|
||||||
'encoding': 'unicode', # The output encoding.
|
# The output encoding.
|
||||||
'xml_declaration':True, # Controls if an XML declaration should be added to the file.
|
'encoding': 'unicode',
|
||||||
'method': 'xml', # Can be either "xml", "html" or "text" (default is "xml").
|
# Controls if XML declaration should be added to the file.
|
||||||
'short_empty_elements': True # Controls the formatting of elements that contain no content.
|
'xml_declaration': True,
|
||||||
|
# Can be either "xml", "html" or "text" (default is "xml").
|
||||||
|
'method': 'xml',
|
||||||
|
# Controls formatting of elements that contain no content.
|
||||||
|
'short_empty_elements': True
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
# TODO: Use something like the edit plugin
|
# TODO: Use something like the edit plugin
|
||||||
|
|
@ -105,7 +111,8 @@ class ExportPlugin(BeetsPlugin):
|
||||||
def run(self, lib, opts, args):
|
def run(self, lib, opts, args):
|
||||||
file_path = opts.output
|
file_path = opts.output
|
||||||
file_mode = 'a' if opts.append else 'w'
|
file_mode = 'a' if opts.append else 'w'
|
||||||
file_format = opts.format if opts.format else self.config['default_format'].get(str)
|
file_format = opts.format if opts.format else \
|
||||||
|
self.config['default_format'].get(str)
|
||||||
format_options = self.config[file_format]['formatting'].get(dict)
|
format_options = self.config[file_format]['formatting'].get(dict)
|
||||||
|
|
||||||
export_format = ExportFormat.factory(
|
export_format = ExportFormat.factory(
|
||||||
|
|
@ -144,8 +151,12 @@ class ExportFormat(object):
|
||||||
self.path = file_path
|
self.path = file_path
|
||||||
self.mode = file_mode
|
self.mode = file_mode
|
||||||
self.encoding = encoding
|
self.encoding = encoding
|
||||||
# Assigned sys.stdout (terminal output) or the file stream for the path specified.
|
""" self.out_stream =
|
||||||
self.out_stream = codecs.open(self.path, self.mode, self.encoding) if self.path else sys.stdout
|
sys.stdout if path doesn't exit
|
||||||
|
codecs.open(..) else
|
||||||
|
"""
|
||||||
|
self.out_stream = codecs.open(self.path, self.mode, self.encoding) \
|
||||||
|
if self.path else sys.stdout
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def factory(cls, file_type, **kwargs):
|
def factory(cls, file_type, **kwargs):
|
||||||
|
|
@ -178,7 +189,7 @@ class CSVFormat(ExportFormat):
|
||||||
|
|
||||||
def export(self, data, **kwargs):
|
def export(self, data, **kwargs):
|
||||||
header = list(data[0].keys()) if data else []
|
header = list(data[0].keys()) if data else []
|
||||||
writer = csv.DictWriter(self.out_stream, fieldnames=self.header, **kwargs)
|
writer = csv.DictWriter(self.out_stream, fieldnames=header, **kwargs)
|
||||||
writer.writeheader()
|
writer.writeheader()
|
||||||
writer.writerows(data)
|
writer.writerows(data)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,10 +19,7 @@
|
||||||
from __future__ import division, absolute_import, print_function
|
from __future__ import division, absolute_import, print_function
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from test import helper
|
|
||||||
from test.helper import TestHelper
|
from test.helper import TestHelper
|
||||||
#from beetsplug.export import ExportPlugin, ExportFormat, JSONFormat, CSVFormat, XMLFormat
|
|
||||||
#from collections import namedtuple
|
|
||||||
|
|
||||||
|
|
||||||
class ExportPluginTest(unittest.TestCase, TestHelper):
|
class ExportPluginTest(unittest.TestCase, TestHelper):
|
||||||
|
|
@ -41,8 +38,8 @@ class ExportPluginTest(unittest.TestCase, TestHelper):
|
||||||
item1.track = "ttrack"
|
item1.track = "ttrack"
|
||||||
item1.write()
|
item1.write()
|
||||||
item1.store()
|
item1.store()
|
||||||
|
options = '-f json -i "track,album" ' + item1.artist
|
||||||
out = self.run_with_output('export', '-f json -i "track,album" tartist')
|
out = self.run_with_output('export', options)
|
||||||
self.assertIn('"track": "' + item1.track + '"', out)
|
self.assertIn('"track": "' + item1.track + '"', out)
|
||||||
self.assertIn('"album": "' + item1.album + '"', out)
|
self.assertIn('"album": "' + item1.album + '"', out)
|
||||||
|
|
||||||
|
|
@ -53,8 +50,8 @@ class ExportPluginTest(unittest.TestCase, TestHelper):
|
||||||
item1.track = "ttrack"
|
item1.track = "ttrack"
|
||||||
item1.write()
|
item1.write()
|
||||||
item1.store()
|
item1.store()
|
||||||
|
options = '-f csv -i "track,album" ' + item1.artist
|
||||||
out = self.run_with_output('export', '-f json -i "track,album" tartist')
|
out = self.run_with_output('export', options)
|
||||||
self.assertIn(item1.track + ',' + item1.album, out)
|
self.assertIn(item1.track + ',' + item1.album, out)
|
||||||
|
|
||||||
def test_xml_output(self):
|
def test_xml_output(self):
|
||||||
|
|
@ -64,32 +61,11 @@ class ExportPluginTest(unittest.TestCase, TestHelper):
|
||||||
item1.track = "ttrack"
|
item1.track = "ttrack"
|
||||||
item1.write()
|
item1.write()
|
||||||
item1.store()
|
item1.store()
|
||||||
|
options = '-f xml -i "track,album" ' + item1.artist
|
||||||
out = self.run_with_output('export', '-f json -i "track,album" tartist')
|
out = self.run_with_output('export', options)
|
||||||
self.assertIn("<title>" + item1.track + "</title>", out)
|
self.assertIn("<title>" + item1.track + "</title>", out)
|
||||||
self.assertIn("<album>" + item1.album + "</album>", out)
|
self.assertIn("<album>" + item1.album + "</album>", out)
|
||||||
|
|
||||||
"""
|
|
||||||
def setUp(self):
|
|
||||||
Opts = namedtuple('Opts', 'output append included_keys library format')
|
|
||||||
self.args = None
|
|
||||||
self._export = ExportPlugin()
|
|
||||||
included_keys = ['title,artist,album']
|
|
||||||
self.opts = Opts(None, False, included_keys, True, "json")
|
|
||||||
self.export_format_classes = {"json": ExportFormat, "csv": CSVFormat, "xml": XMLFormat}
|
|
||||||
|
|
||||||
def test_run(self, _format="json"):
|
|
||||||
self.opts.format = _format
|
|
||||||
self._export.run(lib=self.lib, opts=self.opts, args=self.args)
|
|
||||||
# 1.) Test that the ExportFormat Factory class method invoked the correct class
|
|
||||||
self.assertEqual(type(self._export.export_format), self.export_format_classes[_format])
|
|
||||||
# 2.) Test that the cmd parser options specified were processed in correctly
|
|
||||||
self.assertEqual(self._export.export_format.path, self.opts.output)
|
|
||||||
mode = 'a' if self.opts.append else 'w'
|
|
||||||
self.assertEqual(self._export.export_format.mode, mode)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
return unittest.TestLoader().loadTestsFromName(__name__)
|
return unittest.TestLoader().loadTestsFromName(__name__)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue