"""
Format list of strings.
Formatters take a list of words, format them some way and return a string.
"""
from abc import ABCMeta, abstractmethod, abstractproperty
import random
[docs]class Join(Formatter):
"""Simply join all words."""
def _transform(self, words):
return words
[docs]class Underscore(Formatter):
"""Join with underscore."""
def _transform(self, words):
return list(''.join(l + '_' * (n < len(words) - 1)
for n, l in enumerate(words)))
[docs]class Capitalize(Formatter):
"""Capitalize first letter of every word."""
def _transform(self, words):
return map(lambda word: word.capitalize(), words)
[docs]class CapitalizeExceptFirst(Formatter):
"""Capitalize first letter of every word except the first."""
def _transform(self, words):
words = Capitalize()._transform(words)
words[0] = words[0][:1].lower() + words[0][1:]
return words
[docs]class AppendNumber(Formatter):
"""Append a number.
If the last word is of length 4,then a year like number is appended,
otherwise a number of up to 3 digits will be apended.
"""
def _transform(self, words):
last = words.pop()
if len(last) is 4:
words.append(str(random.randint(1600, 2300)))
else:
words.append(last)
words.append(str(random.randint(0, 999)))
return words
[docs]class CapitalizeAppendNumber(Formatter):
"""Capitalizes all words and appends a number."""
def _transform(self, words):
words = Capitalize()._transform(words)
words = AppendNumber()._transform(words)
return words