Skip to content

Commit 9cc17b0

Browse files
Merge pull request #107 from 3DBAG/59-resources-should-initialize-without-values
59 resources should initialize without values
2 parents b4ed1d1 + 1c1a4f6 commit 9cc17b0

File tree

9 files changed

+118
-88
lines changed

9 files changed

+118
-88
lines changed

docker/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
DAGSTER_ENVIRONMENT="test"
12
DAGSTER_HOME=/opt/dagster/dagster_home
23
DAGSTER_POSTGRES_USER="postgres_user"
34
DAGSTER_POSTGRES_PASSWORD="postgres_password"
@@ -10,7 +11,6 @@ BAG3D_FILESTORE=/data/volume
1011
BAG3D_RELEASE_VERSION=develop
1112
BAG3D_TEST_DATA=/data/volume
1213
BAG3D_FLOORS_ESTIMATION_MODEL=/data/volume/model/pipeline_model1_gbr_untuned.joblib
13-
BAG3D_EXPORT_DIR=/data/volume/reconstruction_input/3DBAG/export_test_version
1414

1515
BAG3D_PG_DOCKERFILE=/3dbag-pipeline/docker/postgres/Dockerfile
1616
BAG3D_PG_DOCKERIMAGE=bag3d_image_postgis

makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ include .env
55
source:
66
set -a ; . ./.env ; set +a
77

8-
download: source
8+
download:
99
rm -rf $(BAG3D_TEST_DATA)
1010
mkdir -p $(BAG3D_TEST_DATA)
1111
cd $(BAG3D_TEST_DATA) ; curl -O https://data.3dbag.nl/testdata/pipeline/test_data_v5.zip ; unzip -q test_data_v5.zip ; rm test_data_v5.zip

packages/common/src/bag3d/common/resources/__init__.py

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from pathlib import Path
23

34
from bag3d.common.resources.executables import (
45
GDALResource,
@@ -12,21 +13,21 @@
1213
from bag3d.common.resources.database import DatabaseResource
1314
from bag3d.common.resources.version import VersionResource
1415

15-
from dagster import EnvVar
16+
from dagster import EnvVar, get_dagster_logger
1617

17-
# The 'mount_point' is the directory in the container that is bind-mounted on the host
18+
logger = get_dagster_logger()
1819

1920
version = VersionResource(os.getenv("BAG3D_RELEASE_VERSION"))
2021

2122

22-
gdal_local = GDALResource(
23+
gdal = GDALResource(
2324
exe_ogr2ogr=os.getenv("EXE_PATH_OGR2OGR"),
2425
exe_ogrinfo=os.getenv("EXE_PATH_OGRINFO"),
2526
exe_sozip=os.getenv("EXE_PATH_SOZIP"),
2627
)
2728

2829

29-
pdal_local = PDALResource(exe_pdal=os.getenv("EXE_PATH_PDAL"))
30+
pdal = PDALResource(exe_pdal=os.getenv("EXE_PATH_PDAL"))
3031

3132

3233
db_connection = DatabaseResource(
@@ -47,6 +48,14 @@
4748
dir_id=os.getenv("BAG3D_RELEASE_VERSION"),
4849
)
4950

51+
file_store_test = FileStoreResource(
52+
data_dir=str(Path(os.getenv("BAG3D_FILESTORE")) / "reconstruction_input"),
53+
dir_id=os.getenv("BAG3D_RELEASE_VERSION"),
54+
)
55+
file_store_fastssd_test = FileStoreResource(
56+
data_dir=str(Path(os.getenv("BAG3D_FILESTORE")) / "integration_core"),
57+
dir_id=os.getenv("BAG3D_RELEASE_VERSION"),
58+
)
5059

5160
# Configure for gilfoyle
5261
file_store_gilfoyle = FileStoreResource(data_dir="/data")
@@ -74,11 +83,11 @@
7483

7584

7685
RESOURCES_LOCAL = {
77-
"gdal": gdal_local,
86+
"gdal": gdal,
7887
"file_store": file_store,
7988
"file_store_fastssd": file_store_fastssd,
8089
"db_connection": db_connection,
81-
"pdal": pdal_local,
90+
"pdal": pdal,
8291
"lastools": lastools,
8392
"tyler": tyler,
8493
"geoflow": geoflow,
@@ -87,12 +96,12 @@
8796
}
8897

8998

90-
RESOURCES_PYTEST = {
91-
"gdal": gdal_local,
92-
"file_store": file_store,
93-
"file_store_fastssd": file_store_fastssd,
99+
RESOURCES_TEST = {
100+
"gdal": gdal,
101+
"file_store": file_store_test,
102+
"file_store_fastssd": file_store_fastssd_test,
94103
"db_connection": db_connection,
95-
"pdal": pdal_local,
104+
"pdal": pdal,
96105
"lastools": lastools,
97106
"tyler": tyler,
98107
"geoflow": geoflow,
@@ -101,24 +110,41 @@
101110
}
102111

103112
RESOURCES_PROD = {
104-
"gdal": gdal_local,
113+
"gdal": gdal,
105114
"file_store": file_store_gilfoyle,
106115
"file_store_fastssd": file_store_gilfoyle_fastssd,
107116
"db_connection": db_connection,
108-
"pdal": pdal_local,
117+
"pdal": pdal,
109118
"lastools": lastools,
110119
"tyler": tyler,
111120
"geoflow": geoflow,
112121
"roofer": roofer,
113122
"version": version,
114123
}
115124

116-
# Resource definitions for import
125+
RESOURCES_DEFAULT = {
126+
"gdal": GDALResource(),
127+
"file_store": FileStoreResource(),
128+
"file_store_fastssd": FileStoreResource(),
129+
"db_connection": DatabaseResource(),
130+
"pdal": PDALResource(),
131+
"lastools": LASToolsResource(),
132+
"tyler": TylerResource(),
133+
"geoflow": GeoflowResource(),
134+
"roofer": RooferResource(),
135+
"version": VersionResource(),
136+
}
137+
117138

118-
resource_defs_by_deployment_name = {
139+
resource_defs_by_env_name = {
119140
"prod": RESOURCES_PROD,
120141
"local": RESOURCES_LOCAL,
121-
"pytest": RESOURCES_PYTEST,
142+
"test": RESOURCES_TEST,
143+
"default": RESOURCES_DEFAULT,
122144
}
123-
deployment_name = os.environ.get("DAGSTER_DEPLOYMENT", "local")
124-
resource_defs = resource_defs_by_deployment_name[deployment_name]
145+
env_name = os.getenv("DAGSTER_ENVIRONMENT", "default").lower()
146+
if env_name not in resource_defs_by_env_name.keys():
147+
logger.warning(f"Invalid environment: {env_name}, setting to default")
148+
env_name = "default"
149+
150+
resource_defs = resource_defs_by_env_name[env_name]

packages/common/src/bag3d/common/resources/database.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,29 @@ class DatabaseResource(ConfigurableResource):
1212
Database connection.
1313
"""
1414

15-
host: str
16-
user: str
17-
password: str
18-
dbname: str
19-
port: str
20-
other_params: Permissive()
15+
host: Optional[str] = None
16+
user: Optional[str] = None
17+
password: Optional[str] = None
18+
dbname: Optional[str] = None
19+
port: Optional[str] = None
20+
other_params: Optional[Permissive()] = None
2121

2222
def __init__(
2323
self,
24-
host: str,
25-
user: str,
26-
password: str,
27-
dbname: str,
28-
port: str,
24+
host: Optional[str] = None,
25+
user: Optional[str] = None,
26+
password: Optional[str] = None,
27+
dbname: Optional[str] = None,
28+
port: Optional[str] = None,
2929
other_params: Optional[Permissive()] = None,
3030
):
3131
super().__init__(
32-
host=host,
33-
user=user,
34-
password=password,
35-
dbname=dbname,
36-
port=port,
37-
other_params=other_params or {},
32+
host=host or "data-postgresql",
33+
user=user or "baseregisters_test_user",
34+
password=password or "baseregisters_test_pswd",
35+
dbname=dbname or "baseregisters_test",
36+
port=port or "5432",
37+
other_params=other_params or {"sslmode": "allow"},
3838
)
3939
conn = DatabaseConnection(
4040
user=self.user,

packages/common/src/bag3d/common/resources/executables.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -334,25 +334,19 @@ class PDALResource(ConfigurableResource):
334334
pdal_resource.app
335335
"""
336336

337-
exe_pdal: str
338-
docker_cfg: DockerConfig
339-
340-
def __init__(
341-
self,
342-
exe_pdal: Optional[str] = None,
343-
docker_cfg: Optional[DockerConfig] = None,
344-
):
345-
super().__init__(
346-
exe_pdal=exe_pdal or "pdal",
347-
docker_cfg=docker_cfg
348-
or DockerConfig(image=DOCKER_PDAL_IMAGE, mount_point="/tmp"),
349-
)
337+
exe_pdal: Optional[str] = None
338+
docker_cfg: Optional[DockerConfig] = None
350339

351340
@property
352341
def exes(self) -> Dict[str, str]:
353-
return {
354-
"pdal": self.exe_pdal,
355-
}
342+
if self.docker_cfg is None:
343+
return {
344+
"pdal": self.exe_pdal,
345+
}
346+
else:
347+
return {
348+
"pdal": "pdal",
349+
}
356350

357351
@property
358352
def with_docker(self) -> bool:
@@ -384,8 +378,8 @@ class LASToolsResource(ConfigurableResource):
384378
lastools_resource.app
385379
"""
386380

387-
exe_lasindex: str
388-
exe_las2las: str
381+
exe_lasindex: Optional[str] = None
382+
exe_las2las: Optional[str] = None
389383

390384
@property
391385
def exes(self) -> Dict[str, str]:
@@ -416,8 +410,8 @@ class TylerResource(ConfigurableResource):
416410
tyler = tyler_resource.app
417411
"""
418412

419-
exe_tyler: str
420-
exe_tyler_db: str
413+
exe_tyler: Optional[str] = None
414+
exe_tyler_db: Optional[str] = None
421415

422416
@property
423417
def exes(self) -> Dict[str, str]:
@@ -448,8 +442,8 @@ class RooferResource(ConfigurableResource):
448442
roofer = roofer_resource.app
449443
"""
450444

451-
exe_crop: str
452-
exe_roofer: str
445+
exe_crop: Optional[str] = None
446+
exe_roofer: Optional[str] = None
453447

454448
@property
455449
def exes(self) -> Dict[str, str]:
@@ -484,8 +478,8 @@ class GeoflowResource(ConfigurableResource):
484478
geoflow = geoflow_resource.app
485479
"""
486480

487-
exe_geoflow: str
488-
flowchart: str
481+
exe_geoflow: Optional[str] = None
482+
flowchart: Optional[str] = None
489483

490484
@property
491485
def exes(self) -> Dict[str, str]:

packages/common/src/bag3d/common/resources/files.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ class FileStoreResource(ConfigurableResource):
102102
TODO: make the directory functions in .core (bag3d_export_dir etc) members of this
103103
"""
104104

105-
data_dir: str
106-
docker_volume_id: str
107-
dir_id: str
105+
data_dir: Optional[str] = None
106+
docker_volume_id: Optional[str] = None
107+
dir_id: Optional[str] = None
108108

109109
def __init__(
110110
self,
@@ -113,20 +113,20 @@ def __init__(
113113
dir_id: Optional[str] = None,
114114
):
115115
super().__init__(
116-
data_dir=str(data_dir) if data_dir else "",
117-
docker_volume_id=docker_volume_id or "",
118-
dir_id=dir_id or "",
116+
data_dir=str(data_dir) if data_dir else None,
117+
docker_volume_id=docker_volume_id,
118+
dir_id=dir_id,
119119
)
120120

121121
@property
122122
def file_store(self) -> FileStore:
123-
if self.data_dir != "" and self.dir_id != "":
123+
if self.data_dir and self.dir_id:
124124
return FileStore(data_dir=self.data_dir, dir_id=self.dir_id)
125-
elif self.data_dir != "":
125+
elif self.data_dir:
126126
return FileStore(data_dir=self.data_dir)
127-
elif self.docker_volume_id != "":
127+
elif self.docker_volume_id:
128128
return FileStore(docker_volume_id=self.docker_volume_id)
129-
elif self.dir_id != "":
129+
elif self.dir_id:
130130
return FileStore(dir_id=self.dir_id)
131131
else:
132132
return FileStore()

packages/common/src/bag3d/common/resources/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class VersionResource(ConfigurableResource):
1010
A resource for setting up the version release.
1111
"""
1212

13-
version: str
13+
version: Optional[str] = None
1414

1515
def __init__(
1616
self,

packages/common/src/bag3d/common/utils/files.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def geoflow_crop_dir(root_dir: os.PathLike) -> Path:
5555
def bag3d_export_dir(root_dir: os.PathLike, version: str) -> Path:
5656
"""Create the 3DBAG export directory if does not exist"""
5757
export_dir = bag3d_dir(root_dir) / f"export_{version}"
58-
export_dir.mkdir(exist_ok=True)
58+
export_dir.mkdir(exist_ok=True, parents=True)
5959
return export_dir
6060

6161

@@ -98,19 +98,24 @@ def get_export_tile_ids() -> Sequence[str]:
9898
List of tile IDs
9999
"""
100100
tileids = []
101-
root_dir = Path(os.getenv("BAG3D_FILESTORE", "/data"))
102-
version = os.getenv("BAG3D_RELEASE_VERSION", "test_version")
101+
102+
env = os.getenv("DAGSTER_ENVIRONMENT", "test")
103+
if env == "test":
104+
root_dir = Path(os.getenv("BAG3D_FILESTORE")) / "reconstruction_input"
105+
version = "test_version"
106+
else:
107+
root_dir = Path(os.getenv("BAG3D_FILESTORE", "/data"))
108+
version = os.getenv("BAG3D_RELEASE_VERSION", "test_version")
109+
103110
export_dir = bag3d_export_dir(root_dir=root_dir, version=version)
104-
if export_dir.exists():
105-
path_tiles_dir = export_dir.joinpath("tiles")
106-
path_quadtree_tsv = export_dir.joinpath("quadtree.tsv")
107-
if path_quadtree_tsv.exists():
108-
tileids = [
109-
er.tile_id
110-
for er in check_export_results(path_quadtree_tsv, path_tiles_dir)
111-
]
111+
112+
path_tiles_dir = export_dir.joinpath("tiles")
113+
path_quadtree_tsv = export_dir.joinpath("quadtree.tsv")
114+
if path_quadtree_tsv.exists():
115+
tileids = [
116+
er.tile_id for er in check_export_results(path_quadtree_tsv, path_tiles_dir)
117+
]
112118
else:
113-
raise FileNotFoundError(f"""Export directory {export_dir} does not exist.
114-
You need to set the BAG3D_EXPORT_DIR variable.""")
119+
raise FileNotFoundError(f"File not found: {path_quadtree_tsv}")
115120

116121
return tileids

0 commit comments

Comments
 (0)