File: backends.py

package info (click to toggle)
django-maintenance-mode 0.16.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 188 kB
  • sloc: python: 499; makefile: 4
file content (66 lines) | stat: -rw-r--r-- 2,065 bytes parent folder | download
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)