Source code for tagrenamer.app.safestring

# -*- coding: utf-8 -*-
"""
Represent a string that is absolutely filesystem safe.
"""
from unicodedata import normalize
import transliterate


[docs] class SafeString(): """ Represent a string that is absolutely filesystem safe. """ whitelist = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '-', ' ', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9') def __init__(self, old_string): """Initialize the SafeString object.""" self.new = str(old_string) # Attempt to transliterate non-alphabet scripts: try: self.new = transliterate.translit(self.new, reversed=True) except transliterate.exceptions.LanguageDetectionError: pass # Apply common cleanup tasks: self.new = self.new.lower() self.new = self.new.strip() normalst = normalize("NFKD", self.new) self.new = ''.join(c for c in normalst if ord(c) < 0x7f) self.filter()
[docs] def filter(self): """Filter out any garbage left..""" result = [] lastWasSpace = False for char in self.new: for validchar in self.whitelist: if char == validchar: # Prevent space duplication. if char == u' ': if lastWasSpace: continue else: lastWasSpace = True else: lastWasSpace = False # Append the character to the result list. result.append(char) self.new = ''.join(result).strip()
def __str__(self): """Return the string.""" return self.new