From 245bfa0382bdda7b0fc8e4476022f80a43a9af21 Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Wed, 1 Oct 2025 20:33:10 +0200 Subject: [PATCH 01/11] Add 'categorieoppwaterlichaam' to INCLUDE_COLUMNS and test_hydroobjects --- hydamo_validation/validator.py | 8 ++++---- tests/test_dommelerwaard.py | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/hydamo_validation/validator.py b/hydamo_validation/validator.py index 916c4b0..f62ebe6 100644 --- a/hydamo_validation/validator.py +++ b/hydamo_validation/validator.py @@ -23,7 +23,7 @@ OUTPUT_TYPES = ["geopackage", "geojson", "csv"] LOG_LEVELS = Literal["INFO", "DEBUG"] -INCLUDE_COLUMNS = ["nen3610id", "code"] +INCLUDE_COLUMNS = ["nen3610id", "code", "categorieoppwaterlichaam"] SCHEMAS_PATH = Path(__file__).parent.joinpath(r"./schemas") HYDAMO_SCHEMAS_PATH = SCHEMAS_PATH.joinpath("hydamo") RULES_SCHEMAS_PATH = SCHEMAS_PATH.joinpath("rules") @@ -219,8 +219,8 @@ def _validator( if not path.exists(): missing_paths += [str(path)] if missing_paths: - result_summary.error += [f'missing_paths: {",".join(missing_paths)}'] - raise FileNotFoundError(f'missing_paths: {",".join(missing_paths)}') + result_summary.error += [f"missing_paths: {','.join(missing_paths)}"] + raise FileNotFoundError(f"missing_paths: {','.join(missing_paths)}") else: validation_rules_sets = read_validation_rules( validation_rules_json, result_summary @@ -232,7 +232,7 @@ def _validator( ] if unsupported_output_types: error_message = ( - r"unsupported output types: " f'{",".join(unsupported_output_types)}' + r"unsupported output types: " f"{','.join(unsupported_output_types)}" ) result_summary.error += [error_message] raise TypeError(error_message) diff --git a/tests/test_dommelerwaard.py b/tests/test_dommelerwaard.py index a855bd2..b00e2a4 100644 --- a/tests/test_dommelerwaard.py +++ b/tests/test_dommelerwaard.py @@ -30,6 +30,7 @@ def test_hydroobjects(): [ "nen3610id", "code", + "categorieoppwaterlichaam", "geometry", "syntax_breedte", "syntax_categorieoppwaterlichaam", From 73cf28a6280172a9e2f0b2f5398871c6da13eae2 Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Wed, 1 Oct 2025 20:35:49 +0200 Subject: [PATCH 02/11] Bump version to 1.4.1 --- hydamo_validation/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hydamo_validation/__init__.py b/hydamo_validation/__init__.py index f4c5a12..cb5401c 100644 --- a/hydamo_validation/__init__.py +++ b/hydamo_validation/__init__.py @@ -1,7 +1,7 @@ __author__ = ["Het Waterschapshuis", "D2HYDRO", "HKV", "HydroConsult"] __copyright__ = "Copyright 2021, HyDAMO ValidatieTool" __credits__ = ["D2HYDRO", "HKV", "HydroConsult"] -__version__ = "1.4.0" +__version__ = "1.4.1" __license__ = "MIT" __maintainer__ = "Daniel Tollenaar" From 8615c4b67710ad71d20c4f9e6504d1337131352d Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Wed, 1 Oct 2025 22:05:25 +0200 Subject: [PATCH 03/11] Remove unused import of Path from __init__.py --- hydamo_validation/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/hydamo_validation/__init__.py b/hydamo_validation/__init__.py index cb5401c..c3fd4d8 100644 --- a/hydamo_validation/__init__.py +++ b/hydamo_validation/__init__.py @@ -8,7 +8,6 @@ __email__ = "daniel@d2hydro.nl" import fiona # top-level import to avoid fiona import issue: https://github.com/conda-forge/fiona-feedstock/issues/213 -from pathlib import Path from hydamo_validation.functions import topologic as topologic_functions from hydamo_validation.functions import logic as logic_functions from hydamo_validation.functions import general as general_functions From 58943981ac12dc62e471abe2b9334bea57befccc Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Thu, 9 Oct 2025 16:18:48 +0200 Subject: [PATCH 04/11] disregard snapping in _get_nodes function when tolerance is None --- hydamo_validation/functions/topologic.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/hydamo_validation/functions/topologic.py b/hydamo_validation/functions/topologic.py index 1b29285..fc7d884 100644 --- a/hydamo_validation/functions/topologic.py +++ b/hydamo_validation/functions/topologic.py @@ -133,7 +133,7 @@ def _snap_nodes(row, series, tolerance): return geom -def _get_nodes(gdf, tolerance): +def _get_nodes(gdf, tolerance: float | None = None): # start and end-nodes to GeoSeries nodes_series = gdf["geometry"].apply(lambda x: Point(x.coords[0])) nodes_series = pd.concat( @@ -142,11 +142,12 @@ def _get_nodes(gdf, tolerance): # snap nodes within tolerance: nodes within tolerance get the coordinate # of the first node. - nodes_series = gpd.GeoSeries( - gpd.GeoDataFrame(nodes_series, columns=["geometry"]).apply( - lambda x: _snap_nodes(x, nodes_series, tolerance), axis=1 + if tolerance is not None: + nodes_series = gpd.GeoSeries( + gpd.GeoDataFrame(nodes_series, columns=["geometry"]).apply( + lambda x: _snap_nodes(x, nodes_series, tolerance), axis=1 + ) ) - ) # as all is snapped we can filter unique points nodes_series = gpd.GeoSeries(nodes_series.unique()) @@ -456,10 +457,10 @@ def splitted_at_junction(gdf, datamodel, tolerance): """ # get the nodes of the hydroobjects within tolerance - nodes_series = _get_nodes(gdf, tolerance) + nodes_series = _get_nodes(gdf, tolerance=None) # check for lines if there are nodes on segment outside tolerance of - # the start-node and end-node. + # the lines start-node and end-node. sindex = nodes_series.sindex return gdf.apply( (lambda x: _only_end_nodes(x, nodes_series, sindex, tolerance)), axis=1 From 3cc8468997207ca9daa0ce695d7294e8c0c3c070 Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Fri, 10 Oct 2025 06:32:44 +0200 Subject: [PATCH 05/11] refactor: pass logger to LayersSummary constructor for improved logging --- hydamo_validation/summaries.py | 6 ++---- hydamo_validation/validator.py | 8 ++++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/hydamo_validation/summaries.py b/hydamo_validation/summaries.py index 03c715f..477bc79 100644 --- a/hydamo_validation/summaries.py +++ b/hydamo_validation/summaries.py @@ -1,4 +1,3 @@ -import logging import geopandas as gpd import pandas as pd from pathlib import Path @@ -10,11 +9,10 @@ class LayersSummary: - def __init__(self, log_level="DEBUG", date_check=pd.Timestamp.now().isoformat()): + def __init__(self, logger, date_check=pd.Timestamp.now().isoformat()): self.geo_types = {} self.date_check = date_check - self.logger = logging.getLogger(__name__) - self.logger.setLevel(getattr(logging, log_level)) + self.logger = logger def _get_properties(self, gdf): properties = {"nen3610id": "str"} diff --git a/hydamo_validation/validator.py b/hydamo_validation/validator.py index 916c4b0..a8a1f7c 100644 --- a/hydamo_validation/validator.py +++ b/hydamo_validation/validator.py @@ -190,7 +190,7 @@ def _validator( logger.info("init validatie") date_check = pd.Timestamp.now().isoformat() result_summary = ResultSummary(date_check=date_check) - layers_summary = LayersSummary(date_check=date_check) + layers_summary = LayersSummary(logger=logger, date_check=date_check) # check if all files are present # create a results_path permission_error = False @@ -219,8 +219,8 @@ def _validator( if not path.exists(): missing_paths += [str(path)] if missing_paths: - result_summary.error += [f'missing_paths: {",".join(missing_paths)}'] - raise FileNotFoundError(f'missing_paths: {",".join(missing_paths)}') + result_summary.error += [f"missing_paths: {','.join(missing_paths)}"] + raise FileNotFoundError(f"missing_paths: {','.join(missing_paths)}") else: validation_rules_sets = read_validation_rules( validation_rules_json, result_summary @@ -232,7 +232,7 @@ def _validator( ] if unsupported_output_types: error_message = ( - r"unsupported output types: " f'{",".join(unsupported_output_types)}' + r"unsupported output types: " f"{','.join(unsupported_output_types)}" ) result_summary.error += [error_message] raise TypeError(error_message) From 4205c9130867648f971d550cdac6dc2a1f3d520c Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Sat, 11 Oct 2025 10:12:02 +0200 Subject: [PATCH 06/11] improved (process) logging with tqdm progress bars --- hydamo_validation/functions/topologic.py | 32 ++++++++++++++---------- hydamo_validation/validator.py | 17 ++++++++++--- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/hydamo_validation/functions/topologic.py b/hydamo_validation/functions/topologic.py index fc7d884..84f478c 100644 --- a/hydamo_validation/functions/topologic.py +++ b/hydamo_validation/functions/topologic.py @@ -5,6 +5,9 @@ import pandas as pd from shapely.geometry import Point from hydamo_validation import geometry +from tqdm import tqdm + +tqdm.pandas(desc="Processing rows") """ In this block we define supporting functions. Supporting functions are ignored @@ -157,9 +160,10 @@ def _get_nodes(gdf, tolerance: float | None = None): def _only_end_nodes(row, series, sindex, tolerance): geometry = row["geometry"] - indices = list(sindex.intersection(geometry.bounds)) + # indices = list(sindex.intersection(geometry.bounds)) + indices = list(sindex.query(geometry.buffer(tolerance), predicate="within")) if indices: - series_select = series.loc[indices] + series_select = series.iloc[indices] only_end_nodes = all( _point_not_overlapping_line(i, geometry, tolerance) for i in series_select ) @@ -425,11 +429,11 @@ def not_overlapping(gdf, datamodel, tolerance): """ sindex = gdf.sindex if (gdf.geom_type == "LineString").all(): - return gdf.apply( + return gdf.progress_apply( lambda x: _not_overlapping_line(x, gdf, sindex, tolerance), axis=1 ) elif (gdf.geom_type == "Point").all(): - return gdf.apply( + return gdf.progress_apply( lambda x: _not_overlapping_point(x, gdf, sindex, tolerance), axis=1 ) else: @@ -462,7 +466,7 @@ def splitted_at_junction(gdf, datamodel, tolerance): # check for lines if there are nodes on segment outside tolerance of # the lines start-node and end-node. sindex = nodes_series.sindex - return gdf.apply( + return gdf.progress_apply( (lambda x: _only_end_nodes(x, nodes_series, sindex, tolerance)), axis=1 ) @@ -494,7 +498,7 @@ def structures_at_intersections(gdf, datamodel, structures, tolerance): sindex = gdf.sindex struc_sindex = struc_series.sindex # return result - return gdf.apply( + return gdf.progress_apply( lambda x: _structures_at_intersections( x, gdf, sindex, struc_series, struc_sindex, tolerance ), @@ -521,11 +525,11 @@ def no_dangling_node(gdf, datamodel, tolerance): Default dtype is bool """ - end_nodes_series = gdf["geometry"].apply(lambda x: Point(x.coords[-1])) - series = gdf["geometry"].apply(lambda x: Point(x.coords[0])) + end_nodes_series = gdf["geometry"].progress_apply(lambda x: Point(x.coords[-1])) + series = gdf["geometry"].progress_apply(lambda x: Point(x.coords[0])) sindex = series.sindex - return end_nodes_series.apply( + return end_nodes_series.progress_apply( lambda x: _intersects_end_node(x, series, sindex, tolerance) ) @@ -562,7 +566,7 @@ def structures_at_boundaries(gdf, datamodel, areas, structures, tolerance, dista struc_series = _layers_from_datamodel(structures, datamodel) struc_sindex = struc_series.sindex - return gdf.apply( + return gdf.progress_apply( lambda x: _structures_at_boundaries( x, areas_gdf, areas_sindex, struc_series, struc_sindex, tolerance, distance ), @@ -592,7 +596,9 @@ def distant_to_others(gdf, datamodel, distance): sindex = gdf.sindex - return gdf.apply(lambda x: _distant_to_others(x, gdf, sindex, distance), axis=1) + return gdf.progress_apply( + lambda x: _distant_to_others(x, gdf, sindex, distance), axis=1 + ) def structures_at_nodes(gdf, datamodel, structures, tolerance): @@ -619,7 +625,7 @@ def structures_at_nodes(gdf, datamodel, structures, tolerance): struc_series = _layers_from_datamodel(structures, datamodel) struc_sindex = struc_series.sindex - return gdf["geometry"].apply( + return gdf["geometry"].progress_apply( lambda x: _no_struc_on_line(x, struc_series, struc_sindex, tolerance) ) @@ -664,7 +670,7 @@ def compare_longitudinal( ) geometry.find_nearest_branch(branches=branches, geometries=gdf, method="overall") - return gdf.apply( + return gdf.progress_apply( lambda x: _compare_longitudinal( x, parameter, compare_gdf, compare_parameter, direction, logical_operator ), diff --git a/hydamo_validation/validator.py b/hydamo_validation/validator.py index a8a1f7c..fa78e6d 100644 --- a/hydamo_validation/validator.py +++ b/hydamo_validation/validator.py @@ -19,14 +19,17 @@ missing_layers, fields_syntax, ) +import sys import traceback + OUTPUT_TYPES = ["geopackage", "geojson", "csv"] LOG_LEVELS = Literal["INFO", "DEBUG"] INCLUDE_COLUMNS = ["nen3610id", "code"] SCHEMAS_PATH = Path(__file__).parent.joinpath(r"./schemas") HYDAMO_SCHEMAS_PATH = SCHEMAS_PATH.joinpath("hydamo") RULES_SCHEMAS_PATH = SCHEMAS_PATH.joinpath("rules") +LOGGING_FORMAT = "%(asctime)s %(levelname)s %(name)s - %(message)s" def _read_schema(version, schemas_path): @@ -38,17 +41,23 @@ def _read_schema(version, schemas_path): def _init_logger(log_level): """Init logger for validator.""" + + # Set up logging to console + logging.basicConfig( + level=getattr(logging, log_level), + format=LOGGING_FORMAT, + handlers=[logging.StreamHandler(sys.stdout)], + force=True, + ) + # Get logger logger = logging.getLogger(__name__) - logger.setLevel(getattr(logging, log_level)) return logger def _add_log_file(logger, log_file): """Add log-file to existing logger""" fh = logging.FileHandler(log_file) - fh.setFormatter( - logging.Formatter("%(asctime)s %(name)s %(levelname)s - %(message)s") - ) + fh.setFormatter(logging.Formatter(LOGGING_FORMAT)) fh.setLevel(logging.DEBUG) logger.addHandler(fh) return logger From e09d24d26e3a279d8a28cf2c5a24e03947ee84d1 Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Wed, 5 Nov 2025 14:44:49 +0100 Subject: [PATCH 07/11] improved logging and tqdm (tests still failing!) --- envs/dev_environment.yml | 1 + envs/environment.yml | 3 ++- hydamo_validation/functions/topologic.py | 4 ++-- pyproject.toml | 1 + tests/test_summaries.py | 3 ++- 5 files changed, 8 insertions(+), 4 deletions(-) diff --git a/envs/dev_environment.yml b/envs/dev_environment.yml index 62d6d50..7d11a94 100644 --- a/envs/dev_environment.yml +++ b/envs/dev_environment.yml @@ -22,4 +22,5 @@ dependencies: - rasterstats==0.19.0 - rtree - shapely==2.0.2 + - tqdm - twine diff --git a/envs/environment.yml b/envs/environment.yml index f0c46ef..d211283 100644 --- a/envs/environment.yml +++ b/envs/environment.yml @@ -14,4 +14,5 @@ dependencies: - rasterio==1.3.9 - rasterstats==0.19.0 - shapely==2.0.2 - - rtree \ No newline at end of file + - rtree + - tqdm \ No newline at end of file diff --git a/hydamo_validation/functions/topologic.py b/hydamo_validation/functions/topologic.py index 84f478c..e4de3cb 100644 --- a/hydamo_validation/functions/topologic.py +++ b/hydamo_validation/functions/topologic.py @@ -160,8 +160,8 @@ def _get_nodes(gdf, tolerance: float | None = None): def _only_end_nodes(row, series, sindex, tolerance): geometry = row["geometry"] - # indices = list(sindex.intersection(geometry.bounds)) - indices = list(sindex.query(geometry.buffer(tolerance), predicate="within")) + indices = list(sindex.intersection(geometry.bounds)) + # indices = list(sindex.query(geometry.buffer(tolerance), predicate="within")) if indices: series_select = series.iloc[indices] only_end_nodes = all( diff --git a/pyproject.toml b/pyproject.toml index b8a2d68..f26f495 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ dependencies = [ "rasterio", "shapely>=2", "rasterstats", + "tqdm" ] dynamic = ["version"] diff --git a/tests/test_summaries.py b/tests/test_summaries.py index 7f7ccc6..0e748dd 100644 --- a/tests/test_summaries.py +++ b/tests/test_summaries.py @@ -3,6 +3,7 @@ from hydamo_validation.datasets import DataSets from pathlib import Path import shutil +import logging try: from .config import DATA_DIR @@ -15,7 +16,7 @@ exports_dir.mkdir(exist_ok=True) datasets = DataSets(dataset_path) -layers_summary = LayersSummary() +layers_summary = LayersSummary(logger=logging.getLogger("test_logger")) result_summary = ResultSummary() result_summary.dataset_layers = datasets.layers From 47a2b2f774bf06854f87e0cbc5b8f1e9b5923ced Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Mon, 24 Nov 2025 11:36:09 +0100 Subject: [PATCH 08/11] sindex.query with predicate intersects (tests pass) --- hydamo_validation/functions/topologic.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hydamo_validation/functions/topologic.py b/hydamo_validation/functions/topologic.py index e4de3cb..6764207 100644 --- a/hydamo_validation/functions/topologic.py +++ b/hydamo_validation/functions/topologic.py @@ -160,8 +160,7 @@ def _get_nodes(gdf, tolerance: float | None = None): def _only_end_nodes(row, series, sindex, tolerance): geometry = row["geometry"] - indices = list(sindex.intersection(geometry.bounds)) - # indices = list(sindex.query(geometry.buffer(tolerance), predicate="within")) + indices = list(sindex.query(geometry.buffer(tolerance), predicate="intersects")) if indices: series_select = series.iloc[indices] only_end_nodes = all( From 2acea2b3284307399751b0be1ed416c053aec7ed Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Mon, 24 Nov 2025 14:28:28 +0100 Subject: [PATCH 09/11] _snap nodes eruit --- hydamo_validation/functions/topologic.py | 30 +++--------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/hydamo_validation/functions/topologic.py b/hydamo_validation/functions/topologic.py index 6764207..c1e2e0b 100644 --- a/hydamo_validation/functions/topologic.py +++ b/hydamo_validation/functions/topologic.py @@ -120,38 +120,13 @@ def _not_overlapping_point(row, gdf, sindex, tolerance, exclude_row=True): return not_overlapping -def _snap_nodes(row, series, tolerance): - series_selec = series.loc[~(series.index == row.name)] - indices = series_selec.loc[ - (series_selec.distance(row["geometry"]) < tolerance) - ].index.to_list() - geom = None - if indices: - indices.sort() - if indices[0] < row.name: - geom = series.loc[indices[0]] - if geom is None: - geom = row["geometry"] - - return geom - - -def _get_nodes(gdf, tolerance: float | None = None): +def _get_nodes(gdf): # start and end-nodes to GeoSeries nodes_series = gdf["geometry"].apply(lambda x: Point(x.coords[0])) nodes_series = pd.concat( [nodes_series, gdf["geometry"].apply(lambda x: Point(x.coords[-1]))] ).reset_index(drop=True) - # snap nodes within tolerance: nodes within tolerance get the coordinate - # of the first node. - if tolerance is not None: - nodes_series = gpd.GeoSeries( - gpd.GeoDataFrame(nodes_series, columns=["geometry"]).apply( - lambda x: _snap_nodes(x, nodes_series, tolerance), axis=1 - ) - ) - # as all is snapped we can filter unique points nodes_series = gpd.GeoSeries(nodes_series.unique()) @@ -460,7 +435,8 @@ def splitted_at_junction(gdf, datamodel, tolerance): """ # get the nodes of the hydroobjects within tolerance - nodes_series = _get_nodes(gdf, tolerance=None) + # nodes_series = _get_nodes(gdf, tolerance=None) + nodes_series = _get_nodes(gdf) # check for lines if there are nodes on segment outside tolerance of # the lines start-node and end-node. From 8a115134c0ec3dff7b4da3a3405c70e58664ce41 Mon Sep 17 00:00:00 2001 From: Daniel Tollenaar Date: Mon, 1 Dec 2025 19:47:03 +0100 Subject: [PATCH 10/11] release-docs --- docs/guides/release.md | 51 ++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 52 insertions(+) create mode 100644 docs/guides/release.md diff --git a/docs/guides/release.md b/docs/guides/release.md new file mode 100644 index 0000000..8f43ffc --- /dev/null +++ b/docs/guides/release.md @@ -0,0 +1,51 @@ +# Release + +Deze handleiding volgt op de handleiding `contribute` en beschrijft de release-procedure vanuit de main branch. + +## 1. Verander het versienummer van de module + +Kies het nieuwe versienummer volgens _semantic versioning_: + +- **MAJOR**: brekende wijzigingen (bijv. `1.0.0` → `2.0.0`) +- **MINOR**: nieuwe functionaliteit, achterwaarts compatibel (bijv. `1.3.0` → `1.4.0`) +- **PATCH**: bugfixes, kleine wijzigingen (bijv. `1.3.2` → `1.3.3`) + +Voorbeeld: huidige versie is `1.4.1`, je kiest `1.4.2` omdat we bestaande functionaliteit hebben verbeterd. + +Zet het versienummer in `hydamo_validation/__init__.py` achter [`__version__`](https://github.com/HetWaterschapshuis/HyDAMOValidatieModule/blob/main/hydamo_validation/__init__.py#L4). + +Zorg dat alle wijzigingen via Pull Requests zijn gecommit in de main branch + + +## 2. Testen +Nadat álle code voor een nieuwe release is gecommit in de main branch, draai nog 1x alle tests met pytest. In de dev-environment (zie `env/dev_environment.yml`) is pytest beschikbaar. Run: + +`pytest --cov=hydamo_validation tests/` + +Publiceer alleen als alle tests slagen: +![](images/test.png "pytest") + +## 3. Aanmaken van een release +Zorg dat alle wijzigingen via Pull Requests zijn gecommit in de main branch + +1. Ga naar de GitHub-pagina van de repository. +2. Klik op Releases (rechts in de sidebar of onder het tabje “Code”). +3. Klik op `Draft a new release` (of New release). +4. Kies `Tag: Select tag` en kies `Create new tag`. Maak een annotated tag gelijk aan versienummer, dus `v.X.Y.Z`, bijvoorbeeld `v1.4.2` +5. Laat `Target: main` +6. Zet de tag in de `Release title`, dus weer `vX.Y.Z`, dus `v1.4.2` in het voorbeeld hierboven +7. `Release notes`, klik eventueel `Generate release notes` en/of beschrijf de belangrijkste wijzigingen: + * Nieuwe features + * Bugfixes + * Breaking changes +8. Klik op `Publish release` + +Je ziet nu een nieuwe release beschikbaar in GitHub met een `afdruk` van de code uit de main branch + +## 4. Publiceren op PyPi + +Publiceren doe je in 2 stappen: +1. Bouw distributies met `python setup.py sdist` +2. Upload naar PyPI `twine upload dist/* -p jouw_eigen_twine_password` + +De laatste release moet nu ook beschikbaar zijn op https://pypi.org/project/hydamo-validation/ en wordt vanaf nu geinstalleerd met `pip install hydamo-validation` \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index d7a52a8..ba09740 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -11,6 +11,7 @@ nav: - Guides: - Get Started: guides/get_started.md - Contribute: guides/contribute.md + - Release: guides/release.md - Code Reference: - DataSets: reference/datasets.md - HyDAMO: reference/hydamo.md From e9bccf379a79a6a54f974effde497ccd37815f2c Mon Sep 17 00:00:00 2001 From: Philip Hansmann Date: Tue, 2 Dec 2025 11:25:01 +0100 Subject: [PATCH 11/11] versienummer verhoogd --- hydamo_validation/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hydamo_validation/__init__.py b/hydamo_validation/__init__.py index c3fd4d8..194ba69 100644 --- a/hydamo_validation/__init__.py +++ b/hydamo_validation/__init__.py @@ -1,13 +1,13 @@ __author__ = ["Het Waterschapshuis", "D2HYDRO", "HKV", "HydroConsult"] __copyright__ = "Copyright 2021, HyDAMO ValidatieTool" __credits__ = ["D2HYDRO", "HKV", "HydroConsult"] -__version__ = "1.4.1" +__version__ = "1.4.2" __license__ = "MIT" __maintainer__ = "Daniel Tollenaar" __email__ = "daniel@d2hydro.nl" -import fiona # top-level import to avoid fiona import issue: https://github.com/conda-forge/fiona-feedstock/issues/213 +#import fiona # top-level import to avoid fiona import issue: https://github.com/conda-forge/fiona-feedstock/issues/213 from hydamo_validation.functions import topologic as topologic_functions from hydamo_validation.functions import logic as logic_functions from hydamo_validation.functions import general as general_functions