30 lines
882 B
Python
30 lines
882 B
Python
import os
|
|
import random
|
|
|
|
from flask import current_app, send_from_directory
|
|
|
|
from max.permissions import AllowAnyAccess
|
|
from max.views import BaseView
|
|
|
|
|
|
FAVICON_FOLDER = "private_static/favicons"
|
|
STATE_FAVICON_ATTR = "available_favicons"
|
|
|
|
|
|
class Favicon(AllowAnyAccess, BaseView):
|
|
_state = {}
|
|
|
|
def get(self):
|
|
random_favicon = self.get_random_favicon_filename()
|
|
return send_from_directory(FAVICON_FOLDER, random_favicon, add_etags=False)
|
|
|
|
def ensure_favicons(self):
|
|
if STATE_FAVICON_ATTR not in self._state:
|
|
directory = os.fspath(FAVICON_FOLDER)
|
|
directory = os.path.join(current_app.root_path, directory)
|
|
self._state[STATE_FAVICON_ATTR] = [a for a in os.listdir(directory)]
|
|
|
|
def get_random_favicon_filename(self):
|
|
self.ensure_favicons()
|
|
return random.choice(self._state[STATE_FAVICON_ATTR])
|