@@ -33,6 +33,11 @@ def upload_files_from_directory(directory, bucket, prefix=""):
3333 import os
3434 import tqdm
3535
36+ # Check if directory exists, if not create it
37+ if not os .path .exists (directory ):
38+ os .makedirs (directory )
39+ return
40+
3641 # Create S3 client
3742 s3_client = boto3 .client ("s3" )
3843
@@ -127,3 +132,66 @@ def download_new():
127132 logging .info (f"Total downloads: { len (downloads )} " )
128133 logging .info (f"{ downloads } " )
129134 return downloads
135+
136+
137+ def download_new_by_product (product_id ):
138+
139+ try :
140+ product = Product .objects .get (product_id = product_id )
141+
142+ downloads = []
143+
144+ vi = None
145+
146+ try :
147+ valid_product = Product .objects .get (product_id = product_id )
148+ latest = (
149+ ProductRaster .objects .filter (product = valid_product )
150+ .order_by ("-date" )
151+ .first ()
152+ )
153+ logging .info (f"latest date for { product_id } : { latest .date .isoformat ()} " )
154+
155+ except Product .DoesNotExist :
156+ return
157+
158+ parts = product_id .split ("-" )
159+ if parts [- 1 ] in ["ndvi" , "ndwi" ]:
160+ vi = parts [- 1 ].upper ()
161+ product = Downloader (parts [0 ].upper ())
162+ elif parts [- 1 ] == "swi" :
163+ product = Downloader (parts [- 1 ])
164+ elif parts [- 1 ] == "precip" :
165+ product = Downloader (parts [0 ])
166+ elif parts [- 1 ] == "esi" :
167+ product = Downloader (f"{ parts [- 1 ]} /{ parts [- 2 ].upper ()} " )
168+
169+ if valid_product .composite :
170+ start_date = latest .date + timedelta (days = valid_product .composite_period )
171+ else :
172+ start_date = latest .date + timedelta (days = 1 )
173+
174+ end_date = latest .date + timedelta (days = 30 )
175+
176+ if not os .path .exists (settings .PRODUCT_DATASET_LOCAL_PATH ):
177+ os .makedirs (settings .PRODUCT_DATASET_LOCAL_PATH )
178+
179+ if vi :
180+ out = product .download_vi_composites (
181+ start_date .isoformat (),
182+ end_date .isoformat (),
183+ settings .PRODUCT_DATASET_LOCAL_PATH ,
184+ vi = vi ,
185+ )
186+ else :
187+ out = product .download_composites (
188+ start_date .isoformat (),
189+ end_date .isoformat (),
190+ settings .PRODUCT_DATASET_LOCAL_PATH ,
191+ )
192+ downloads .append (out )
193+ logging .info (f"{ product_id } files downloaded: { out } " )
194+ except Exception as e :
195+ logging .error (f"Failed to download { product_id } : { e } " )
196+
197+ return downloads
0 commit comments