Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@mmacata
Copy link
Member

@mmacata mmacata commented Jun 2, 2025

This PR moves some modules and methods from actinia-core to this new library. These modules and methods are not only used by actinia-core but also by different plugins.

See actinia-org/actinia-core#627 for more details.

anikaweinmann and others added 30 commits November 26, 2021 11:54
* reactivate redis queue

* rename variable

* make queue type configurable

* enhance dev setup for redis queue

* lint

* move user_auth

* move user auth

* move base_login

* move map_layer_base

* move renderer_base

* move resource_base

* fix relative imports

* lint

* first splitup: raster_colors

* splitup download_cache_management

* splitup ephemeral_custom_processing

* splitup ephemeral_processing_with_export

* splitup ephemeral_processing

* splitup renderer_base

* splitup persistent_processing

* splitup location_management

* splitup map_layer_management

* splitup mapset_management

* splitup persistent_mapset_merger

* splitup process_validation

* splitup raster_export

* splitup raster_layer

* splitup raster_legend

* lint

* splitup raster_renderer

* splitup resource_storage_management

* splitup strds_management

* splitup strds_raster_management

* splitup strds_renderer

* splitup vector_layer

* splitup vector_renderer

* lint

* make inheritance more clear

* add readme

* fix import
* tests: fix test descriptions

This PR fixes some test descriptions and a few typos.
* linting tests + black workflow

* linting

* black

* further black

* fix unittests

* fix test

Co-authored-by: anikaweinmann <[email protected]>
* linting tests + black workflow

* linting

* black

* further black

* fix unittests

* fix test

Co-authored-by: anikaweinmann <[email protected]>
* linting tests + black workflow

* linting

* black

* further black

* fix unittests

* fix test

Co-authored-by: anikaweinmann <[email protected]>
* linting tests + black workflow

* linting

* black

* further black

* fix unittests

* fix test

Co-authored-by: anikaweinmann <[email protected]>
* linting tests + black workflow

* linting

* black

* further black

* fix unittests

* fix test

Co-authored-by: anikaweinmann <[email protected]>
* add job queue name to response

* lint

* Update src/actinia_core/models/response_models.py

Co-authored-by: Markus Neteler <[email protected]>

* black

* undo-black

Co-authored-by: Markus Neteler <[email protected]>
…odule plugin (#387)

* change pc style for module description for importer and exporter in module plugin

* black
adjustment of the interim results

Co-authored-by: anikaweinmann <[email protected]>
Co-authored-by: Carmen Tawalika <[email protected]>
* Add possibility to configure pattern to save addional mapsets in the interim resutls

Co-authored-by: anikaweinmann <[email protected]>
…s (#410)

* add raster VRT support and support for mapset names by interim results

Co-authored-by: anikaweinmann <[email protected]>, linakrisztian <[email protected]>
…s (#410)

* add raster VRT support and support for mapset names by interim results

Co-authored-by: anikaweinmann <[email protected]>, linakrisztian <[email protected]>
* make resource resource delition asynchron

* trailing and ending precommit ...

* do not use pylint

* trigger linting

* linting

* linting

---------

Co-authored-by: anikaweinmann <[email protected]>
* make resource resource delition asynchron

* trailing and ending precommit ...

* do not use pylint

* trigger linting

* linting

* linting

---------

Co-authored-by: anikaweinmann <[email protected]>
* make resource resource delition asynchron

* trailing and ending precommit ...

* do not use pylint

* trigger linting

* linting

* linting

---------

Co-authored-by: anikaweinmann <[email protected]>
* allow separate config for worker

* test tests

* fix test

* create download cache if not exists

* create download cache if not exists

* create resource storage if not exists

* create log folder

* further work on tests

* add TODOs in tests
* started implementation for querying pixellimit for r.import commands

* continued implementation of pixel limit check for rimport commands

* considered resampling/reprojection for raster size + cleanup of created vrt

* linting

* markdown formating

* add tests for pixellimit check

* improved check in test + added fix for determining the estimated resolution of raster

* Update tests/test_raster_import_pixellimit.py

Co-authored-by: Markus Neteler <[email protected]>

* Update tests/test_raster_import_pixellimit.py

Co-authored-by: Markus Neteler <[email protected]>

* Update tests/test_raster_import_pixellimit.py

Co-authored-by: Carmen Tawalika <[email protected]>

* Update tests/test_raster_import_pixellimit.py

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/processing/actinia_processing/ephemeral_processing.py

Co-authored-by: Carmen Tawalika <[email protected]>

* add test for importer

---------

Co-authored-by: Markus Neteler <[email protected]>
Co-authored-by: Carmen Tawalika <[email protected]>
* add stdin for parameters

* add filter to stdout for other modules

* add tests

---------

Co-authored-by: anikaweinmann <[email protected]>
* lint

* update lint workflow

* update to new black version

* mdformat
* add decorator for deprecated locations

* add project endpoints

* endpoints for projects

* rename location

* rename location

* unify maintainer

* fix GRASS Initialisation

* black

* fixes for tests and G83

* fixes

* add rest of changes

* Update tests/test_job_resumption.py

* fix endpoints and job resumption tests

* Update src/actinia_core/core/common/api_logger.py

* Tests for G84

* Test pipelines for G8.3 and G8.4

* Update src/actinia_core/rest/base/resource_base.py

* fix test workflow

* fix tests for G83

* fix error due to lib update

* fix proc name

* Update src/actinia_core/endpoints.py

Co-authored-by: Carmen Tawalika <[email protected]>

---------

Co-authored-by: Carmen Tawalika <[email protected]>
Co-authored-by: Carmen <[email protected]>
* add decorator for deprecated locations

* add project endpoints

* endpoints for projects

* rename location

* rename location

* unify maintainer

* fix GRASS Initialisation

* black

* fixes for tests and G83

* fixes

* add rest of changes

* Update tests/test_job_resumption.py

* fix endpoints and job resumption tests

* Update src/actinia_core/core/common/api_logger.py

* Tests for G84

* Test pipelines for G8.3 and G8.4

* Update src/actinia_core/rest/base/resource_base.py

* fix test workflow

* fix tests for G83

* fix error due to lib update

* fix proc name

* Update src/actinia_core/endpoints.py

Co-authored-by: Carmen Tawalika <[email protected]>

---------

Co-authored-by: Carmen Tawalika <[email protected]>
Co-authored-by: Carmen <[email protected]>
* add decorator for deprecated locations

* add project endpoints

* endpoints for projects

* rename location

* rename location

* unify maintainer

* fix GRASS Initialisation

* black

* fixes for tests and G83

* fixes

* add rest of changes

* Update tests/test_job_resumption.py

* fix endpoints and job resumption tests

* Update src/actinia_core/core/common/api_logger.py

* Tests for G84

* Test pipelines for G8.3 and G8.4

* Update src/actinia_core/rest/base/resource_base.py

* fix test workflow

* fix tests for G83

* fix error due to lib update

* fix proc name

* Update src/actinia_core/endpoints.py

Co-authored-by: Carmen Tawalika <[email protected]>

---------

Co-authored-by: Carmen Tawalika <[email protected]>
Co-authored-by: Carmen <[email protected]>
* add decorator for deprecated locations

* add project endpoints

* endpoints for projects

* rename location

* rename location

* unify maintainer

* fix GRASS Initialisation

* black

* fixes for tests and G83

* fixes

* add rest of changes

* Update tests/test_job_resumption.py

* fix endpoints and job resumption tests

* Update src/actinia_core/core/common/api_logger.py

* Tests for G84

* Test pipelines for G8.3 and G8.4

* Update src/actinia_core/rest/base/resource_base.py

* fix test workflow

* fix tests for G83

* fix error due to lib update

* fix proc name

* Update src/actinia_core/endpoints.py

Co-authored-by: Carmen Tawalika <[email protected]>

---------

Co-authored-by: Carmen Tawalika <[email protected]>
Co-authored-by: Carmen <[email protected]>
* add decorator for deprecated locations

* add project endpoints

* endpoints for projects

* rename location

* rename location

* unify maintainer

* fix GRASS Initialisation

* black

* fixes for tests and G83

* fixes

* add rest of changes

* Update tests/test_job_resumption.py

* fix endpoints and job resumption tests

* Update src/actinia_core/core/common/api_logger.py

* Tests for G84

* Test pipelines for G8.3 and G8.4

* Update src/actinia_core/rest/base/resource_base.py

* fix test workflow

* fix tests for G83

* fix error due to lib update

* fix proc name

* Update src/actinia_core/endpoints.py

Co-authored-by: Carmen Tawalika <[email protected]>

---------

Co-authored-by: Carmen Tawalika <[email protected]>
Co-authored-by: Carmen <[email protected]>
* rename location

* fixes for tests and G83

* fix job resumption tests

* linting

* initial ruff check

* update test imports

* lint

* F841 and Post-PR

* lint

* test with wip linting workflow

* test post-pr

* fix ref

* trigger build

* always-post-pr

* post-pr in separate workflow

* rename workflow

* fix lint error

* trigger pipelines

* add ruff config

* update post-pr workflow

* Update .github/workflows/linting.yml

* fix tests

---------

Co-authored-by: anikaweinmann <[email protected]>
* rename location

* fixes for tests and G83

* fix job resumption tests

* linting

* initial ruff check

* update test imports

* lint

* F841 and Post-PR

* lint

* test with wip linting workflow

* test post-pr

* fix ref

* trigger build

* always-post-pr

* post-pr in separate workflow

* rename workflow

* fix lint error

* trigger pipelines

* add ruff config

* update post-pr workflow

* Update .github/workflows/linting.yml

* fix tests

---------

Co-authored-by: anikaweinmann <[email protected]>
* update setup from redis to valkey

* replace redis with valkey calls + remove non needed redis-remainings

* replace redis import with valkey import

* adjust function from redis to valkey

* replace redis by valkey function

* fix call of valkey commands fitting valkey-syntax

* Semantic renaming: redis to kvdb (#602)

* semantic renaming: redis to kvdb

* remove non semantic changes

* remove non semantic changes

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* remove non semantic changes

* update readme

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/core/common/config.py

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update docker/actinia-core-alpine/actinia.cfg

Co-authored-by: Carmen Tawalika <[email protected]>

* PR review CT

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>

* linting: black

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>
mmacata and others added 5 commits April 1, 2022 11:34
* reactivate redis queue

* rename variable

* make queue type configurable

* enhance dev setup for redis queue

* lint

* move user_auth

* move user auth

* move base_login

* move map_layer_base

* move renderer_base

* move resource_base

* fix relative imports

* lint

* first splitup: raster_colors

* splitup download_cache_management

* splitup ephemeral_custom_processing

* splitup ephemeral_processing_with_export

* splitup ephemeral_processing

* splitup renderer_base

* splitup persistent_processing

* splitup location_management

* splitup map_layer_management

* splitup mapset_management

* splitup persistent_mapset_merger

* splitup process_validation

* splitup raster_export

* splitup raster_layer

* splitup raster_legend

* lint

* splitup raster_renderer

* splitup resource_storage_management

* splitup strds_management

* splitup strds_raster_management

* splitup strds_renderer

* splitup vector_layer

* splitup vector_renderer

* lint

* make inheritance more clear

* add readme

* fix import
* update setup from redis to valkey

* replace redis with valkey calls + remove non needed redis-remainings

* replace redis import with valkey import

* adjust function from redis to valkey

* replace redis by valkey function

* fix call of valkey commands fitting valkey-syntax

* Semantic renaming: redis to kvdb (#602)

* semantic renaming: redis to kvdb

* remove non semantic changes

* remove non semantic changes

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* remove non semantic changes

* update readme

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/core/common/config.py

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update docker/actinia-core-alpine/actinia.cfg

Co-authored-by: Carmen Tawalika <[email protected]>

* PR review CT

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>

* linting: black

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>
* reactivate redis queue

* rename variable

* make queue type configurable

* enhance dev setup for redis queue

* lint

* move user_auth

* move user auth

* move base_login

* move map_layer_base

* move renderer_base

* move resource_base

* fix relative imports

* lint

* first splitup: raster_colors

* splitup download_cache_management

* splitup ephemeral_custom_processing

* splitup ephemeral_processing_with_export

* splitup ephemeral_processing

* splitup renderer_base

* splitup persistent_processing

* splitup location_management

* splitup map_layer_management

* splitup mapset_management

* splitup persistent_mapset_merger

* splitup process_validation

* splitup raster_export

* splitup raster_layer

* splitup raster_legend

* lint

* splitup raster_renderer

* splitup resource_storage_management

* splitup strds_management

* splitup strds_raster_management

* splitup strds_renderer

* splitup vector_layer

* splitup vector_renderer

* lint

* make inheritance more clear

* add readme

* fix import
* update setup from redis to valkey

* replace redis with valkey calls + remove non needed redis-remainings

* replace redis import with valkey import

* adjust function from redis to valkey

* replace redis by valkey function

* fix call of valkey commands fitting valkey-syntax

* Semantic renaming: redis to kvdb (#602)

* semantic renaming: redis to kvdb

* remove non semantic changes

* remove non semantic changes

* Apply suggestions from code review

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* remove non semantic changes

* update readme

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/core/common/config.py

Co-authored-by: Carmen Tawalika <[email protected]>

* Update src/actinia_core/README.md

Co-authored-by: Carmen Tawalika <[email protected]>

* Update docker/actinia-core-alpine/actinia.cfg

Co-authored-by: Carmen Tawalika <[email protected]>

* PR review CT

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>

* linting: black

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Carmen Tawalika <[email protected]>
* move modules used by plugins

* move shared modules to common folder
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

ruff

[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Mapset <%s> exists in the global "
"dataset and can not be modified." % mapset


[ruff] reported by reviewdog 🐶

"Unable to access global project <%s>" % self.project_name


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to access mapset <%s> "
"path %s" % (mapset, self.orig_mapset_path)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _check_target_mapset_exists(self):
"""Check if the target mapset exists


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _check_lock_target_mapset(self):
"""
Check if the target mapset exists and lock it, then lock the temporary
mapset


[ruff] reported by reviewdog 🐶

def _lock_target_mapset(self):
"""Lock the target mapset


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to lock project/mapset <%s/%s>, "
"resource is already locked"
% (self.project_name, self.target_mapset_name)


[ruff] reported by reviewdog 🐶

"project/mapset <%s/%s> locked"
% (self.project_name, self.target_mapset_name)


[ruff] reported by reviewdog 🐶

def _merge_mapset_into_target(self, source_mapset, target_mapset):
"""Link the source mapset content into the target mapset


[ruff] reported by reviewdog 🐶

"Copy source mapset <%s> content "
"into the target mapset <%s>" % (source_mapset, target_mapset)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _copy_merge_tmp_mapset_to_target_mapset(self):
"""Copy the temporary mapset into the original project


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Copy temporary mapset from %s to %s"
% (
self.temp_mapset_path,
os.path.join(self.user_project_path, self.target_mapset_name),
)


[ruff] reported by reviewdog 🐶

"Copy temporary mapset <%s> to target project "
"<%s>" % (self.temp_mapset_name, self.project_name)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Copy temporary mapset <%s> to target project "
"<%s>" % (self.target_mapset_name, self.project_name)


[ruff] reported by reviewdog 🐶

["/bin/cp", "-fr", "%s" % source_path, "%s" % target_path],


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

os.path.join(self.user_project_path, self.temp_mapset_name)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute_process_list(self, process_list):
"""Extend the mapset lock and execute the provided process list


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to extend lock for mapset <%s>"
% self.target_mapset_name


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute(self, skip_permission_check=False):
"""Overwrite this function in subclasses


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _final_cleanup(self):
"""
Final cleanup called in the run function at the very end of processing
"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Base class for asynchronous processing
"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.config import global_config, DEFAULT_CONFIG_PATH
from actinia_core.core.common.process_object import Process
from actinia_core.core.grass_init import GrassInitializer
from actinia_core.core.messages_logger import MessageLogger
from actinia_core.core.kvdb_lock import KvdbLockingInterface
from actinia_core.core.resources_logger import ResourceLogger
from actinia_core.core.mapset_merge_utils import change_mapsetname
from actinia_core.core.common.process_chain import (
get_param_stdin_part,
ProcessChainConverter,
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.exceptions import AsyncProcessTimeLimit
from actinia_core.models.response_models import (
ProcessingResponseModel,
ExceptionTracebackModel,


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.interim_results import InterimResult, get_directory_size


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _send_resource_update(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_finished(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_terminated(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_time_limit_exceeded(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_error(self, message, results=None, exception=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_to_database(self, document, final=False):
"""Send the document to the database


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.message_logger.error(
"Unable to send webhook request. Traceback: %s"
% str(run_state)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Send POST request to %s webhook url: %s"
% (type, self.webhook_finished)


[ruff] reported by reviewdog 🐶

if not (500 <= resp.status_code and resp.status_code < 600):


[ruff] reported by reviewdog 🐶

webhook_not_reached is False and resp.status_code not in [200, 204]


[ruff] reported by reviewdog 🐶

"Unable to access %s webhook URL %s" % (type, webhook_url)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Create the process list and check for user permissions.


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

if process.exec_type == "grass" or process.exec_type == "exec":


[ruff] reported by reviewdog 🐶

"Module or executable <%s> is not supported"
% process.executable


[ruff] reported by reviewdog 🐶

"Wrong process description, type: %s "
"module/executable: %s, args: %s"
% (
str(process.exec_type),
str(process.executable),
str(process.executable_params),
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

temporary grass database and temporary file directories


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.user_credentials["permissions"]["process_time_limit"]


[ruff] reported by reviewdog 🐶

def _setup_paths(self):
"""Helper method to setup the paths"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.user_credentials["permissions"]["process_num_limit"]


[ruff] reported by reviewdog 🐶

self.grass_temp_database, self.temp_grass_data_base_name


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

left_over_mapsets = []
for mapset in mapsets:
if mapset not in mapsets_to_link:
left_over_mapsets.append(mapset)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Invalid mapset <%s> in project <%s>"
% (mapset, self.project_name)


[ruff] reported by reviewdog 🐶

"Unable to access global project <%s>" % self.project_name


[ruff] reported by reviewdog 🐶

msg = "Unable to access user project <%s>" % self.project_name


[ruff] reported by reviewdog 🐶

self, grass_data_base, mapset_name="PERMANENT"
):
"""Sets up the GRASS environment to run modules


[ruff] reported by reviewdog 🐶

"Initlialize GRASS grass_data_base: %s; project: %s; mapset: %s"
% (grass_data_base, self.project_name, mapset_name)


[ruff] reported by reviewdog 🐶

):
"""Create the temporary mapset and switch into it


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Rsync interim result mapset to temporary GRASS DB"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Rsync interim result file path to temporary GRASS DB"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"g.mapset", ["-c", "mapset=%s" % temp_mapset_name]


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _check_pixellimit_rimport(self, process_executable_params):


[ruff] reported by reviewdog 🐶

rimport_inp = [x for x in process_executable_params if "input=" in x][
0
].split("=")[1]
rimport_out = [x for x in process_executable_params if "output=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

gdabuildvrt_params.append(vrt_out)
gdabuildvrt_params.append(rimport_inp)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "nsres=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "ewres=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶

if res_val:
if (res_val[0] < res_est) | (res_val[1] < res_est):
# only check if smaller resolution set
res_change_x = res_est / res_val[1]
res_change_y = res_est / res_val[0]
# approximate raster size after resampling
# by using factor of changed resolution
rastersize = (
rastersize_x * res_change_x * rastersize_y * res_change_y
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _adjust_region_size(self, num_cells, ns_res, ew_res):
"""Helper method to adjust the region size


[ruff] reported by reviewdog 🐶

ns_res = ns_res * fak
ew_res = ew_res * fak


[ruff] reported by reviewdog 🐶

"g.region", ["nsres=%f" % ns_res, "ewres=%f" % ew_res, "-g"]


[ruff] reported by reviewdog 🐶

"%f ewres: %f error: %s" % (ns_res, ew_res, stderr_buff)


[ruff] reported by reviewdog 🐶

"%f ewres: %f [num_cells: %d]" % (ns_res, ew_res, num_cells)


[ruff] reported by reviewdog 🐶

def _increment_progress(self, num=1):
"""Increment the progress step by a specific number


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _add_actinia_process(self, process: Process):
"""Add an actinia process to the list and dictionary


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _update_num_of_steps(self, num):
"""Update the number of total steps


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, module_name, module_parameter, proc, poll_time


[ruff] reported by reviewdog 🐶

"""
Wait for a specific process. Catch termination requests, process


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

else:
# Sleep some time and update the resource status
time.sleep(poll_time)
termination_check_count += 1
update_check_count += 1
# Check all 10 loops for termination
if termination_check_count == 10:
termination_check_count = 0
# check if the resource should be terminated
# and kill the current process
if (
self.resource_logger.get_termination(
self.user_id, self.resource_id, self.iteration
)
is True
):
proc.kill()
raise AsyncProcessTermination(
"Process <%s> was terminated "
"by user request" % module_name
)


[ruff] reported by reviewdog 🐶

# Send all 100 loops a status update
if update_check_count == 100:
update_check_count = 0
# Check max runtime of process
curr_time = time.time()
if (curr_time - start_time) > self.process_time_limit:
proc.kill()
raise AsyncProcessTimeLimit(
"Time (%i seconds) exceeded to run executable %s"
% (self.process_time_limit, module_name)
)
# Reduce the length of the command line parameters for
# lesser logging overhead
mparams = str(module_parameter)
if len(mparams) > 100:
mparams = "%s ... %s" % (mparams[0:50], mparams[-50:])
message = (
f"Running executable {module_name} with parameters "
f"{mparams} for {curr_time - start_time} seconds"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Run a process actinia_core.core.common.process_object.Process) with


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated by "
"user request" % process.executable


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated "
"by user request" % process.executable


[ruff] reported by reviewdog 🐶

message = "Running module %s with parameters %s" % (
process.executable,
str(process.executable_params),
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

process.executable, process.executable_params, proc, poll_time


[ruff] reported by reviewdog 🐶

"Error while running executable <%s>" % process.executable


[ruff] reported by reviewdog 🐶

self.progress_steps, self.temp_mapset_path, self.temp_file_path


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

):
"""Create a temporary GRASS GIS environment


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

grass_data_base=self.temp_grass_data_base, mapset_name="PERMANENT"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, process_chain=None, skip_permission_check=False


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, process_chain=None, skip_permission_check=False


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to find process id in module output dictionary"


[ruff] reported by reviewdog 🐶

value_list = []
for value in values:
value_list.append(value.strip())


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute_process_list(self, process_list):
"""
Run all modules or executables that are specified in the process list


[ruff] reported by reviewdog 🐶

def _interim_results(self):
"""Check if interim results should be saved or cleaned up"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

message=self.finish_message, results=self.module_results


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Utils for processing
"""


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.config import global_config


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

imported_class = getattr(imported_module, actinia_class)
return imported_class


[ruff] reported by reviewdog 🐶

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

ruff

[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

os.path.join(self.user_project_path, self.temp_mapset_name)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute_process_list(self, process_list):
"""Extend the mapset lock and execute the provided process list


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to extend lock for mapset <%s>"
% self.target_mapset_name


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute(self, skip_permission_check=False):
"""Overwrite this function in subclasses


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _final_cleanup(self):
"""
Final cleanup called in the run function at the very end of processing
"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Base class for asynchronous processing
"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.config import global_config, DEFAULT_CONFIG_PATH
from actinia_core.core.common.process_object import Process
from actinia_core.core.grass_init import GrassInitializer
from actinia_core.core.messages_logger import MessageLogger
from actinia_core.core.kvdb_lock import KvdbLockingInterface
from actinia_core.core.resources_logger import ResourceLogger
from actinia_core.core.mapset_merge_utils import change_mapsetname
from actinia_core.core.common.process_chain import (
get_param_stdin_part,
ProcessChainConverter,
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.exceptions import AsyncProcessTimeLimit
from actinia_core.models.response_models import (
ProcessingResponseModel,
ExceptionTracebackModel,


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.interim_results import InterimResult, get_directory_size


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _send_resource_update(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_finished(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_terminated(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_time_limit_exceeded(self, message, results=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_resource_error(self, message, results=None, exception=None):
"""Create an HTTP response document and send it to the status database


[ruff] reported by reviewdog 🐶

def _send_to_database(self, document, final=False):
"""Send the document to the database


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.message_logger.error(
"Unable to send webhook request. Traceback: %s"
% str(run_state)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Send POST request to %s webhook url: %s"
% (type, self.webhook_finished)


[ruff] reported by reviewdog 🐶

if not (500 <= resp.status_code and resp.status_code < 600):


[ruff] reported by reviewdog 🐶

webhook_not_reached is False and resp.status_code not in [200, 204]


[ruff] reported by reviewdog 🐶

"Unable to access %s webhook URL %s" % (type, webhook_url)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Create the process list and check for user permissions.


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

if process.exec_type == "grass" or process.exec_type == "exec":


[ruff] reported by reviewdog 🐶

"Module or executable <%s> is not supported"
% process.executable


[ruff] reported by reviewdog 🐶

"Wrong process description, type: %s "
"module/executable: %s, args: %s"
% (
str(process.exec_type),
str(process.executable),
str(process.executable_params),
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

temporary grass database and temporary file directories


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.user_credentials["permissions"]["process_time_limit"]


[ruff] reported by reviewdog 🐶

def _setup_paths(self):
"""Helper method to setup the paths"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.user_credentials["permissions"]["process_num_limit"]


[ruff] reported by reviewdog 🐶

self.grass_temp_database, self.temp_grass_data_base_name


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

left_over_mapsets = []
for mapset in mapsets:
if mapset not in mapsets_to_link:
left_over_mapsets.append(mapset)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Invalid mapset <%s> in project <%s>"
% (mapset, self.project_name)


[ruff] reported by reviewdog 🐶

"Unable to access global project <%s>" % self.project_name


[ruff] reported by reviewdog 🐶

msg = "Unable to access user project <%s>" % self.project_name


[ruff] reported by reviewdog 🐶

self, grass_data_base, mapset_name="PERMANENT"
):
"""Sets up the GRASS environment to run modules


[ruff] reported by reviewdog 🐶

"Initlialize GRASS grass_data_base: %s; project: %s; mapset: %s"
% (grass_data_base, self.project_name, mapset_name)


[ruff] reported by reviewdog 🐶

):
"""Create the temporary mapset and switch into it


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Rsync interim result mapset to temporary GRASS DB"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Rsync interim result file path to temporary GRASS DB"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"g.mapset", ["-c", "mapset=%s" % temp_mapset_name]


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _check_pixellimit_rimport(self, process_executable_params):


[ruff] reported by reviewdog 🐶

rimport_inp = [x for x in process_executable_params if "input=" in x][
0
].split("=")[1]
rimport_out = [x for x in process_executable_params if "output=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

gdabuildvrt_params.append(vrt_out)
gdabuildvrt_params.append(rimport_inp)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "nsres=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "ewres=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶

if res_val:
if (res_val[0] < res_est) | (res_val[1] < res_est):
# only check if smaller resolution set
res_change_x = res_est / res_val[1]
res_change_y = res_est / res_val[0]
# approximate raster size after resampling
# by using factor of changed resolution
rastersize = (
rastersize_x * res_change_x * rastersize_y * res_change_y
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _adjust_region_size(self, num_cells, ns_res, ew_res):
"""Helper method to adjust the region size


[ruff] reported by reviewdog 🐶

ns_res = ns_res * fak
ew_res = ew_res * fak


[ruff] reported by reviewdog 🐶

"g.region", ["nsres=%f" % ns_res, "ewres=%f" % ew_res, "-g"]


[ruff] reported by reviewdog 🐶

"%f ewres: %f error: %s" % (ns_res, ew_res, stderr_buff)


[ruff] reported by reviewdog 🐶

"%f ewres: %f [num_cells: %d]" % (ns_res, ew_res, num_cells)


[ruff] reported by reviewdog 🐶

def _increment_progress(self, num=1):
"""Increment the progress step by a specific number


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _add_actinia_process(self, process: Process):
"""Add an actinia process to the list and dictionary


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _update_num_of_steps(self, num):
"""Update the number of total steps


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, module_name, module_parameter, proc, poll_time


[ruff] reported by reviewdog 🐶

"""
Wait for a specific process. Catch termination requests, process


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

else:
# Sleep some time and update the resource status
time.sleep(poll_time)
termination_check_count += 1
update_check_count += 1
# Check all 10 loops for termination
if termination_check_count == 10:
termination_check_count = 0
# check if the resource should be terminated
# and kill the current process
if (
self.resource_logger.get_termination(
self.user_id, self.resource_id, self.iteration
)
is True
):
proc.kill()
raise AsyncProcessTermination(
"Process <%s> was terminated "
"by user request" % module_name
)


[ruff] reported by reviewdog 🐶

# Send all 100 loops a status update
if update_check_count == 100:
update_check_count = 0
# Check max runtime of process
curr_time = time.time()
if (curr_time - start_time) > self.process_time_limit:
proc.kill()
raise AsyncProcessTimeLimit(
"Time (%i seconds) exceeded to run executable %s"
% (self.process_time_limit, module_name)
)
# Reduce the length of the command line parameters for
# lesser logging overhead
mparams = str(module_parameter)
if len(mparams) > 100:
mparams = "%s ... %s" % (mparams[0:50], mparams[-50:])
message = (
f"Running executable {module_name} with parameters "
f"{mparams} for {curr_time - start_time} seconds"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Run a process actinia_core.core.common.process_object.Process) with


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated by "
"user request" % process.executable


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated "
"by user request" % process.executable


[ruff] reported by reviewdog 🐶

message = "Running module %s with parameters %s" % (
process.executable,
str(process.executable_params),
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

process.executable, process.executable_params, proc, poll_time


[ruff] reported by reviewdog 🐶

"Error while running executable <%s>" % process.executable


[ruff] reported by reviewdog 🐶

self.progress_steps, self.temp_mapset_path, self.temp_file_path


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

):
"""Create a temporary GRASS GIS environment


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

grass_data_base=self.temp_grass_data_base, mapset_name="PERMANENT"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, process_chain=None, skip_permission_check=False


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, process_chain=None, skip_permission_check=False


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Unable to find process id in module output dictionary"


[ruff] reported by reviewdog 🐶

value_list = []
for value in values:
value_list.append(value.strip())


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute_process_list(self, process_list):
"""
Run all modules or executables that are specified in the process list


[ruff] reported by reviewdog 🐶

def _interim_results(self):
"""Check if interim results should be saved or cleaned up"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

message=self.finish_message, results=self.module_results


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Utils for processing
"""


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.config import global_config


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

imported_class = getattr(imported_module, actinia_class)
return imported_class


[ruff] reported by reviewdog 🐶

mmacata and others added 3 commits June 2, 2025 17:14
* reactivate redis queue

* rename variable

* make queue type configurable

* enhance dev setup for redis queue

* lint

* move user_auth

* move user auth

* move base_login

* move map_layer_base

* move renderer_base

* move resource_base

* fix relative imports

* lint

* first splitup: raster_colors

* splitup download_cache_management

* splitup ephemeral_custom_processing

* splitup ephemeral_processing_with_export

* splitup ephemeral_processing

* splitup renderer_base

* splitup persistent_processing

* splitup location_management

* splitup map_layer_management

* splitup mapset_management

* splitup persistent_mapset_merger

* splitup process_validation

* splitup raster_export

* splitup raster_layer

* splitup raster_legend

* lint

* splitup raster_renderer

* splitup resource_storage_management

* splitup strds_management

* splitup strds_raster_management

* splitup strds_renderer

* splitup vector_layer

* splitup vector_renderer

* lint

* make inheritance more clear

* add readme

* fix import
Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

ruff

[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Export vector layer <%s> to PostgreSQL database"
% (file_name)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute(self, skip_permission_check=False):
"""Overwrite this function in subclasses


[ruff] reported by reviewdog 🐶

def _final_cleanup(self):
"""
Overwrite this function in subclasses to perform the final cleanup
"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.config import DEFAULT_CONFIG_PATH, global_config


[ruff] reported by reviewdog 🐶

from flask import json
from requests.auth import HTTPBasicAuth

Copy link
Contributor

@github-actions github-actions bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit

ruff

[ruff] reported by reviewdog 🐶

"Initlialize GRASS grass_data_base: %s; project: %s; mapset: %s"
% (grass_data_base, self.project_name, mapset_name),


[ruff] reported by reviewdog 🐶

):
"""Create the temporary mapset and switch into it


[ruff] reported by reviewdog 🐶

["-c", "mapset=%s" % temp_mapset_name],


[ruff] reported by reviewdog 🐶

"mapset=%s" % (",".join(self.required_mapsets)),


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _check_pixellimit_rimport(self, process_executable_params):


[ruff] reported by reviewdog 🐶

rimport_inp = [x for x in process_executable_params if "input=" in x][
0
].split("=")[1]
rimport_out = [x for x in process_executable_params if "output=" in x][
0
].split("=")[1]


[ruff] reported by reviewdog 🐶

gdabuildvrt_params.append(vrt_out)
gdabuildvrt_params.append(rimport_inp)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "nsres=" in x][
0
].split("=")[1],


[ruff] reported by reviewdog 🐶

[x for x in stdout_gregion.split("\n") if "ewres=" in x][
0
].split("=")[1],


[ruff] reported by reviewdog 🐶

if res_val:
if (res_val[0] < res_est) | (res_val[1] < res_est):
# only check if smaller resolution set
res_change_x = res_est / res_val[1]
res_change_y = res_est / res_val[0]
# approximate raster size after resampling
# by using factor of changed resolution
rastersize = (
rastersize_x * res_change_x * rastersize_y * res_change_y
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _adjust_region_size(self, num_cells, ns_res, ew_res):
"""Helper method to adjust the region size


[ruff] reported by reviewdog 🐶

ns_res = ns_res * fak
ew_res = ew_res * fak


[ruff] reported by reviewdog 🐶

["nsres=%f" % ns_res, "ewres=%f" % ew_res, "-g"],


[ruff] reported by reviewdog 🐶

"%f ewres: %f error: %s" % (ns_res, ew_res, stderr_buff),


[ruff] reported by reviewdog 🐶

def _increment_progress(self, num=1):
"""Increment the progress step by a specific number


[ruff] reported by reviewdog 🐶

def _add_actinia_process(self, process: Process):
"""Add an actinia process to the list and dictionary


[ruff] reported by reviewdog 🐶

def _update_num_of_steps(self, num):
"""Update the number of total steps


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated "
"by user request" % module_name,


[ruff] reported by reviewdog 🐶

mparams = "%s ... %s" % (mparams[0:50], mparams[-50:])


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated by "
"user request" % process.executable,


[ruff] reported by reviewdog 🐶

"Process <%s> was terminated "
"by user request" % process.executable,


[ruff] reported by reviewdog 🐶

message = "Running module %s with parameters %s" % (
process.executable,
str(process.executable_params),
)


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"Error while running executable <%s>" % process.executable,


[ruff] reported by reviewdog 🐶

):
"""Create a temporary GRASS GIS environment


[ruff] reported by reviewdog 🐶

def _execute(self, skip_permission_check=False):


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

value_list = []
for value in values:
value_list.append(value.strip())


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute_process_list(self, process_list):
"""Run all modules or executables that are specified in the process list


[ruff] reported by reviewdog 🐶

def _interim_results(self):
"""Check if interim results should be saved or cleaned up"""


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"""
Asynchronous computation in specific temporary generated mapsets


[ruff] reported by reviewdog 🐶

from actinia_core.core.common.process_object import Process


[ruff] reported by reviewdog 🐶

from actinia_processing_lib.ephemeral_processing import EphemeralProcessing


[ruff] reported by reviewdog 🐶

"""
This class processes GRASS data on the local machine in an temporary mapset


[ruff] reported by reviewdog 🐶

def __init__(self, rdc):
"""
Setup the variables of this class


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

executable_params=["raster=%s" % raster_name, "-g"],


[ruff] reported by reviewdog 🐶

"COG driver not available, using GTiff driver"


[ruff] reported by reviewdog 🐶

"input=%s" % raster_name,
"format=%s" % format,
"output=%s" % output_path,


[ruff] reported by reviewdog 🐶

"Only GTiff driver is supported for STRDS export."


[ruff] reported by reviewdog 🐶

"input=%s" % strds_name,
"format=%s" % format,
"output=%s" % output_path,
"directory=%s" % self.temp_file_path,
"compression=%s" % "gzip",


[ruff] reported by reviewdog 🐶

self, vector_name, format="GPKG", additional_options=[]


[ruff] reported by reviewdog 🐶

"""
Export a specific vector layer with v.out.ogr using a specific output
format


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

"input=%s" % vector_name,
"format=%s" % format,
"output=%s" % file_name,


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self, vector_name, dbstring, output_layer=None, additional_options=[]
):
"""
Export a specific vector layer with v.out.postgis to a PostGIS database


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

args = ["-l", "input=%s" % vector_name, "output=%s" % dbstring]


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _export_resources(self, use_raster_region=False):
"""
Export all resources that were listed in the process chain description.


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

self.user_id, self.resource_id, self.iteration
)


[ruff] reported by reviewdog 🐶

"Resource export was terminated by user request"


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

message = "Export raster layer <%s> with format %s" % (


[ruff] reported by reviewdog 🐶

"Export vector layer <%s> to PostgreSQL database"
% (file_name)


[ruff] reported by reviewdog 🐶

message = "Export vector layer <%s> with format %s" % (


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

message = "Export strds layer <%s> with format %s" % (


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶


[ruff] reported by reviewdog 🐶

def _execute(self, skip_permission_check=False):
"""Overwrite this function in subclasses


[ruff] reported by reviewdog 🐶

def _final_cleanup(self):
"""
Overwrite this function in subclasses to perform the final cleanup
"""


[ruff] reported by reviewdog 🐶

from actinia_processing_lib.exceptions import AsyncProcessError


[ruff] reported by reviewdog 🐶

@mmacata mmacata marked this pull request as ready for review June 6, 2025 06:14
@mmacata mmacata merged commit 89a503b into main Jun 12, 2025
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants