+from ..utils.utils import MPDSimaException
+
+
+UUID_RE = r'^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[89AB][a-f0-9]{3}-[a-f0-9]{12}$'
+#: The Track Object is collapsing multiple tags into a single string using this
+# separator. It is used then to split back the string to tags list.
+SEPARATOR = chr(0x1F) # ASCII Unit Separator
+
+
+def is_uuid4(uuid):
+ """Controls MusicBrainz UUID4 format
+
+ :param str uuid: String representing the UUID
+ :returns: boolean
+ """
+ regexp = re.compile(UUID_RE, re.IGNORECASE)
+ if regexp.match(uuid):
+ return True
+ return False
+
+
+class MetaException(MPDSimaException):
+ """Generic Meta Exception"""
+
+
+def mbidfilter(func):
+ def wrapper(*args, **kwargs):
+ cls = args[0]
+ if not cls.use_mbid:
+ kwargs.pop('mbid', None)
+ kwargs.pop('musicbrainz_artistid', None)
+ kwargs.pop('musicbrainz_albumartistid', None)
+ func(*args, **kwargs)
+ return wrapper
+
+
+def serialize(func):
+ def wrapper(*args, **kwargs):
+ ans = func(*args, **kwargs)
+ if isinstance(ans, set):
+ return {s.replace("'", r"\'").replace('"', r'\"') for s in ans}
+ return ans.replace("'", r"\'").replace('"', r'\"')
+ return wrapper