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
|
|
|
|