1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
# -*- coding: utf-8 -*-
from django.conf import settings
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from maintenance_mode.io import read_file, write_file
class AbstractStateBackend(object):
@staticmethod
def from_bool_to_str_value(value):
value = str(int(value))
if value not in ['0', '1']:
raise ValueError('state value is not 0|1')
return value
@staticmethod
def from_str_to_bool_value(value):
value = value.strip()
if value not in ['0', '1']:
raise ValueError('state value is not 0|1')
value = bool(int(value))
return value
def get_value(self):
raise NotImplementedError()
def set_value(self, value):
raise NotImplementedError()
class DefaultStorageBackend(AbstractStateBackend):
"""
django-maintenance-mode backend which uses the default storage.
Kindly provided by Dominik George https://github.com/Natureshadow
"""
def get_value(self):
filename = settings.MAINTENANCE_MODE_STATE_FILE_NAME
try:
with default_storage.open(filename, 'r') as statefile:
return self.from_str_to_bool_value(statefile.read())
except IOError:
return False
def set_value(self, value):
filename = settings.MAINTENANCE_MODE_STATE_FILE_NAME
if default_storage.exists(filename):
default_storage.delete(filename)
content = ContentFile(self.from_bool_to_str_value(value))
default_storage.save(filename, content)
class LocalFileBackend(AbstractStateBackend):
"""
django-maintenance-mode backend which uses the local file-sistem.
"""
def get_value(self):
value = read_file(settings.MAINTENANCE_MODE_STATE_FILE_PATH, '0')
value = self.from_str_to_bool_value(value)
return value
def set_value(self, value):
value = self.from_bool_to_str_value(value)
write_file(settings.MAINTENANCE_MODE_STATE_FILE_PATH, value)
|