28
28
DataMartResourceLinkResponse ,
29
29
TreeCoverLossByDriver ,
30
30
TreeCoverLossByDriverIn ,
31
- TreeCoverLossByDriverResponse , AreaOfInterest , GeostoreAreaOfInterest ,
31
+ TreeCoverLossByDriverResponse ,
32
+ AreaOfInterest ,
33
+ GeostoreAreaOfInterest ,
34
+ AdminAreaOfInterest ,
32
35
)
33
36
from app .settings .globals import API_URL
34
37
from app .tasks .datamart .land import (
@@ -63,8 +66,22 @@ def _parse_dataset_versions(request: Request) -> Dict[str, str]:
63
66
64
67
65
68
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 ])
69
+ if 'aoi[geostore_id]' in request .query_params :
70
+ return GeostoreAreaOfInterest (geostore_id = request .query_params ['aoi[geostore_id]' ])
71
+
72
+ # Otherwise, check if the request contains admin area information
73
+ if 'aoi[country]' in request .query_params :
74
+ return AdminAreaOfInterest (
75
+ country = request .query_params ['aoi[country]' ],
76
+ region = request .query_params .get ('aoi[region]' ),
77
+ subregion = request .query_params .get ('aoi[subregion]' ),
78
+ provider = request .query_params .get ('aoi[provider]' ),
79
+ version = request .query_params .get ('aoi[version]' ),
80
+ )
81
+
82
+ # If neither type is provided, raise an error
83
+ raise HTTPException (status_code = 422 , detail = "Invalid Area of Interest parameters" )
84
+
68
85
69
86
@router .get (
70
87
"/tree_cover_loss_by_driver" ,
@@ -87,7 +104,7 @@ def _parse_area_of_interest(request: Request) -> AreaOfInterest:
87
104
"schema" : {
88
105
"oneOf" : [
89
106
{"$ref" : "#/components/schemas/GeostoreAreaOfInterest" },
90
- {"$ref" : "#/components/schemas/WdpaAreaOfInterest " },
107
+ {"$ref" : "#/components/schemas/AdminAreaOfInterest " },
91
108
]
92
109
}
93
110
},
@@ -120,8 +137,9 @@ async def tree_cover_loss_by_driver_search(
120
137
api_key : APIKey = Depends (get_api_key ),
121
138
):
122
139
"""Search if a resource exists for a given geostore and canopy cover."""
140
+ geostore_id = await aoi .get_geostore_id ()
123
141
resource_id = _get_resource_id (
124
- "tree_cover_loss_by_driver" , aoi . get_geostore_id () , canopy_cover , dataset_versions
142
+ "tree_cover_loss_by_driver" , geostore_id , canopy_cover , dataset_versions
125
143
)
126
144
127
145
# check if it exists
@@ -174,10 +192,11 @@ async def tree_cover_loss_by_driver_post(
174
192
):
175
193
"""Create new tree cover loss by drivers resource for a given geostore and
176
194
canopy cover."""
195
+ geostore_id = await data .aoi .get_geostore_id ()
177
196
178
197
# check geostore is valid
179
198
try :
180
- await get_geostore (data . aoi . get_geostore_id () , GeostoreOrigin .rw )
199
+ await get_geostore (geostore_id , GeostoreOrigin .rw )
181
200
except HTTPException :
182
201
raise HTTPException (
183
202
status_code = 422 ,
@@ -190,7 +209,7 @@ async def tree_cover_loss_by_driver_post(
190
209
dataset_version = DEFAULT_LAND_DATASET_VERSIONS | data .dataset_version
191
210
resource_id = _get_resource_id (
192
211
"tree_cover_loss_by_driver" ,
193
- data . aoi . get_geostore_id () ,
212
+ geostore_id ,
194
213
data .canopy_cover ,
195
214
dataset_version ,
196
215
)
@@ -200,7 +219,7 @@ async def tree_cover_loss_by_driver_post(
200
219
background_tasks .add_task (
201
220
compute_tree_cover_loss_by_driver ,
202
221
resource_id ,
203
- data . aoi . get_geostore_id () ,
222
+ geostore_id ,
204
223
data .canopy_cover ,
205
224
dataset_version ,
206
225
)
0 commit comments