From ba530899f3bf4dd395c9c9c07006d376efeb5cfe Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Fri, 24 Oct 2025 10:43:30 +0200 Subject: [PATCH 1/3] Delay copying self.columns so it can be altered after opening/downloading the file --- vecorel_cli/conversion/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vecorel_cli/conversion/base.py b/vecorel_cli/conversion/base.py index 6070945..f472310 100644 --- a/vecorel_cli/conversion/base.py +++ b/vecorel_cli/conversion/base.py @@ -299,7 +299,6 @@ def convert( original_geometries=False, **kwargs, ) -> str: - columns = self.columns.copy() self.variant = variant cid = self.id.strip() if self.bbox is not None and len(self.bbox) != 4: @@ -339,6 +338,7 @@ def convert( self.info("Applying global migrations") gdf = self.migrate(gdf) assert isinstance(gdf, GeoDataFrame), "Migration function must return a GeoDataFrame" + columns = self.columns.copy() # 2. Run filters to remove rows that shall not be in the final data gdf = self.filter_rows(gdf) From d4d3d4dac7e6bdbe3323b798ae9487c30a6561df Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Wed, 29 Oct 2025 22:16:26 +0100 Subject: [PATCH 2/3] Add get_columns hook --- vecorel_cli/conversion/base.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vecorel_cli/conversion/base.py b/vecorel_cli/conversion/base.py index f472310..8185276 100644 --- a/vecorel_cli/conversion/base.py +++ b/vecorel_cli/conversion/base.py @@ -51,7 +51,7 @@ class BaseConverter(LoggerMixin): variants: dict[str, Sources] = {} variant: Optional[str] = None - columns: dict[str, str|Sequence[str]] = {} + columns: dict[str, str | Sequence[str]] = {} column_additions: dict[str, str] = {} column_filters: dict[str, Callable] = {} column_migrations: dict[str, Callable] = {} @@ -83,6 +83,9 @@ def layer_filter(self, layer: str, uri: str) -> bool: def post_migrate(self, gdf: GeoDataFrame) -> GeoDataFrame: return gdf + def get_columns(self, gdf: GeoDataFrame) -> dict[str, str | Sequence[str]]: + return self.columns.copy() + def get_cache(self, cache_folder=None, **kwargs) -> tuple[AbstractFileSystem, str]: if cache_folder is None: _kwargs = {} @@ -338,7 +341,8 @@ def convert( self.info("Applying global migrations") gdf = self.migrate(gdf) assert isinstance(gdf, GeoDataFrame), "Migration function must return a GeoDataFrame" - columns = self.columns.copy() + + columns = self.get_columns(gdf) # 2. Run filters to remove rows that shall not be in the final data gdf = self.filter_rows(gdf) From 3172ec13ea1727271273e8bc225bcdc68eb163c2 Mon Sep 17 00:00:00 2001 From: Ivor Bosloper Date: Wed, 29 Oct 2025 22:19:05 +0100 Subject: [PATCH 3/3] Add Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d7e881..1130a7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Change default temporal property to datetime - Enable Converter.columns list and tuple types +- Add BaseConverter get_columns hook to customize columns after reading the file ## [v0.2.11] - 2025-10-09