5
5
from django .db import transaction
6
6
from django .db .models import Count , Q
7
7
from 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
9
9
from django .urls import reverse
10
10
from django .http import HttpResponseForbidden , HttpResponse , HttpResponseBadRequest , JsonResponse , \
11
11
FileResponse
26
26
from imagetagger .users .forms import TeamCreationForm
27
27
from imagetagger .users .models import User , Team
28
28
from imagetagger .tagger_messages .forms import TeamMessageCreationForm
29
- import json
30
29
31
30
from .models import ImageSet , Image , SetTag
32
31
from .forms import LabelUploadForm
@@ -50,7 +49,7 @@ def metadata_create(request):
50
49
if request .method == 'POST' :
51
50
form = ImageMetadataForm (request .POST )
52
51
if form .is_valid ():
53
- data = request . POST
52
+ data = form . cleaned_data
54
53
img = get_object_or_404 (Image , pk = data ['image' ])
55
54
metadata = json .loads (img .metadata )
56
55
metadata [data ['name' ]] = data ['value' ]
@@ -62,15 +61,19 @@ def metadata_create(request):
62
61
return redirect (reverse ('annotations:annotate' , args = (request .POST ['image' ],)))
63
62
64
63
65
- @login_required
64
+ @require_POST
66
65
def metadata_delete (request , image_id ):
67
66
img = get_object_or_404 (Image , id = image_id )
68
67
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' ])))
70
75
img .metadata = json .dumps (metadata )
71
76
img .save ()
72
- messages .info (request ,
73
- _ ("Successfully deleted \' {}\' in metadata" .format (request .POST ['key' ])))
74
77
return redirect (reverse ('annotations:annotate' , args = (image_id ,)))
75
78
76
79
@@ -210,7 +213,7 @@ def extract_metadata(img):
210
213
for (tag , value ) in img ._getexif ().items ():
211
214
metadata [TAGS .get (tag )] = value
212
215
return json .dumps (metadata , default = str )
213
-
216
+
214
217
imageset = get_object_or_404 (ImageSet , id = imageset_id )
215
218
if request .method == 'POST' \
216
219
and imageset .has_perm ('edit_set' , request .user ) \
@@ -274,7 +277,7 @@ def extract_metadata(img):
274
277
with PIL_Image .open (file_path ) as image :
275
278
width , height = image .size
276
279
# extracting metadata info
277
- metadata = extract_metadata (image_file )
280
+ metadata = extract_metadata (image )
278
281
file_new_path = os .path .join (imageset .root_path (), img_fname )
279
282
shutil .move (file_path , file_new_path )
280
283
shutil .chown (file_new_path , group = settings .UPLOAD_FS_GROUP )
@@ -306,7 +309,7 @@ def extract_metadata(img):
306
309
fchecksum .update (chunk )
307
310
fchecksum = fchecksum .digest ()
308
311
# 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 ) \
310
313
.count () == 0 :
311
314
fname = ('_' .join (fname [:- 1 ]) + '_' +
312
315
'' .join (random .choice (string .ascii_uppercase + string .ascii_lowercase + string .digits )
@@ -404,11 +407,12 @@ def view_image(request, image_id):
404
407
response = HttpResponse (content_type = 'image' )
405
408
response ['X-Accel-Redirect' ] = "/ngx_static_dn/{}" .format (image .relative_path ())
406
409
else :
407
- response = FileResponse (open (file_path , 'rb' ), content_type = "image" )
410
+ response = FileResponse (open (file_path , 'rb' ), content_type = "image" )
408
411
409
412
response ["Content-Length" ] = os .path .getsize (file_path )
410
413
return response
411
414
415
+
412
416
@login_required
413
417
def list_images (request , image_set_id ):
414
418
imageset = get_object_or_404 (ImageSet , id = image_set_id )
@@ -507,7 +511,7 @@ def create_imageset(request):
507
511
messages .warning (
508
512
request ,
509
513
_ ('You do not have permission to create image sets in the team {}.' )
510
- .format (team .name ))
514
+ .format (team .name ))
511
515
return redirect (reverse ('users:team' , args = (team .id ,)))
512
516
513
517
form = ImageSetCreationForm ()
@@ -516,7 +520,7 @@ def create_imageset(request):
516
520
form = ImageSetCreationForm (request .POST )
517
521
518
522
if form .is_valid ():
519
- if team .image_sets \
523
+ if team .image_sets \
520
524
.filter (name = form .cleaned_data .get ('name' )).exists ():
521
525
form .add_error (
522
526
'name' ,
@@ -666,7 +670,7 @@ def label_upload(request, imageset_id):
666
670
if len (test_flags ) > 0 :
667
671
report_list .append (
668
672
'unknown flags: \" {}\" for image: \" {}\" '
669
- .format (test_flags , line_frags [0 ])
673
+ .format (test_flags , line_frags [0 ])
670
674
)
671
675
blurred = 'b' in flags
672
676
concealed = 'c' in flags
@@ -678,7 +682,8 @@ def label_upload(request, imageset_id):
678
682
vector = json .loads (line_frags [2 ])
679
683
except JSONDecodeError :
680
684
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 ]))
682
687
683
688
if annotation_type .validate_vector (vector ):
684
689
if not Annotation .similar_annotations (vector , image , annotation_type ):
@@ -706,7 +711,7 @@ def label_upload(request, imageset_id):
706
711
report_list .append (
707
712
'For the image ' + line_frags [0 ] + ' the annotation ' +
708
713
line_frags [2 ] + ' was not a valid vector or '
709
- 'bounding box for the annotation type'
714
+ 'bounding box for the annotation type'
710
715
)
711
716
else :
712
717
error_count += 1
@@ -725,19 +730,19 @@ def label_upload(request, imageset_id):
725
730
messages .warning (
726
731
request ,
727
732
_ ('The label upload ended with {} errors and {} similar existing labels.' )
728
- .format (error_count , similar_count ))
733
+ .format (error_count , similar_count ))
729
734
else :
730
735
messages .success (
731
736
request ,
732
737
_ ('The label upload ended with {} errors and {} similar existing labels.' )
733
- .format (error_count , similar_count ))
738
+ .format (error_count , similar_count ))
734
739
return redirect (reverse ('images:view_imageset' , args = (imageset_id ,)))
735
740
736
741
737
742
def dl_script (request ):
738
743
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' )
741
746
742
747
743
748
def download_imageset_zip (request , image_set_id ):
@@ -897,7 +902,8 @@ def autocomplete_image_set_tag(request) -> Response:
897
902
except (KeyError , TypeError , ValueError ):
898
903
raise ParseError
899
904
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 ))))
901
907
tag_suggestions = [tag_suggestion .name for tag_suggestion in tag_suggestions ]
902
908
print (tag_suggestions )
903
909
0 commit comments