flood-adapt 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/PKG-INFO +1 -1
  2. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/__init__.py +1 -1
  3. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/database.py +24 -17
  4. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_event.py +0 -15
  5. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_measure.py +15 -7
  6. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_template.py +3 -4
  7. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/events.py +1 -1
  8. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/timeseries.py +27 -15
  9. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/PKG-INFO +1 -1
  10. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/pyproject.toml +3 -3
  11. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/LICENSE +0 -0
  12. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/README.md +0 -0
  13. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/__init__.py +0 -0
  14. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/fiat_adapter.py +0 -0
  15. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/interface/__init__.py +0 -0
  16. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/interface/hazard_adapter.py +0 -0
  17. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/interface/impact_adapter.py +0 -0
  18. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/interface/model_adapter.py +0 -0
  19. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/interface/offshore.py +0 -0
  20. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/sfincs_adapter.py +0 -0
  21. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/adapter/sfincs_offshore.py +0 -0
  22. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/__init__.py +0 -0
  23. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/config.py +0 -0
  24. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/fiat.py +0 -0
  25. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/gui.py +0 -0
  26. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/sfincs.py +0 -0
  27. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/config/site.py +0 -0
  28. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/__init__.py +0 -0
  29. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/database_builder.py +0 -0
  30. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/default_units/imperial.toml +0 -0
  31. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/default_units/metric.toml +0 -0
  32. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/green_infra_table/green_infra_lookup_table.csv +0 -0
  33. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/black_down_48x48.png +0 -0
  34. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/black_left_48x48.png +0 -0
  35. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/black_right_48x48.png +0 -0
  36. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/black_up_48x48.png +0 -0
  37. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-16_white_down.png +0 -0
  38. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-16_white_left.png +0 -0
  39. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-16_white_right.png +0 -0
  40. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-16_white_up.png +0 -0
  41. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_black_down.png +0 -0
  42. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_black_left.png +0 -0
  43. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_black_right.png +0 -0
  44. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_black_up.png +0 -0
  45. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_white_left.png +0 -0
  46. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/icons8-triangle-arrow-24_white_right.png +0 -0
  47. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/white_down_48x48.png +0 -0
  48. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/white_left_48x48.png +0 -0
  49. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/white_right_48x48.png +0 -0
  50. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/icons/white_up_48x48.png +0 -0
  51. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/OSM/config_charts.toml +0 -0
  52. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/OSM/config_people.toml +0 -0
  53. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/OSM/config_risk_charts.toml +0 -0
  54. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/OSM/config_roads.toml +0 -0
  55. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/OSM/styles.css +0 -0
  56. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/US_NSI/config_charts.toml +0 -0
  57. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/US_NSI/config_people.toml +0 -0
  58. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/US_NSI/config_risk_charts.toml +0 -0
  59. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/US_NSI/config_roads.toml +0 -0
  60. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/US_NSI/styles.css +0 -0
  61. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/ambulance.png +0 -0
  62. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/car.png +0 -0
  63. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/cart.png +0 -0
  64. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/firetruck.png +0 -0
  65. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/hospital.png +0 -0
  66. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/house.png +0 -0
  67. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/info.png +0 -0
  68. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/money.png +0 -0
  69. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/person.png +0 -0
  70. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/school.png +0 -0
  71. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/truck.png +0 -0
  72. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infographics/images/walking_person.png +0 -0
  73. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/OSM/metrics_additional_risk_configs.toml +0 -0
  74. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config.toml +0 -0
  75. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/OSM/with_SVI/infographic_metrics_config_risk.toml +0 -0
  76. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config.toml +0 -0
  77. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/OSM/without_SVI/infographic_metrics_config_risk.toml +0 -0
  78. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/US_NSI/metrics_additional_risk_configs.toml +0 -0
  79. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config.toml +0 -0
  80. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/US_NSI/with_SVI/infographic_metrics_config_risk.toml +0 -0
  81. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config.toml +0 -0
  82. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/US_NSI/without_SVI/infographic_metrics_config_risk.toml +0 -0
  83. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config.toml +0 -0
  84. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/infometrics/mandatory_metrics_config_risk.toml +0 -0
  85. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder/templates/mapbox_layers/bin_colors.toml +0 -0
  86. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/database_builder.py +0 -0
  87. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/__init__.py +0 -0
  88. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_benefit.py +0 -0
  89. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_projection.py +0 -0
  90. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_scenario.py +0 -0
  91. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_static.py +0 -0
  92. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/dbs_strategy.py +0 -0
  93. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/interface/database.py +0 -0
  94. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/interface/element.py +0 -0
  95. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/dbs_classes/interface/static.py +0 -0
  96. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/flood_adapt.py +0 -0
  97. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/misc/__init__.py +0 -0
  98. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/misc/database_user.py +0 -0
  99. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/misc/log.py +0 -0
  100. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/misc/path_builder.py +0 -0
  101. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/misc/utils.py +0 -0
  102. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/__init__.py +0 -0
  103. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/benefits/__init__.py +0 -0
  104. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/benefits/benefits.py +0 -0
  105. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/__init__.py +0 -0
  106. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/event_factory.py +0 -0
  107. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/event_set.py +0 -0
  108. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/historical.py +0 -0
  109. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/hurricane.py +0 -0
  110. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/events/synthetic.py +0 -0
  111. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/__init__.py +0 -0
  112. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/csv.py +0 -0
  113. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/discharge.py +0 -0
  114. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/forcing.py +0 -0
  115. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/forcing_factory.py +0 -0
  116. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/meteo_handler.py +0 -0
  117. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/netcdf.py +0 -0
  118. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/plotting.py +0 -0
  119. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/rainfall.py +0 -0
  120. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/tide_gauge.py +0 -0
  121. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/time_frame.py +0 -0
  122. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/unit_system.py +0 -0
  123. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/waterlevels.py +0 -0
  124. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/forcing/wind.py +0 -0
  125. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/measures/__init__.py +0 -0
  126. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/measures/measure_factory.py +0 -0
  127. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/measures/measures.py +0 -0
  128. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/object_model.py +0 -0
  129. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/projections/__init__.py +0 -0
  130. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/projections/projections.py +0 -0
  131. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/scenarios/__init__.py +0 -0
  132. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/scenarios/scenarios.py +0 -0
  133. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/strategies/__init__.py +0 -0
  134. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/objects/strategies/strategies.py +0 -0
  135. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/workflows/__init__.py +0 -0
  136. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/workflows/benefit_runner.py +0 -0
  137. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/workflows/floodmap.py +0 -0
  138. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/workflows/impacts_integrator.py +0 -0
  139. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt/workflows/scenario_runner.py +0 -0
  140. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/SOURCES.txt +0 -0
  141. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/dependency_links.txt +0 -0
  142. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/not-zip-safe +0 -0
  143. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/requires.txt +0 -0
  144. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/flood_adapt.egg-info/top_level.txt +0 -0
  145. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/setup.cfg +0 -0
  146. {flood_adapt-0.3.0 → flood_adapt-0.3.1}/tests/test_flood_adapt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: flood-adapt
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: A software package support system which can be used to assess the benefits and costs of flood resilience measures
5
5
  Author-email: Gundula Winter <Gundula.Winter@deltares.nl>, Panos Athanasiou <Panos.Athanasiou@deltares.nl>, Frederique de Groen <Frederique.deGroen@deltares.nl>, Tim de Wilde <Tim.deWilde@deltares.nl>, Julian Hofer <Julian.Hofer@deltares.nl>, Daley Adrichem <Daley.Adrichem@deltares.nl>, Luuk Blom <Luuk.Blom@deltares.nl>
6
6
  Project-URL: Source, https://github.com/Deltares-research/FloodAdapt
@@ -1,5 +1,5 @@
1
1
  # has to be here at the start to avoid circular imports
2
- __version__ = "0.3.0"
2
+ __version__ = "0.3.1"
3
3
 
4
4
  from flood_adapt import adapter, dbs_classes, objects
5
5
  from flood_adapt.config.config import Settings
@@ -2,9 +2,8 @@ import gc
2
2
  import os
3
3
  import shutil
4
4
  import time
5
- from datetime import datetime
6
5
  from pathlib import Path
7
- from typing import Any, Optional, Union
6
+ from typing import Any, Literal, Optional, Union
8
7
 
9
8
  import geopandas as gpd
10
9
  import numpy as np
@@ -566,7 +565,12 @@ class Database(IDatabase):
566
565
  gdfs[label] = gdfs[label].to_crs(4326)
567
566
  return gdfs
568
567
 
569
- def get_object_list(self, object_type: str) -> dict[str, Any]:
568
+ def get_object_list(
569
+ self,
570
+ object_type: Literal[
571
+ "projections", "events", "measures", "strategies", "scenarios", "benefits"
572
+ ],
573
+ ) -> dict[str, Any]:
570
574
  """Get a dictionary with all the toml paths and last modification dates that exist in the database that correspond to object_type.
571
575
 
572
576
  Parameters
@@ -579,20 +583,23 @@ class Database(IDatabase):
579
583
  dict[str, Any]
580
584
  Includes 'path' and 'last_modification_date' info
581
585
  """
582
- paths = [
583
- path / f"{path.name}.toml"
584
- for path in list((self.input_path / object_type).iterdir())
585
- ]
586
- last_modification_date = [
587
- datetime.fromtimestamp(file.stat().st_mtime) for file in paths
588
- ]
589
-
590
- objects = {
591
- "path": paths,
592
- "last_modification_date": last_modification_date,
593
- }
594
-
595
- return objects
586
+ match object_type:
587
+ case "projections":
588
+ return self.projections.list_objects()
589
+ case "events":
590
+ return self.events.list_objects()
591
+ case "measures":
592
+ return self.measures.list_objects()
593
+ case "strategies":
594
+ return self.strategies.list_objects()
595
+ case "scenarios":
596
+ return self.scenarios.list_objects()
597
+ case "benefits":
598
+ return self.benefits.list_objects()
599
+ case _:
600
+ raise ValueError(
601
+ f"Object type '{object_type}' is not valid. Must be one of 'projections', 'events', 'measures', 'strategies' or 'scenarios'."
602
+ )
596
603
 
597
604
  def has_run_hazard(self, scenario_name: str) -> None:
598
605
  """Check if there is already a simulation that has the exact same hazard component.
@@ -1,5 +1,4 @@
1
1
  from pathlib import Path
2
- from typing import Any
3
2
 
4
3
  from flood_adapt.dbs_classes.dbs_template import DbsTemplate
5
4
  from flood_adapt.objects.events.event_factory import EventFactory
@@ -34,20 +33,6 @@ class DbsEvent(DbsTemplate[Event]):
34
33
  # Load event
35
34
  return EventFactory.load_file(event_path)
36
35
 
37
- def list_objects(self) -> dict[str, list[Any]]:
38
- """Return a dictionary with info on the events that currently exist in the database.
39
-
40
- Returns
41
- -------
42
- dict[str, Any]
43
- Includes 'name', 'description', 'path' and 'last_modification_date' info
44
- """
45
- events = self._get_object_list()
46
- objects = [self.get(name) for name in events["name"]]
47
- events["description"] = [obj.description for obj in objects]
48
- events["objects"] = objects
49
- return events
50
-
51
36
  def _check_standard_objects(self, name: str) -> bool:
52
37
  """Check if an event is a standard event.
53
38
 
@@ -1,3 +1,4 @@
1
+ from pathlib import Path
1
2
  from typing import Any
2
3
 
3
4
  import geopandas as gpd
@@ -26,9 +27,15 @@ class DbsMeasure(DbsTemplate[Measure]):
26
27
  Measure
27
28
  measure object
28
29
  """
29
- measure_path = self.input_path / name / f"{name}.toml"
30
- measure = MeasureFactory.get_measure_object(measure_path)
31
- return measure
30
+ # Make the full path to the object
31
+ full_path = self.input_path / name / f"{name}.toml"
32
+
33
+ # Check if the object exists
34
+ if not Path(full_path).is_file():
35
+ raise ValueError(f"{self.display_name}: '{name}' does not exist.")
36
+
37
+ # Load and return the object
38
+ return MeasureFactory.get_measure_object(full_path)
32
39
 
33
40
  def list_objects(self) -> dict[str, list[Any]]:
34
41
  """Return a dictionary with info on the measures that currently exist in the database.
@@ -39,14 +46,15 @@ class DbsMeasure(DbsTemplate[Measure]):
39
46
  Includes 'name', 'description', 'path' and 'last_modification_date' info
40
47
  """
41
48
  measures = self._get_object_list()
42
- objects = [MeasureFactory.get_measure_object(path) for path in measures["path"]]
49
+ objects = [self.get(name) for name in measures["name"]]
50
+
43
51
  measures["description"] = [obj.description for obj in objects]
44
52
  measures["objects"] = objects
45
53
 
46
54
  geometries = []
47
- for path, obj in zip(measures["path"], objects):
55
+ for obj in objects:
48
56
  # If polygon is used read the polygon file
49
- if obj.polygon_file:
57
+ if hasattr(obj, "polygon_file") and obj.polygon_file:
50
58
  src_path = resolve_filepath(
51
59
  object_dir=self.dir_name,
52
60
  obj_name=obj.name,
@@ -54,7 +62,7 @@ class DbsMeasure(DbsTemplate[Measure]):
54
62
  )
55
63
  geometries.append(gpd.read_file(src_path))
56
64
  # If aggregation area is used read the polygon from the aggregation area name
57
- elif obj.aggregation_area_name:
65
+ elif hasattr(obj, "aggregation_area_name") and obj.aggregation_area_name:
58
66
  if (
59
67
  obj.aggregation_area_type
60
68
  not in self._database.static.get_aggregation_areas()
@@ -60,10 +60,9 @@ class DbsTemplate(AbstractDatabaseElement[T_OBJECTMODEL]):
60
60
  object_list = self._get_object_list()
61
61
 
62
62
  # Load all objects
63
- objects = [self._object_class.load_file(path) for path in object_list["path"]]
63
+ objects = [self.get(name) for name in object_list["name"]]
64
64
 
65
- # From the loaded objects, get the name and description and add them to the object_list
66
- object_list["name"] = [obj.name for obj in objects]
65
+ # From the loaded objects, get the description and add them to the object_list
67
66
  object_list["description"] = [obj.description for obj in objects]
68
67
  object_list["objects"] = objects
69
68
  return object_list
@@ -248,7 +247,7 @@ class DbsTemplate(AbstractDatabaseElement[T_OBJECTMODEL]):
248
247
  Returns
249
248
  -------
250
249
  dict[str, Any]
251
- A dictionary that contains the keys: `name` to 'path' and 'last_modification_date'
250
+ A dictionary that contains the keys: `name` to `path` and `last_modification_date`
252
251
  Each key has a list of the corresponding values, where the index of the values corresponds to the same object.
253
252
  """
254
253
  # If the toml doesnt exist, we might be in the middle of saving a new object or could be a broken object.
@@ -200,7 +200,7 @@ class Event(Object):
200
200
  f"Allowed sources are: {allowed_sources}"
201
201
  )
202
202
 
203
- if Settings().validate_allowed_forcings:
203
+ if Settings().validate_allowed_forcings and hasattr(self, "ALLOWED_FORCINGS"):
204
204
  # Validate forcings
205
205
  for _, concrete_forcings in self.forcings.items():
206
206
  for concrete_forcing in concrete_forcings:
@@ -331,15 +331,21 @@ class BlockTimeseries(SyntheticTimeseries):
331
331
  end=(REFERENCE_TIME + self.end_time.to_timedelta()),
332
332
  freq=time_step,
333
333
  )
334
- ts = np.zeros((len(tt),)) + self.peak_value.value
334
+ if self.peak_value:
335
+ height_value = self.peak_value.value
336
+ elif self.cumulative:
337
+ area = self.cumulative.value
338
+ base = self.duration.convert(
339
+ us.UnitTypesTime.hours
340
+ ) # always expect duration in hours
341
+ height_value = area / base
342
+
343
+ ts = np.zeros((len(tt),)) + height_value
335
344
  return ts
336
345
 
337
346
  @model_validator(mode="after")
338
347
  def validate_attrs(self):
339
- if not self.peak_value:
340
- raise ValueError(
341
- f"{self.__class__.__name__} must have `peak_value` specified. {self.peak_value}"
342
- )
348
+ # either peak_value or cumulative must be set, which is already checked in the parent class: `either_value_or_cumulative`
343
349
  return self
344
350
 
345
351
 
@@ -355,17 +361,26 @@ class TriangleTimeseries(SyntheticTimeseries):
355
361
  freq=time_step,
356
362
  )
357
363
  tt_seconds = (tt - REFERENCE_TIME).total_seconds()
364
+ peak_time = self.peak_time.to_timedelta().total_seconds()
365
+ start_time = self.start_time.to_timedelta().total_seconds()
366
+
367
+ if self.peak_value:
368
+ height_value = self.peak_value.value
369
+ elif self.cumulative:
370
+ area = self.cumulative.value
371
+ base = self.duration.convert(
372
+ us.UnitTypesTime.hours
373
+ ) # always expect duration in hours
374
+ height_value = (2 * area) / base
358
375
 
359
376
  ascending_slope = (
360
- self.peak_value.value
377
+ height_value
361
378
  / (self.peak_time - self.start_time).to_timedelta().total_seconds()
362
379
  )
363
380
  descending_slope = (
364
- -self.peak_value.value
381
+ -height_value
365
382
  / (self.end_time - self.peak_time).to_timedelta().total_seconds()
366
383
  )
367
- peak_time = self.peak_time.to_timedelta().total_seconds()
368
- start_time = self.start_time.to_timedelta().total_seconds()
369
384
 
370
385
  ts = np.piecewise(
371
386
  tt_seconds,
@@ -373,7 +388,7 @@ class TriangleTimeseries(SyntheticTimeseries):
373
388
  [
374
389
  lambda x: np.maximum(ascending_slope * (x - start_time), 0),
375
390
  lambda x: np.maximum(
376
- descending_slope * (x - peak_time) + self.peak_value.value, 0
391
+ descending_slope * (x - peak_time) + height_value, 0
377
392
  ),
378
393
  0,
379
394
  ],
@@ -382,10 +397,7 @@ class TriangleTimeseries(SyntheticTimeseries):
382
397
 
383
398
  @model_validator(mode="after")
384
399
  def validate_attrs(self):
385
- if not self.peak_value:
386
- raise ValueError(
387
- f"{self.__class__.__name__} must have `peak_value` specified. {self.peak_value}"
388
- )
400
+ # either peak_value or cumulative must be set, which is already checked in the parent class: `either_value_or_cumulative`
389
401
  return self
390
402
 
391
403
 
@@ -549,4 +561,4 @@ class TimeseriesFactory:
549
561
 
550
562
  @staticmethod
551
563
  def from_object(obj: SyntheticTimeseries) -> SyntheticTimeseries:
552
- return TimeseriesFactory.from_args(**obj.model_dump())
564
+ return TimeseriesFactory.from_args(**obj.model_dump(exclude_none=True))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: flood-adapt
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: A software package support system which can be used to assess the benefits and costs of flood resilience measures
5
5
  Author-email: Gundula Winter <Gundula.Winter@deltares.nl>, Panos Athanasiou <Panos.Athanasiou@deltares.nl>, Frederique de Groen <Frederique.deGroen@deltares.nl>, Tim de Wilde <Tim.deWilde@deltares.nl>, Julian Hofer <Julian.Hofer@deltares.nl>, Daley Adrichem <Daley.Adrichem@deltares.nl>, Luuk Blom <Luuk.Blom@deltares.nl>
6
6
  Project-URL: Source, https://github.com/Deltares-research/FloodAdapt
@@ -99,12 +99,12 @@ timeout = 600 # hard max of 10 minutes per test to avoid hanging tests
99
99
  timeout_func_only = true # only timeout the test function, not the setup/teardown
100
100
 
101
101
  ### pixi ###
102
+ [tool.pixi.pypi-dependencies]
103
+ flood_adapt = {path = "."}
104
+
102
105
  [tool.pixi.feature.dev.pypi-dependencies]
103
106
  flood_adapt = {path = ".", editable = true }
104
107
 
105
- [tool.pixi.feature.build.pypi-dependencies]
106
- flood_adapt = {path = "."}
107
-
108
108
  [tool.pixi.feature.py312.dependencies]
109
109
  python = "3.12.*"
110
110
 
File without changes
File without changes
File without changes