autorun.py 4.27 KB
Newer Older
Karel Koci's avatar
Karel Koci committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# Copyright (c) 2018, CZ.NIC, z.s.p.o. (http://www.nic.cz/)
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#    * Redistributions of source code must retain the above copyright
#      notice, this list of conditions and the following disclaimer.
#    * Redistributions in binary form must reproduce the above copyright
#      notice, this list of conditions and the following disclaimer in the
#      documentation and/or other materials provided with the distribution.
#    * Neither the name of the CZ.NIC nor the
#      names of its contributors may be used to endorse or promote products
#      derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL CZ.NIC BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
# OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
import typing
Karel Koci's avatar
Karel Koci committed
26 27 28
from uci import UciExceptionNotFound
from euci import EUci

29 30

def enabled() -> typing.Optional[bool]:
Karel Koci's avatar
Karel Koci committed
31 32
    """Returns True if updater can be automatically started by various system
    utils. This includes automatic periodic execution, after-boot recovery and
33 34
    other tools call to configuration aplication. This returns None if no
    configuration was set so it is possible to catch no configuration case.
Karel Koci's avatar
Karel Koci committed
35 36 37 38
    Relevant uci configuration is: updater.autorun.enable
    """
    with EUci() as uci:
        try:
Karel Koci's avatar
Karel Koci committed
39
            return uci.get_boolean("updater", "autorun", "enable")
Karel Koci's avatar
Karel Koci committed
40
        except UciExceptionNotFound:
41 42 43
            # No option means disabled but instead of False we return None to
            # allow to handle no setting situation.
            return None
Karel Koci's avatar
Karel Koci committed
44 45


46 47
def set_enabled(enable: bool):
    """Set value that can be later received with enable function.
Karel Koci's avatar
Karel Koci committed
48 49 50 51
    It sets uci configuration value: updater.autorun.enable
    """
    with EUci() as uci:
        uci.set('updater', 'autorun', 'autorun')
52
        uci.set_boolean('updater', 'autorun', 'enable', enable)
Karel Koci's avatar
Karel Koci committed
53 54


55
def approvals() -> bool:
Karel Koci's avatar
Karel Koci committed
56 57 58 59 60 61 62 63 64 65
    """Returns True if updater approvals are enabled.
    Relevant uci configuration is: updater.autorun.approvals
    """
    with EUci() as uci:
        try:
            return uci.get_boolean("updater", "autorun", "approvals")
        except UciExceptionNotFound:
            return False  # No option means disabled


66
def set_approvals(enabled: bool):
Karel Koci's avatar
Karel Koci committed
67 68 69 70 71 72 73 74
    """Set value that can later be received by enabled function.
    This is relevant to uci config: updater.autorun.approvals
    """
    with EUci() as uci:
        uci.set('updater', 'autorun', 'autorun')
        uci.set_boolean('updater', 'autorun', 'approvals', enabled)


75
def auto_approve_time() -> typing.Optional[int]:
Karel Koci's avatar
Karel Koci committed
76 77 78 79 80 81 82 83 84 85 86 87
    """Returns number of hours before automatic approval is granted. If no
    approval time is configured then this function returns None.
    This is releavant to uci config: updater.autorun.auto_approve_time
    """
    with EUci() as uci:
        try:
            value = uci.get_integer("updater", "autorun", "auto_approve_time")
            return value if value > 0 else None
        except UciExceptionNotFound:
            return 0


88
def set_auto_approve_time(approve_time: typing.Optional[int]):
Karel Koci's avatar
Karel Koci committed
89 90 91 92 93
    """Sets time in hours after which approval is granted. You can provide None
    or value that is less or equal to zero and in that case this feature is
    disabled and if approvals are enabled only manual approve can be granted.
    """
    with EUci() as uci:
94
        if approve_time and approve_time > 0:
Karel Koci's avatar
Karel Koci committed
95 96 97 98
            uci.set('updater', 'autorun', 'autorun')
            uci.set_integer('updater', 'autorun', 'auto_approve_time', approve_time)
        else:
            uci.delete('updater', 'autorun', 'auto_approve_time')