Completed
Push — main ( c8aa67...81e04d )
by Jochen
03:35
created

byceps.services.global_setting.service   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 84
ccs 33
cts 33
cp 1
rs 10
c 0
b 0
f 0
wmc 9

7 Functions

Rating   Name   Duplication   Size   Complexity  
A find_setting_value() 0 10 2
A get_settings() 0 5 1
A create_or_update_setting() 0 11 1
A _db_entity_to_global_setting() 0 4 1
A find_setting() 0 8 2
A create_setting() 0 8 1
A remove_setting() 0 9 1
1
"""
2
byceps.services.global_setting.service
3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
5
:Copyright: 2006-2020 Jochen Kupperschmidt
6
:License: Modified BSD, see LICENSE for details.
7
"""
8
9 1
from typing import Optional, Set
10
11 1
from ...database import db, upsert
12
13 1
from .models import Setting as DbSetting
14 1
from .transfer.models import GlobalSetting
15
16
17 1
def create_setting(name: str, value: str) -> GlobalSetting:
18
    """Create a global setting."""
19 1
    setting = DbSetting(name, value)
20
21 1
    db.session.add(setting)
22 1
    db.session.commit()
23
24 1
    return _db_entity_to_global_setting(setting)
25
26
27 1
def create_or_update_setting(name: str, value: str) -> GlobalSetting:
28
    """Create or update a global setting, depending on whether it
29
    already exists or not.
30
    """
31 1
    table = DbSetting.__table__
32 1
    identifier = {'name': name }
33 1
    replacement = {'value': value}
34
35 1
    upsert(table, identifier, replacement)
36
37 1
    return find_setting(name)
38
39
40 1
def remove_setting(name: str) -> None:
41
    """Remove the global setting with that name.
42
43
    Do nothing if no global setting with that name exists.
44
    """
45 1
    db.session.query(DbSetting) \
46
        .filter_by(name=name) \
47
        .delete()
48 1
    db.session.commit()
49
50
51 1
def find_setting(name: str) -> Optional[GlobalSetting]:
52
    """Return the global setting with that name, or `None` if not found."""
53 1
    setting = DbSetting.query.get(name)
54
55 1
    if setting is None:
56 1
        return None
57
58 1
    return _db_entity_to_global_setting(setting)
59
60
61 1
def find_setting_value(name: str) -> Optional[str]:
62
    """Return the value of the global setting with that name, or `None`
63
    if not found.
64
    """
65 1
    setting = find_setting(name)
66
67 1
    if setting is None:
68 1
        return None
69
70 1
    return setting.value
71
72
73 1
def get_settings() -> Set[GlobalSetting]:
74
    """Return all global settings."""
75 1
    settings = DbSetting.query.all()
76
77 1
    return {_db_entity_to_global_setting(setting) for setting in settings}
78
79
80 1
def _db_entity_to_global_setting(setting: DbSetting) -> GlobalSetting:
81 1
    return GlobalSetting(
82
        setting.name,
83
        setting.value,
84
    )
85