4040from .flask .models import IndiAllSkyDbKeogramTable
4141from .flask .models import IndiAllSkyDbStarTrailsTable
4242from .flask .models import IndiAllSkyDbStarTrailsVideoTable
43+ from .flask .models import IndiAllSkyDbPanoramaImageTable
44+ from .flask .models import IndiAllSkyDbPanoramaVideoTable
4345from .flask .models import IndiAllSkyDbTaskQueueTable
4446
4547from sqlalchemy import or_
@@ -521,7 +523,8 @@ def _stopFileUploadWorkers(self):
521523 active_worker_list .append (upload_worker_dict )
522524
523525 # need to put the stops in the queue before waiting on workers to join
524- self .upload_q .put ({'stop' : True })
526+ #self.upload_q.put({'stop' : True})
527+ upload_worker_dict ['worker' ].stop ()
525528
526529
527530 for upload_worker_dict in active_worker_list :
@@ -670,6 +673,8 @@ def _dbImportImages(self):
670673 'latitude' : 0.0 ,
671674 'longitude' : 0.0 ,
672675 'elevation' : 0 ,
676+ 'alt' : 0 ,
677+ 'az' : 0 ,
673678 }
674679 camera = self ._miscDb .addCamera (camera_metadata )
675680 camera_id = camera .id
@@ -709,7 +714,7 @@ def _dbImportImages(self):
709714 d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
710715
711716 video_dict = {
712- 'filename' : str (f ),
717+ 'filename' : str (f . relative_to ( self . image_dir ) ),
713718 'createDate' : d_createDate ,
714719 'dayDate' : d_dayDate ,
715720 'night' : night ,
@@ -765,7 +770,7 @@ def _dbImportImages(self):
765770 d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
766771
767772 keogram_dict = {
768- 'filename' : str (f ),
773+ 'filename' : str (f . relative_to ( self . image_dir ) ),
769774 'createDate' : d_createDate ,
770775 'dayDate' : d_dayDate ,
771776 'night' : night ,
@@ -815,7 +820,7 @@ def _dbImportImages(self):
815820 d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
816821
817822 startrail_dict = {
818- 'filename' : str (f ),
823+ 'filename' : str (f . relative_to ( self . image_dir ) ),
819824 'createDate' : d_createDate ,
820825 'dayDate' : d_dayDate ,
821826 'night' : night ,
@@ -866,7 +871,7 @@ def _dbImportImages(self):
866871 d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
867872
868873 startrail_video_dict = {
869- 'filename' : str (f ),
874+ 'filename' : str (f . relative_to ( self . image_dir ) ),
870875 'createDate' : d_createDate ,
871876 'dayDate' : d_dayDate ,
872877 'night' : night ,
@@ -887,17 +892,70 @@ def _dbImportImages(self):
887892 db .session .rollback ()
888893
889894
895+ ### Panorama Videos
896+ file_list_panorama_video_tl = filter (lambda p : 'timelapse' in p .name , file_list_videos )
897+ file_list_panorama_video = filter (lambda p : 'panorama' in p .name , file_list_panorama_video_tl )
898+
899+ #/var/www/html/allsky/images/20210915/allsky-panorama_timelapse_ccd1_20210915_night.mp4
900+ re_panorama_video = re .compile (r'(?P<dayDate_str>\d{8})\/.+panorama_timelapse_ccd(?P<ccd_id_str>\d+)_\d{8}_(?P<timeofday_str>[a-z]+)\.[a-z0-9]+$' )
901+
902+ panorama_video_entries = list ()
903+ for f in file_list_panorama_video :
904+ #logger.info('Panorama timelapse: %s', f)
905+
906+ m = re .search (re_panorama_video , str (f ))
907+ if not m :
908+ logger .error ('Regex did not match file: %s' , f )
909+ continue
910+
911+ #logger.info('dayDate string: %s', m.group('dayDate_str'))
912+ #logger.info('Time of day string: %s', m.group('timeofday_str'))
913+
914+ d_dayDate = datetime .strptime (m .group ('dayDate_str' ), '%Y%m%d' ).date ()
915+ #logger.info('dayDate: %s', str(d_dayDate))
916+
917+ if m .group ('timeofday_str' ) == 'night' :
918+ night = True
919+ else :
920+ night = False
921+
922+ d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
923+
924+ panorama_video_dict = {
925+ 'filename' : str (f .relative_to (self .image_dir )),
926+ 'createDate' : d_createDate ,
927+ 'dayDate' : d_dayDate ,
928+ 'night' : night ,
929+ 'uploaded' : False ,
930+ 'camera_id' : camera_id ,
931+ }
932+
933+ panorama_video_entries .append (panorama_video_dict )
934+
935+
936+ try :
937+ db .session .bulk_insert_mappings (IndiAllSkyDbPanoramaVideoTable , panorama_video_entries )
938+ db .session .commit ()
939+
940+ logger .warning ('*** Panorama timelapses inserted: %d ***' , len (panorama_video_entries ))
941+ except IntegrityError as e :
942+ logger .warning ('Integrity error: %s' , str (e ))
943+ db .session .rollback ()
944+
945+
890946 ### Images
891947 # Exclude keograms and star trails
892948 file_list_images_nok = filter (lambda p : 'keogram' not in p .name , file_list_images )
893949 file_list_images_nok_nost = filter (lambda p : 'startrail' not in p .name , file_list_images_nok )
894950 file_list_images_nok_nost_noraw = filter (lambda p : 'raw' not in p .name , file_list_images_nok_nost )
951+ file_list_images_nok_nost_noraw_nopan = filter (lambda p : 'panorama' not in p .name , file_list_images_nok_nost_noraw )
952+ file_list_images_nok_nost_noraw_nopan_nothumb = filter (lambda p : 'thumbnail' not in p .name , file_list_images_nok_nost_noraw_nopan )
895953
896954 #/var/www/html/allsky/images/20210825/night/26_02/ccd1_20210826_020202.jpg
897955 re_image = re .compile (r'(?P<dayDate_str>\d{8})\/(?P<timeofday_str>[a-z]+)\/\d{2}_\d{2}\/ccd(?P<ccd_id_str>\d+)_(?P<createDate_str>[0-9_]+)\.[a-z]+$' )
898956
899957 image_entries = list ()
900- for f in file_list_images_nok_nost_noraw :
958+ for f in file_list_images_nok_nost_noraw_nopan_nothumb :
901959 #logger.info('Image: %s', f)
902960
903961 m = re .search (re_image , str (f ))
@@ -923,7 +981,7 @@ def _dbImportImages(self):
923981
924982
925983 image_dict = {
926- 'filename' : str (f ),
984+ 'filename' : str (f . relative_to ( self . image_dir ) ),
927985 'camera_id' : camera_id ,
928986 'createDate' : d_createDate ,
929987 'dayDate' : d_dayDate ,
@@ -951,6 +1009,63 @@ def _dbImportImages(self):
9511009 db .session .rollback ()
9521010
9531011
1012+ ### Panorama images
1013+ file_list_panorama_images = filter (lambda p : 'panoram' in p .name , file_list_images )
1014+
1015+ #/var/www/html/allsky/images/20210825/night/26_02/panorama_ccd1_20210826_020202.jpg
1016+ re_image = re .compile (r'(?P<dayDate_str>\d{8})\/(?P<timeofday_str>[a-z]+)\/\d{2}_\d{2}\/panorama_ccd(?P<ccd_id_str>\d+)_(?P<createDate_str>[0-9_]+)\.[a-z]+$' )
1017+
1018+ panorama_image_entries = list ()
1019+ for f in file_list_panorama_images :
1020+ #logger.info('Image: %s', f)
1021+
1022+ m = re .search (re_image , str (f ))
1023+ if not m :
1024+ logger .error ('Regex did not match file: %s' , f )
1025+ continue
1026+
1027+ #logger.info('dayDate string: %s', m.group('dayDate_str'))
1028+ #logger.info('Time of day string: %s', m.group('timeofday_str'))
1029+ #logger.info('createDate string: %s', m.group('createDate_str'))
1030+
1031+ d_dayDate = datetime .strptime (m .group ('dayDate_str' ), '%Y%m%d' ).date ()
1032+ #logger.info('dayDate: %s', str(d_dayDate))
1033+
1034+ if m .group ('timeofday_str' ) == 'night' :
1035+ night = True
1036+ else :
1037+ night = False
1038+
1039+ #d_createDate = datetime.strptime(m.group('createDate_str'), '%Y%m%d_%H%M%S')
1040+ d_createDate = datetime .fromtimestamp (f .stat ().st_mtime )
1041+ #logger.info('createDate: %s', str(d_createDate))
1042+
1043+
1044+ panorama_image_dict = {
1045+ 'filename' : str (f .relative_to (self .image_dir )),
1046+ 'camera_id' : camera_id ,
1047+ 'createDate' : d_createDate ,
1048+ 'dayDate' : d_dayDate ,
1049+ 'exposure' : 0.0 ,
1050+ 'gain' : - 1 ,
1051+ 'binmode' : 1 ,
1052+ 'night' : night ,
1053+ 'uploaded' : False ,
1054+ }
1055+
1056+
1057+ panorama_image_entries .append (panorama_image_dict )
1058+
1059+ try :
1060+ db .session .bulk_insert_mappings (IndiAllSkyDbPanoramaImageTable , panorama_image_entries )
1061+ db .session .commit ()
1062+
1063+ logger .warning ('*** Panorama images inserted: %d ***' , len (panorama_image_entries ))
1064+ except IntegrityError as e :
1065+ logger .warning ('Integrity error: %s' , str (e ))
1066+ db .session .rollback ()
1067+
1068+
9541069 def _getFolderFilesByExt (self , folder , file_list , extension_list = None ):
9551070 if not extension_list :
9561071 extension_list = [self .config ['IMAGE_FILE_TYPE' ]]
0 commit comments