Skip to content

Commit b0fbf67

Browse files
committed
core settings refactoring, avoid writing json file
1 parent 52d49c6 commit b0fbf67

File tree

12 files changed

+67
-65
lines changed

12 files changed

+67
-65
lines changed

__init__.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def run_with_except_hook(*args2, **kwargs2):
131131
ssl._create_default_https_context = ssl._create_unverified_context
132132

133133
#from .core.checkdeps import HAS_GDAL, HAS_PYPROJ, HAS_PIL, HAS_IMGIO
134-
from .core.settings import getSettings, setSettings
134+
from .core.settings import settings
135135

136136
#Import all modules which contains classes that must be registed (classes derived from bpy.types.*)
137137
from . import prefs
@@ -349,14 +349,12 @@ def register():
349349

350350
#Setup prefs
351351
preferences = bpy.context.preferences.addons[__package__].preferences
352-
#>>logger
353-
#logger = logging.getLogger(__name__)
354352
logger.setLevel(logging.getLevelName(preferences.logLevel)) #will affect all child logger
355-
#>>core settings
356-
cfg = getSettings()
357-
cfg['proj_engine'] = preferences.projEngine
358-
cfg['img_engine'] = preferences.imgEngine
359-
setSettings(cfg)
353+
354+
#update core settings according to addon prefs
355+
settings.proj_engine = preferences.projEngine
356+
settings.img_engine = preferences.imgEngine
357+
360358

361359
def unregister():
362360

core/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
logging.basicConfig(level=logging.getLevelName('INFO'))
33

44
from .checkdeps import HAS_GDAL, HAS_PYPROJ, HAS_IMGIO, HAS_PIL
5-
from .settings import getSettings, setSettings
5+
from .settings import settings
66
from .errors import OverlapError
77

88
from .utils import XY, BBOX

core/basemaps/mapservice.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838
from ..proj.ellps import dd2meters, meters2dd
3939
from ..proj.srs import SRS
4040

41-
from ..settings import getSetting
42-
USER_AGENT = getSetting('user_agent')
41+
from .. import settings
42+
USER_AGENT = settings.user_agent
4343

4444
# Set mosaic backgroung image color, it will be the base color for area not covered
4545
# by the map service (ie when requests return non valid data)

core/georaster/npimg.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from ..maths.fillnodata import replace_nans #inpainting function (ie fill nodata)
3131
from ..utils import XY as xy
3232
from ..checkdeps import HAS_GDAL, HAS_PIL, HAS_IMGIO
33-
from ..settings import getSettings
33+
from .. import settings
3434

3535
if HAS_PIL:
3636
from PIL import Image
@@ -47,8 +47,7 @@ class NpImage():
4747

4848
def _getIFACE(self):
4949

50-
prefs = getSettings()
51-
engine = prefs['img_engine']
50+
engine = settings.img_engine
5251

5352
if engine == 'AUTO':
5453
if HAS_GDAL:

core/proj/reproj.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
from ..errors import ReprojError
2929
from ..utils import BBOX
3030
from ..checkdeps import HAS_GDAL, HAS_PYPROJ
31-
from ..settings import getSettings
31+
from .. import settings
3232

3333
if HAS_GDAL:
3434
from osgeo import osr, gdal
@@ -199,8 +199,7 @@ def __init__(self, crs1, crs2):
199199
return
200200

201201
#Get proj engine from module settings
202-
prefs = getSettings()
203-
self.iproj = prefs['proj_engine']
202+
self.iproj = settings.proj_engine
204203
if self.iproj not in ['AUTO', 'GDAL', 'PYPROJ', 'BUILTIN', 'EPSGIO']:
205204
raise ReprojError('Wrong engine name')
206205

core/proj/srv.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
from urllib.request import Request, urlopen
2424
from urllib.error import URLError, HTTPError
2525
import json
26-
from ..settings import getSetting
2726

28-
USER_AGENT = getSetting('user_agent')
27+
from .. import settings
28+
USER_AGENT = settings.user_agent
2929

3030
######################################
3131
# EPSG.io

core/settings.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22
"proj_engine": "AUTO",
33
"img_engine": "AUTO",
44
"user_agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0"
5-
}
5+
}

core/settings.py

+37-33
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,8 @@
11
# -*- coding:utf-8 -*-
2-
32
import os
43
import json
54

65
from .checkdeps import HAS_GDAL, HAS_PYPROJ, HAS_IMGIO, HAS_PIL
7-
#from .proj import EPSGIO #WARN this one causes circular import because proj.reproj is imported in proj.__init__ and it also import settings.py
8-
9-
cfgFile = os.path.dirname(os.path.abspath(__file__)) + '/settings.json'
10-
#cfgFile = os.path.join(os.path.dirname(__file__), "settings.json")
11-
12-
def getSettings():
13-
with open(cfgFile, 'r') as cfg:
14-
prefs = json.load(cfg)
15-
return prefs
16-
17-
def setSettings(prefs):
18-
with open(cfgFile, 'w') as cfg:
19-
json.dump(prefs, cfg, indent='\t')
20-
21-
def getSetting(k):
22-
prefs = getSettings()
23-
return prefs.get(k, None)
246

257
def getAvailableProjEngines():
268
engines = ['AUTO', 'BUILTIN']
@@ -42,18 +24,40 @@ def getAvailableImgEngines():
4224
engines.append('PIL')
4325
return engines
4426

45-
def setImgEngine(engine):
46-
if engine not in getAvailableImgEngines():
47-
raise IOError
48-
else:
49-
cfg = getSettings()
50-
cfg['img_engine'] = engine
51-
setSettings(cfg)
52-
53-
def setProjEngine(engine):
54-
if engine not in getAvailableProjEngines():
55-
raise IOError
56-
else:
57-
cfg = getSettings()
58-
cfg['proj_engine'] = engine
59-
setSettings(cfg)
27+
28+
class Settings():
29+
30+
def __init__(self, **kwargs):
31+
self._proj_engine = kwargs['proj_engine']
32+
self._img_engine = kwargs['img_engine']
33+
self.user_agent = kwargs['user_agent']
34+
35+
@property
36+
def proj_engine(self):
37+
return self._proj_engine
38+
39+
@proj_engine.setter
40+
def proj_engine(self, engine):
41+
if engine not in getAvailableProjEngines():
42+
raise IOError
43+
else:
44+
self._proj_engine = engine
45+
46+
@property
47+
def img_engine(self):
48+
return self._img_engine
49+
50+
@img_engine.setter
51+
def img_engine(self, engine):
52+
if engine not in getAvailableImgEngines():
53+
raise IOError
54+
else:
55+
self._img_engine = engine
56+
57+
58+
cfgFile = os.path.join(os.path.dirname(__file__), "settings.json")
59+
60+
with open(cfgFile, 'r') as cfg:
61+
prefs = json.load(cfg)
62+
63+
settings = Settings(**prefs)

operators/io_get_dem.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616
from .utils import adjust3Dview, getBBOX, isTopView
1717
from ..core.proj import SRS, reprojBbox
1818

19-
from ..core.settings import getSetting
20-
21-
USER_AGENT = getSetting('user_agent')
19+
from ..core import settings
20+
USER_AGENT = settings.user_agent
2221

2322
PKG, SUBPKG = __package__.split('.', maxsplit=1)
2423

operators/io_import_osm.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
from .utils import adjust3Dview, getBBOX, DropToGround, isTopView
1818

1919
from ..core.proj import Reproj, reprojBbox, reprojPt, utm
20-
from ..core.settings import getSetting
2120
from ..core.utils import perf_clock
2221

23-
USER_AGENT = getSetting('user_agent')
22+
from ..core import settings
23+
USER_AGENT = settings.user_agent
2424

2525
PKG, SUBPKG = __package__.split('.', maxsplit=1)
2626

operators/view3d_mapviewer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
from ..core import HAS_GDAL, HAS_PIL, HAS_IMGIO
3838
from ..core.proj import reprojPt, reprojBbox, dd2meters, meters2dd
3939
from ..core.basemaps import GRIDS, SOURCES, MapService
40-
from ..core.settings import getSetting
4140

42-
USER_AGENT = getSetting('user_agent')
41+
from ..core import settings
42+
USER_AGENT = settings.user_agent
4343

4444
#bgis imports
4545
from ..geoscene import GeoScene, SK, georefManagerLayout

prefs.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
from .core.proj.reproj import EPSGIO
1313
from .core.proj.srs import SRS
1414
from .core.checkdeps import HAS_GDAL, HAS_PYPROJ, HAS_PIL, HAS_IMGIO
15-
from .core.settings import getSetting, getSettings, setSettings
15+
#from .core.settings import getSetting, getSettings, setSettings
16+
from .core import settings
1617

1718
PKG = __package__
1819

@@ -121,9 +122,10 @@ def getProjEngineItems(self, context):
121122
return items
122123

123124
def updateProjEngine(self, context):
124-
prefs = getSettings()
125+
'''prefs = getSettings()
125126
prefs['proj_engine'] = self.projEngine
126-
setSettings(prefs)
127+
setSettings(prefs)'''
128+
settings.proj_engine = self.projEngine
127129

128130
projEngine: EnumProperty(
129131
name = "Projection engine",
@@ -146,9 +148,10 @@ def getImgEngineItems(self, context):
146148
return items
147149

148150
def updateImgEngine(self, context):
149-
prefs = getSettings()
151+
'''prefs = getSettings()
150152
prefs['img_engine'] = self.imgEngine
151-
setSettings(prefs)
153+
setSettings(prefs)'''
154+
settings.img_engine = self.imgEngine
152155

153156
imgEngine: EnumProperty(
154157
name = "Image processing engine",

0 commit comments

Comments
 (0)