from itertools import chain from django.core.files.storage import default_storage class Favicon: def __init__(self, size, rel='icon', mime='image/png'): self.rel = rel self.mime = mime if not isinstance(size, tuple): size = (size, size) self.size = size @property def url(self): return default_storage.url('favicon/' + self.filename) @property def filename(self): return 'favicon-{0}.png'.format(*self.size) @property def sizes(self): return 'x'.join(str(s) for s in self.size) tile_sizes = {'small': 128, 'medium': 270, 'wide': (558, 270), 'large': 558} class Tile(Favicon): def __init__(self, size_name): super().__init__(tile_sizes[size_name]) self.size_name = size_name @property def filename(self): return '{0}tile.png'.format(self.size_name) sizes = (32, 57, 76, 96, 120, 128, 144, 180, 195, 228) icons = tuple(chain( (Favicon(s) for s in sizes), (Tile(s) for s in tile_sizes.keys()), (Favicon(152, rel='apple-touch-icon-precomposed'), Favicon(196, rel='shortcut icon')) ))