Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions modelbaker/iliwrapper/ili2dbconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ def ilidata_directories(self) -> list:
if self.custom_model_directories_enabled and self.custom_model_directories:
dirs = self.custom_model_directories.split(";")
else:
# this is adds model.opengis.ch to the repo scan (is linking to http://models.interlis.ch)
# this could be removed in future, when everyone uses their own data-repo and everywhere the models_directory can be used
dirs = ["https://models.opengis.ch/"]
return dirs

Expand Down
57 changes: 30 additions & 27 deletions modelbaker/iliwrapper/ilicache.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class IliCache(QObject):
ns = {"ili23": "http://www.interlis.ch/INTERLIS2.3"}

new_message = pyqtSignal(int, str)
model_refreshed = pyqtSignal(int)

CACHE_PATH = os.path.expanduser("~/.ilicache")

Expand All @@ -67,13 +68,13 @@ def __init__(
self.repositories = dict()
self.base_configuration = configuration
self.single_ili_file = single_ili_file
self.model = IliModelItemModel()
self.model = self.get_model()
self.model.modelReset.connect(
lambda: self.model_refreshed.emit(self.model.rowCount())
)
self.sorted_model = QSortFilterProxyModel()
self.sorted_model.setSourceModel(self.model)
self.sorted_model.sort(0, Qt.SortOrder.AscendingOrder)
self.directories = None
if self.base_configuration:
self.directories = self.base_configuration.model_directories

# refresh the models on changing values but avoid massive db connects by timer
self.modelReposTimer = QTimer()
Expand All @@ -82,16 +83,20 @@ def __init__(
lambda: self.model.set_repositories(self.repositories)
)

def get_model(self):
return IliModelItemModel()

def set_repositories_to_model(self) -> None:
# hold refresh back
self.modelReposTimer.start(500)

def refresh(self) -> None:
if not self.directories is None:
for directory in self.directories:
self.repositories = dict()
if self.base_configuration.model_directories is not None:
for directory in self.base_configuration.model_directories:
self.process_model_directory(directory)

if not self.single_ili_file is None:
if self.single_ili_file is not None:
if os.path.exists(self.single_ili_file):
self.process_single_ili_file()

Expand Down Expand Up @@ -144,18 +149,24 @@ def download_repository(self, url: str) -> None:

if os.path.isdir(url):
# continue with the local file
found_anything = False
if os.path.exists(information_file_url):
self._process_informationfile(information_file_url, netloc, url)
found_anything = True
else:
logger.warning(
self.tr("Could not find local file {}").format(information_file_url)
)
if os.path.exists(ilisite_url):
self._process_ilisite(ilisite_url)
found_anything = True
else:
logger.warning(
self.tr("Could not find local file {}").format(ilisite_url)
)
if not found_anything:
# update repositories on dead end (when nothing has been found, then update with empty)
self.set_repositories_to_model()
else:
netloc_dir = os.path.join(self.CACHE_PATH, netloc)
os.makedirs(netloc_dir, exist_ok=True)
Expand Down Expand Up @@ -313,7 +324,6 @@ def process_local_ili_folder(self, path: str) -> None:
self.repositories[path] = sorted(
models, key=lambda m: m["version"], reverse=True
)

self.set_repositories_to_model()

def process_ili_file(self, ilifile: str) -> list:
Expand Down Expand Up @@ -413,6 +423,7 @@ def __init__(self, parent=None):
super().__init__(0, 1, parent)

def set_repositories(self, repositories: dict) -> None:
self.beginResetModel()
self.clear()
names = list()

Expand Down Expand Up @@ -441,6 +452,7 @@ def set_repositories(self, repositories: dict) -> None:
item.setData(model.get("file", ""), int(IliModelItemModel.Roles.FILE))
names.append(name)
self.appendRow(item)
self.endResetModel()


class ModelCompleterDelegate(QItemDelegate):
Expand Down Expand Up @@ -502,7 +514,6 @@ class IliDataCache(IliCache):

file_download_succeeded = pyqtSignal(str, str)
file_download_failed = pyqtSignal(str, str)
model_refreshed = pyqtSignal(int)

CACHE_PATH = os.path.expanduser("~/.ilidatacache")

Expand All @@ -516,21 +527,13 @@ def __init__(
IliCache.__init__(self, configuration)
self.information_file = "ilidata.xml"

self.model = IliDataItemModel()
self.model.modelReset.connect(
lambda: self.model_refreshed.emit(self.model.rowCount())
)
self.sorted_model.setSourceModel(self.model)
self.sorted_model.sort(0, Qt.SortOrder.AscendingOrder)
self.filter_models = models.split(";") if models else []
self.type = type
self.directories = (
self.base_configuration.ilidata_directories
if self.base_configuration
else []
)
self.datasources = datasources

def get_model(self):
return IliDataItemModel()

def process_model_directory(self, path: str) -> None:
# download remote and local repositories
self.download_repository(path)
Expand Down Expand Up @@ -738,7 +741,6 @@ def _process_informationfile(self, file: str, netloc: str, url: str) -> None:
key=lambda m: m["version"] if m["version"] else "0",
reverse=True,
)

self.set_repositories_to_model()

def download_file(
Expand Down Expand Up @@ -930,9 +932,6 @@ def __init__(
tool_dir: Optional[str] = None,
):
IliDataCache.__init__(self, configuration)
self.model = IliToppingFileItemModel()
self.sorted_model.setSourceModel(self.model)
self.sorted_model.sort(0, Qt.SortOrder.AscendingOrder)
self.file_ids = file_ids
self.tool_dir = (
tool_dir
Expand All @@ -948,9 +947,12 @@ def __init__(
)
self.model.rowsInserted.connect(lambda: self.on_download_status(None))

def get_model(self):
return IliToppingFileItemModel()

def refresh(self) -> None:
if not self.directories is None:
for directory in self.directories:
if self.base_configuration.ilidata_directories is not None:
for directory in self.base_configuration.ilidata_directories:
self.process_model_directory(directory)

# collect local files
Expand Down Expand Up @@ -1063,7 +1065,6 @@ def _process_informationfile(self, file: str, netloc: str, url: str) -> None:
key=lambda m: m["version"] if m["version"] else "0",
reverse=True,
)

self.set_repositories_to_model()


Expand All @@ -1083,6 +1084,7 @@ def __init__(self, parent=None):
super().__init__(0, 1, parent)

def set_repositories(self, repositories: dict) -> None:
self.beginResetModel()
self.clear()
ids = list()

Expand Down Expand Up @@ -1116,3 +1118,4 @@ def set_repositories(self, repositories: dict) -> None:

ids.append(toppingfile["id"])
self.appendRow(item)
self.endResetModel()
Loading