Allow for searching downloads for specific years, months, days
This commit is contained in:
		
							parent
							
								
									f4174ac440
								
							
						
					
					
						commit
						c37d663584
					
				
					 1 changed files with 36 additions and 10 deletions
				
			
		|  | @ -3,6 +3,14 @@ import re | |||
| 
 | ||||
| from nexrad.s3 import S3Bucket | ||||
| 
 | ||||
| class ArchiveDateError(Exception): | ||||
|     def __init__(self, supplied: str, missing: str): | ||||
|         self.supplied = supplied | ||||
|         self.missing  = missing | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return "Date {self.supplied} was supplied, but required {self.missing} is missing" | ||||
| 
 | ||||
| class Archive(): | ||||
|     path:   str | ||||
|     bucket: S3Bucket | ||||
|  | @ -28,26 +36,44 @@ class Archive(): | |||
|     RE_CALL      = re.compile(r'^[A-Z]{4}$') | ||||
|     RE_PRODUCT   = re.compile(r'^([A-Z]{4})(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})') | ||||
| 
 | ||||
|     def each_downloaded_key(self): | ||||
|     def each_downloaded_key(self, | ||||
|                             year:  int=None, | ||||
|                             month: int=None, | ||||
|                             day:   int=None): | ||||
|         parts = [self.path] | ||||
| 
 | ||||
|         for year in os.scandir(os.path.join(*parts)): | ||||
|             if not (year.is_dir() and self.RE_YEAR.match(year.name)): | ||||
|         if day is not None and month is None: | ||||
|             raise ArchiveDateError('day', 'month') | ||||
| 
 | ||||
|         if month is not None and year is None: | ||||
|             raise ArchiveDateError('month', 'year') | ||||
| 
 | ||||
|         for cur_year in os.scandir(os.path.join(*parts)): | ||||
|             if not (cur_year.is_dir() and self.RE_YEAR.match(cur_year.name)): | ||||
|                 continue | ||||
| 
 | ||||
|             parts.append(year.name) | ||||
|             if year is not None and int(cur_year.name) != year: | ||||
|                 continue | ||||
| 
 | ||||
|             for month in os.scandir(os.path.join(*parts)): | ||||
|                 if not (month.is_dir() and self.RE_MONTH_DAY.match(month.name)): | ||||
|             parts.append(cur_year.name) | ||||
| 
 | ||||
|             for cur_month in os.scandir(os.path.join(*parts)): | ||||
|                 if not (cur_month.is_dir() and self.RE_MONTH_DAY.match(cur_month.name)): | ||||
|                     continue | ||||
| 
 | ||||
|                 parts.append(month.name) | ||||
|                 if month is not None and int(cur_month.name) != month: | ||||
|                     continue | ||||
| 
 | ||||
|                 for day in os.scandir(os.path.join(*parts)): | ||||
|                     if not (day.is_dir() and self.RE_MONTH_DAY.match(day.name)): | ||||
|                 parts.append(cur_month.name) | ||||
| 
 | ||||
|                 for cur_day in os.scandir(os.path.join(*parts)): | ||||
|                     if not (cur_day.is_dir() and self.RE_MONTH_DAY.match(cur_day.name)): | ||||
|                         continue | ||||
| 
 | ||||
|                     parts.append(day.name) | ||||
|                     if day is not None and int(cur_day.name) != day: | ||||
|                         continue | ||||
| 
 | ||||
|                     parts.append(cur_day.name) | ||||
| 
 | ||||
|                     for call in os.scandir(os.path.join(*parts)): | ||||
|                         if not (call.is_dir() and self.RE_CALL.match(call.name)): | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue