-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathget_set.py
More file actions
168 lines (114 loc) · 4.04 KB
/
get_set.py
File metadata and controls
168 lines (114 loc) · 4.04 KB
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# SPDX-FileCopyrightText: 2025 Authors (see AUTHORS file)
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""Getters and setters for settings.
This module implements the synchronization between the addon preferences and
the input file exported to BlendLuxCore.
"""
_needs_reload = "bpy" in locals()
import json
import pathlib
import bpy
from . import utils
if _needs_reload:
import importlib
utils = importlib.reload(utils)
SETTINGS_FILENAME = "blc_settings.json"
SETTINGS_INIT = {
"wheel_source": 0,
"wheel_version": "",
"path_to_wheel": "",
"path_to_wheel_deps": "",
"path_to_folder": "",
"reinstall_upon_reloading": False,
"no_deps": False,
"no_index": False,
}
def get_settings_file_path():
"""Path to settings file."""
settings_folder = pathlib.Path(
bpy.utils.user_resource("CONFIG", path="BlendLuxCore", create=True)
)
settings_file = settings_folder / SETTINGS_FILENAME
return settings_file
def _get_settings():
"""Get settings dictionary from json file.
Create json file if it does not exist and (re)initialize it if needed.
If settings file path is not known (BlendLuxCore not installed), return
internal dictionary.
"""
if not (settings_file := get_settings_file_path()):
raise RuntimeError("Missing BlendLuxCore")
settings_file.touch(exist_ok=True)
try:
with open(settings_file, "r", encoding="utf-8") as fsettings:
return json.load(fsettings)
except json.JSONDecodeError:
with open(settings_file, "w", encoding="utf-8") as fsettings:
# (Re)init settings file
json.dump(SETTINGS_INIT, fsettings)
return _get_settings()
def _set_settings(settings):
"""Write settings in json file."""
if not (settings_file := get_settings_file_path()):
raise RuntimeError("Missing BlendLuxCore")
settings_file = get_settings_file_path()
with open(settings_file, "w", encoding="utf-8") as fsettings:
json.dump(settings, fsettings)
def _get(setting):
"""Read a given setting."""
settings = _get_settings()
return settings[setting]
def _set(setting, value):
"""Set a given setting."""
settings = _get_settings()
settings[setting] = value
_set_settings(settings)
def get_wheel_source(_):
"""Getter for wheel source preference."""
return _get("wheel_source")
def set_wheel_source(_, value):
"""Setter for wheel source preference."""
_set("wheel_source", value)
def get_wheel_version(_):
"""Getter for wheel version preference."""
return _get("wheel_version")
def set_wheel_version(_, value):
"""Setter for wheel version preference."""
_set("wheel_version", value)
def get_path_to_wheel(_):
"""Getter for path to wheel preference."""
return _get("path_to_wheel")
def set_path_to_wheel(_, value):
"""Setter for path to wheel preference."""
_set("path_to_wheel", value)
def get_path_to_folder(_):
"""Getter for path to folder preference."""
return _get("path_to_folder")
def set_path_to_folder(_, value):
"""Setter for path to folder preference."""
_set("path_to_folder", value)
def get_reinstall_upon_reloading(_):
"""Getter for 'reinstall upon reloading' preference."""
return _get("reinstall_upon_reloading")
def set_reinstall_upon_reloading(_, value):
"""Setter for 'reinstall upon reloading' preference."""
_set("reinstall_upon_reloading", value)
def get_no_deps(_):
"""Getter for 'no deps' preference."""
return _get("no_deps")
def set_no_deps(_, value):
"""Setter for 'no deps' preference."""
_set("no_deps", value)
def get_no_index(_):
"""Getter for 'no index' preference."""
return _get("no_index")
def set_no_index(_, value):
"""Setter for 'no index' preference."""
_set("no_index", value)
def get_path_to_wheel_deps(_):
"""Getter for 'path to wheel deps' preference."""
return _get("path_to_wheel_deps")
def set_path_to_wheel_deps(_, value):
"""Setter for 'path to wheel deps' preference."""
_set("path_to_wheel_deps", value)