28
28
DataMartResourceLinkResponse ,
29
29
TreeCoverLossByDriver ,
30
30
TreeCoverLossByDriverIn ,
31
- TreeCoverLossByDriverResponse ,
31
+ TreeCoverLossByDriverResponse , AreaOfInterest , GeostoreAreaOfInterest ,
32
32
)
33
33
from app .settings .globals import API_URL
34
34
from app .tasks .datamart .land import (
@@ -61,6 +61,11 @@ def _parse_dataset_versions(request: Request) -> Dict[str, str]:
61
61
# Merge dataset version overrides with default dataset versions
62
62
return DEFAULT_LAND_DATASET_VERSIONS | dataset_versions
63
63
64
+
65
+ def _parse_area_of_interest (request : Request ) -> AreaOfInterest :
66
+ aoi_info = request .query_params .getlist ('aoi[geostore_id]' );
67
+ return GeostoreAreaOfInterest (geostore_id = aoi_info [0 ])
68
+
64
69
@router .get (
65
70
"/tree_cover_loss_by_driver" ,
66
71
response_class = ORJSONResponse ,
@@ -69,6 +74,23 @@ def _parse_dataset_versions(request: Request) -> Dict[str, str]:
69
74
status_code = 200 ,
70
75
openapi_extra = {
71
76
"parameters" : [
77
+ {
78
+ "name" : "aoi" ,
79
+ "in" : "query" ,
80
+ "required" : True ,
81
+ "style" : "deepObject" ,
82
+ "explode" : True ,
83
+ "example" : {
84
+ "geostore_id" : "637d378f-93a9-4364-bfa8-95b6afd28c3a" ,
85
+ },
86
+ "description" : "The Area of Interest" ,
87
+ "schema" : {
88
+ "oneOf" : [
89
+ {"$ref" : "#/components/schemas/GeostoreAreaOfInterest" },
90
+ {"$ref" : "#/components/schemas/WdpaAreaOfInterest" },
91
+ ]
92
+ }
93
+ },
72
94
{
73
95
"name" : "dataset_version" ,
74
96
"in" : "query" ,
@@ -92,14 +114,14 @@ def _parse_dataset_versions(request: Request) -> Dict[str, str]:
92
114
)
93
115
async def tree_cover_loss_by_driver_search (
94
116
* ,
95
- geostore_id : UUID = Query (..., title = "Geostore ID" ),
117
+ aoi : AreaOfInterest = Depends ( _parse_area_of_interest ),
96
118
canopy_cover : int = Query (30 , alias = "canopy_cover" , title = "Canopy cover percent" ),
97
119
dataset_versions : Optional [Dict [str , str ]] = Depends (_parse_dataset_versions ),
98
120
api_key : APIKey = Depends (get_api_key ),
99
121
):
100
122
"""Search if a resource exists for a given geostore and canopy cover."""
101
123
resource_id = _get_resource_id (
102
- "tree_cover_loss_by_driver" , geostore_id , canopy_cover , dataset_versions
124
+ "tree_cover_loss_by_driver" , aoi . get_geostore_id () , canopy_cover , dataset_versions
103
125
)
104
126
105
127
# check if it exists
@@ -155,7 +177,7 @@ async def tree_cover_loss_by_driver_post(
155
177
156
178
# check geostore is valid
157
179
try :
158
- await get_geostore (data .geostore_id , GeostoreOrigin .rw )
180
+ await get_geostore (data .aoi . get_geostore_id () , GeostoreOrigin .rw )
159
181
except HTTPException :
160
182
raise HTTPException (
161
183
status_code = 422 ,
@@ -168,7 +190,7 @@ async def tree_cover_loss_by_driver_post(
168
190
dataset_version = DEFAULT_LAND_DATASET_VERSIONS | data .dataset_version
169
191
resource_id = _get_resource_id (
170
192
"tree_cover_loss_by_driver" ,
171
- data .geostore_id ,
193
+ data .aoi . get_geostore_id () ,
172
194
data .canopy_cover ,
173
195
dataset_version ,
174
196
)
@@ -178,7 +200,7 @@ async def tree_cover_loss_by_driver_post(
178
200
background_tasks .add_task (
179
201
compute_tree_cover_loss_by_driver ,
180
202
resource_id ,
181
- data .geostore_id ,
203
+ data .aoi . get_geostore_id () ,
182
204
data .canopy_cover ,
183
205
dataset_version ,
184
206
)
0 commit comments