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