55from  django .db  import  transaction 
66from  django .db .models  import  Count , Q 
77from  django .db .models .expressions  import  F 
8- from  django .views .decorators .http  import  require_http_methods 
8+ from  django .views .decorators .http  import  require_http_methods ,  require_POST 
99from  django .urls  import  reverse 
1010from  django .http  import  HttpResponseForbidden , HttpResponse , HttpResponseBadRequest , JsonResponse , \
1111    FileResponse 
2626from  imagetagger .users .forms  import  TeamCreationForm 
2727from  imagetagger .users .models  import  User , Team 
2828from  imagetagger .tagger_messages .forms  import  TeamMessageCreationForm 
29- import  json 
3029
3130from  .models  import  ImageSet , Image , SetTag 
3231from  .forms  import  LabelUploadForm 
@@ -50,7 +49,7 @@ def metadata_create(request):
5049    if  request .method  ==  'POST' :
5150        form  =  ImageMetadataForm (request .POST )
5251        if  form .is_valid ():
53-             data  =  request . POST 
52+             data  =  form . cleaned_data 
5453            img  =  get_object_or_404 (Image , pk = data ['image' ])
5554            metadata  =  json .loads (img .metadata )
5655            metadata [data ['name' ]] =  data ['value' ]
@@ -62,15 +61,19 @@ def metadata_create(request):
6261    return  redirect (reverse ('annotations:annotate' , args = (request .POST ['image' ],)))
6362
6463
65- @login_required  
64+ @require_POST  
6665def  metadata_delete (request , image_id ):
6766    img  =  get_object_or_404 (Image , id = image_id )
6867    metadata  =  json .loads (img .metadata )
69-     metadata .pop (request .POST ['key' ])
68+     if  request .POST ['key' ] in  metadata :
69+         metadata .pop (request .POST ['key' ])
70+         messages .info (request ,
71+                       _ ("Successfully deleted \' {}\'  in metadata" .format (request .POST ['key' ])))
72+     else :
73+         messages .info (request ,
74+                       _ ("Error! \' {}\'  was not found in metadata!" .format (request .POST ['key' ])))
7075    img .metadata  =  json .dumps (metadata )
7176    img .save ()
72-     messages .info (request ,
73-                   _ ("Successfully deleted \' {}\'  in metadata" .format (request .POST ['key' ])))
7477    return  redirect (reverse ('annotations:annotate' , args = (image_id ,)))
7578
7679
@@ -210,7 +213,7 @@ def extract_metadata(img):
210213            for  (tag , value ) in  img ._getexif ().items ():
211214                metadata [TAGS .get (tag )] =  value 
212215        return  json .dumps (metadata , default = str )
213-      
216+ 
214217    imageset  =  get_object_or_404 (ImageSet , id = imageset_id )
215218    if  request .method  ==  'POST'  \
216219            and  imageset .has_perm ('edit_set' , request .user ) \
@@ -274,7 +277,7 @@ def extract_metadata(img):
274277                                    with  PIL_Image .open (file_path ) as  image :
275278                                        width , height  =  image .size 
276279                                        # extracting metadata info 
277-                                         metadata  =  extract_metadata (image_file )
280+                                         metadata  =  extract_metadata (image )
278281                                    file_new_path  =  os .path .join (imageset .root_path (), img_fname )
279282                                    shutil .move (file_path , file_new_path )
280283                                    shutil .chown (file_new_path , group = settings .UPLOAD_FS_GROUP )
@@ -306,7 +309,7 @@ def extract_metadata(img):
306309                    fchecksum .update (chunk )
307310                fchecksum  =  fchecksum .digest ()
308311                # tests for duplicats in  imageset 
309-                 if  Image .objects .filter (checksum = fchecksum , image_set = imageset )\
312+                 if  Image .objects .filter (checksum = fchecksum , image_set = imageset )  \
310313                        .count () ==  0 :
311314                    fname  =  ('_' .join (fname [:- 1 ]) +  '_'  + 
312315                             '' .join (random .choice (string .ascii_uppercase  +  string .ascii_lowercase  +  string .digits )
@@ -404,11 +407,12 @@ def view_image(request, image_id):
404407        response  =  HttpResponse (content_type = 'image' )
405408        response ['X-Accel-Redirect' ] =  "/ngx_static_dn/{}" .format (image .relative_path ())
406409    else :
407-         response  =    FileResponse (open (file_path , 'rb' ), content_type = "image" )
410+         response  =  FileResponse (open (file_path , 'rb' ), content_type = "image" )
408411
409412    response ["Content-Length" ] =  os .path .getsize (file_path )
410413    return  response 
411414
415+ 
412416@login_required  
413417def  list_images (request , image_set_id ):
414418    imageset  =  get_object_or_404 (ImageSet , id = image_set_id )
@@ -507,7 +511,7 @@ def create_imageset(request):
507511        messages .warning (
508512            request ,
509513            _ ('You do not have permission to create image sets in the team {}.' )
510-             .format (team .name ))
514+                  .format (team .name ))
511515        return  redirect (reverse ('users:team' , args = (team .id ,)))
512516
513517    form  =  ImageSetCreationForm ()
@@ -516,7 +520,7 @@ def create_imageset(request):
516520        form  =  ImageSetCreationForm (request .POST )
517521
518522        if  form .is_valid ():
519-             if  team .image_sets \
523+             if  team .image_sets   \
520524                    .filter (name = form .cleaned_data .get ('name' )).exists ():
521525                form .add_error (
522526                    'name' ,
@@ -666,7 +670,7 @@ def label_upload(request, imageset_id):
666670                        if  len (test_flags ) >  0 :
667671                            report_list .append (
668672                                'unknown flags: \" {}\"  for image: \" {}\" ' 
669-                                 .format (test_flags , line_frags [0 ])
673+                                      .format (test_flags , line_frags [0 ])
670674                            )
671675                        blurred  =  'b'  in  flags 
672676                        concealed  =  'c'  in  flags 
@@ -678,7 +682,8 @@ def label_upload(request, imageset_id):
678682                            vector  =  json .loads (line_frags [2 ])
679683                        except  JSONDecodeError :
680684                            report_list .append ("In image \" {}\"  the annotation:" 
681-                                                " \" {}\"  was not accepted as valid JSON" .format (line_frags [0 ], line_frags [2 ]))
685+                                                " \" {}\"  was not accepted as valid JSON" .format (line_frags [0 ],
686+                                                                                                line_frags [2 ]))
682687
683688                    if  annotation_type .validate_vector (vector ):
684689                        if  not  Annotation .similar_annotations (vector , image , annotation_type ):
@@ -706,7 +711,7 @@ def label_upload(request, imageset_id):
706711                        report_list .append (
707712                            'For the image '  +  line_frags [0 ] +  ' the annotation '  + 
708713                            line_frags [2 ] +  ' was not a valid vector or ' 
709-                             'bounding box for the annotation type' 
714+                                              'bounding box for the annotation type' 
710715                        )
711716                else :
712717                    error_count  +=  1 
@@ -725,19 +730,19 @@ def label_upload(request, imageset_id):
725730            messages .warning (
726731                request ,
727732                _ ('The label upload ended with {} errors and {} similar existing labels.' )
728-                 .format (error_count , similar_count ))
733+                      .format (error_count , similar_count ))
729734        else :
730735            messages .success (
731736                request ,
732737                _ ('The label upload ended with {} errors and {} similar existing labels.' )
733-                 .format (error_count , similar_count ))
738+                      .format (error_count , similar_count ))
734739    return  redirect (reverse ('images:view_imageset' , args = (imageset_id ,)))
735740
736741
737742def  dl_script (request ):
738743    return  TemplateResponse (request , 'images/download.py' , context = {
739-                              'base_url' : settings .DOWNLOAD_BASE_URL ,
740-                              }, content_type = 'text/plain' )
744+         'base_url' : settings .DOWNLOAD_BASE_URL ,
745+     }, content_type = 'text/plain' )
741746
742747
743748def  download_imageset_zip (request , image_set_id ):
@@ -897,7 +902,8 @@ def autocomplete_image_set_tag(request) -> Response:
897902    except  (KeyError , TypeError , ValueError ):
898903        raise  ParseError 
899904    tag_suggestions  =  list (SetTag .objects .filter (name__startswith = tag_name_query ))
900-     tag_suggestions .extend (list (SetTag .objects .filter (~ Q (name__startswith = tag_name_query ) &  Q (name__contains = tag_name_query ))))
905+     tag_suggestions .extend (
906+         list (SetTag .objects .filter (~ Q (name__startswith = tag_name_query ) &  Q (name__contains = tag_name_query ))))
901907    tag_suggestions  =  [tag_suggestion .name  for  tag_suggestion  in  tag_suggestions ]
902908    print (tag_suggestions )
903909
0 commit comments