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