from collections import Counter from cppy.cp_util import * class AcceptTypes: def __init__(self, *args): self._args = args def __call__(self, f): def wrapped_f(*args, **kwargs): for i, arg_type in enumerate(self._args): if not isinstance(args[i], arg_type): raise TypeError(f"Argument {i} expected {arg_type}, got {type(args[i])}") return f(*args, **kwargs) return wrapped_f @AcceptTypes(str) def extract_words_(path_to_file): return extract_file_words(path_to_file) @AcceptTypes(list) def frequencies_(word_list): return Counter(word_list) @AcceptTypes(Counter) def sort_(word_freq): return word_freq.most_common() if __name__ == '__main__': word_freqs = sort_(frequencies_(extract_words_( testfilepath ))) print_word_freqs(word_freqs)