diff --git a/beets/dbcore/types.py b/beets/dbcore/types.py index 8ab3bcfa2..8c8bfa3f6 100644 --- a/beets/dbcore/types.py +++ b/beets/dbcore/types.py @@ -207,29 +207,27 @@ class String(Type): else: return self.model_type(value) -class DelimeteredString(String): + +class DelimitedString(String): """A list of Unicode strings, represented in-database by a single string containing delimiter-separated values. """ model_type = list - def __init__(self, delim=','): - self.delim = delim + def __init__(self, delimiter): + self.delimiter = delimiter - def to_sql(self, model_value): - return self.delim.join([str(elem) for elem in model_value]) - - def from_sql(self, sql_value): - if sql_value is None: - return self.null() - else: - return self.parse(sql_value) + def format(self, value): + return self.delimiter.join(value) def parse(self, string): - try: - return string.split(self.delim) - except: - return self.null + if not string: + return [] + return string.split(self.delimiter) + + def to_sql(self, model_value): + return self.delimiter.join(model_value) + class Boolean(Type): """A boolean type. @@ -254,4 +252,4 @@ FLOAT = Float() NULL_FLOAT = NullFloat() STRING = String() BOOLEAN = Boolean() -SEMICOLON_DSV = DelimeteredString(delim=';') +SEMICOLON_SPACE_DSV = DelimitedString(delimiter='; ') diff --git a/beets/library.py b/beets/library.py index 69cf8d349..9d5219b18 100644 --- a/beets/library.py +++ b/beets/library.py @@ -504,7 +504,7 @@ class Item(LibModel): 'mb_releasetrackid': types.STRING, 'trackdisambig': types.STRING, 'albumtype': types.STRING, - 'albumtypes': types.SEMICOLON_DSV, + 'albumtypes': types.SEMICOLON_SPACE_DSV, 'label': types.STRING, 'acoustid_fingerprint': types.STRING, 'acoustid_id': types.STRING, @@ -1064,7 +1064,7 @@ class Album(LibModel): 'mb_albumid': types.STRING, 'mb_albumartistid': types.STRING, 'albumtype': types.STRING, - 'albumtypes': types.SEMICOLON_DSV, + 'albumtypes': types.SEMICOLON_SPACE_DSV, 'label': types.STRING, 'mb_releasegroupid': types.STRING, 'asin': types.STRING,