@@ -87,13 +87,18 @@ def __init__(self, public_key, private_key, base_url, base_path, sign_with_base_
87
87
88
88
def __call__ (self , r ):
89
89
content_type = r .headers .get ("content-type" , "" )
90
- token = "{}\n \n {}\n {}\n {}{}" .format (r .method , content_type , r .headers ['date' ],
91
- self .base_path , r .url .replace (self .base_url , "" ))
90
+ token = (
91
+ f"{ r .method } \n \n "
92
+ f"{ content_type } \n "
93
+ f"{ r .headers ['date' ]} \n "
94
+ f"{ self .base_path } "
95
+ f"{ r .url .replace (self .base_url , '' )} "
96
+ )
92
97
93
98
signature = base64 .b64encode (hmac .new (bytes (self .private_key , 'utf-8' ),
94
99
token .encode ('utf-8' ), hashlib .sha1 ).digest ())
95
100
96
- authorization = "CYTOMINE {}:{}" . format ( self .public_key , signature .decode ('utf-8' ))
101
+ authorization = f "CYTOMINE { self .public_key } : { signature .decode ('utf-8' )} "
97
102
r .headers ['authorization' ] = authorization
98
103
return r
99
104
@@ -106,8 +111,11 @@ def deprecated(func):
106
111
@functools .wraps (func )
107
112
def new_func (* args , ** kwargs ):
108
113
warnings .simplefilter ('always' , DeprecationWarning ) # turn off filter
109
- warnings .warn ("Call to deprecated function {}." .format (func .__name__ ), category = DeprecationWarning ,
110
- stacklevel = 2 )
114
+ warnings .warn (
115
+ f"Call to deprecated function { func .__name__ } ." ,
116
+ category = DeprecationWarning ,
117
+ stacklevel = 2
118
+ )
111
119
warnings .simplefilter ('default' , DeprecationWarning ) # reset filter
112
120
return func (* args , ** kwargs )
113
121
@@ -343,7 +351,7 @@ def _parse_url(host, provided_protocol=None):
343
351
def _start (self ):
344
352
self ._session = requests .session ()
345
353
if self ._use_cache :
346
- self ._session .mount ('{ }://' . format ( self . _protocol ) , CacheControlAdapter ())
354
+ self ._session .mount (f" { self . _protocol } ://" , CacheControlAdapter ())
347
355
348
356
Cytomine .__instance = self
349
357
self .wait_to_accept_connection ()
@@ -381,7 +389,7 @@ def set_credentials(self, public_key, private_key):
381
389
self .set_current_user ()
382
390
383
391
def _base_url (self , with_base_path = True ):
384
- url = "{ }://{}" . format ( self ._protocol , self . _host )
392
+ url = f" { self . _protocol } ://{ self ._host } "
385
393
if with_base_path :
386
394
url += self ._base_path
387
395
return url
@@ -403,15 +411,21 @@ def _headers(accept="application/json, */*", content_type=None):
403
411
404
412
def _log_response (self , response , message ):
405
413
try :
406
- msg = "[{}] {} | {} {}" .format (response .request .method , message , response .status_code , response .reason )
414
+ msg = (
415
+ f"[{ response .request .method } ] { message } | "
416
+ f"{ response .status_code } { response .reason } "
417
+ )
407
418
if response .status_code == requests .codes .ok or response .status_code >= requests .codes .server_error :
408
419
self .log (msg )
409
420
elif response .status_code == 301 or response .status_code == 302 :
410
421
redirected_url = response .headers ['Location' ]
411
422
raise URLRedirectionException (response .status_code , redirected_url )
412
423
else :
413
- self .log ("{} ({})" .format (msg , read_response_message (response , key = "errors" )), level = logging .ERROR )
414
- self ._logger .debug ("DUMP:\n {}" .format (dump .dump_all (response ).decode ("utf-8" )))
424
+ self .log (
425
+ f"{ msg } ({ read_response_message (response , key = 'errors' )} )" ,
426
+ level = logging .ERROR ,
427
+ )
428
+ self ._logger .debug ("DUMP:\n %s" , dump .dump_all (response ).decode ("utf-8" ))
415
429
except (UnicodeDecodeError , JSONDecodeError ) as e :
416
430
self ._logger .debug ("DUMP:\n Impossible to decode." )
417
431
except URLRedirectionException as e :
@@ -425,14 +439,18 @@ def logger(self):
425
439
return self ._logger
426
440
427
441
def _get (self , uri , query_parameters , with_base_path = True ):
428
- return self ._session .get ("{}{}" .format (self ._base_url (with_base_path ), uri ),
429
- allow_redirects = False ,
430
- auth = CytomineAuth (
431
- self ._public_key , self ._private_key ,
432
- self ._base_url (), self ._base_path ),
433
- headers = self ._headers (),
434
- params = query_parameters )
435
-
442
+ return self ._session .get (
443
+ f"{ self ._base_url (with_base_path )} { uri } " ,
444
+ allow_redirects = False ,
445
+ auth = CytomineAuth (
446
+ self ._public_key ,
447
+ self ._private_key ,
448
+ self ._base_url (),
449
+ self ._base_path ,
450
+ ),
451
+ headers = self ._headers (),
452
+ params = query_parameters ,
453
+ )
436
454
def get (self , uri , query_parameters = None ):
437
455
response = self ._get (uri , query_parameters )
438
456
self ._log_response (response , uri )
@@ -467,13 +485,18 @@ def get_collection(self, collection, query_parameters=None, append_mode=False):
467
485
return collection
468
486
469
487
def _put (self , uri , data = None , query_parameters = None ):
470
- return self ._session .put ("{}{}" .format (self ._base_url (), uri ),
471
- auth = CytomineAuth (
472
- self ._public_key , self ._private_key ,
473
- self ._base_url (), self ._base_path ),
474
- headers = self ._headers (content_type = 'application/json' ),
475
- params = query_parameters ,
476
- data = data )
488
+ return self ._session .put (
489
+ f"{ self ._base_url ()} { uri } " ,
490
+ auth = CytomineAuth (
491
+ self ._public_key ,
492
+ self ._private_key ,
493
+ self ._base_url (),
494
+ self ._base_path ,
495
+ ),
496
+ headers = self ._headers (content_type = "application/json" ),
497
+ params = query_parameters ,
498
+ data = data ,
499
+ )
477
500
478
501
def put (self , uri , data = None , query_paramters = None ):
479
502
response = self ._put (uri , data = data , query_parameters = query_paramters )
@@ -498,12 +521,17 @@ def put_model(self, model, query_parameters=None):
498
521
return model
499
522
500
523
def _delete (self , uri , query_parameters = None ):
501
- return self ._session .delete ("{}{}" .format (self ._base_url (), uri ),
502
- auth = CytomineAuth (
503
- self ._public_key , self ._private_key ,
504
- self ._base_url (), self ._base_path ),
505
- headers = self ._headers (content_type = 'application/json' ),
506
- params = query_parameters )
524
+ return self ._session .delete (
525
+ f"{ self ._base_url ()} { uri } " ,
526
+ auth = CytomineAuth (
527
+ self ._public_key ,
528
+ self ._private_key ,
529
+ self ._base_url (),
530
+ self ._base_path ,
531
+ ),
532
+ headers = self ._headers (content_type = "application/json" ),
533
+ params = query_parameters ,
534
+ )
507
535
508
536
def delete (self , uri , query_parameters = None ):
509
537
response = self ._delete (uri , query_parameters )
@@ -522,13 +550,18 @@ def delete_model(self, model, query_parameters=None):
522
550
return False
523
551
524
552
def _post (self , uri , data = None , query_parameters = None , with_base_path = True ):
525
- return self ._session .post ("{}{}" .format (self ._base_url (with_base_path ), uri ),
526
- auth = CytomineAuth (
527
- self ._public_key , self ._private_key ,
528
- self ._base_url (), self ._base_path ),
529
- headers = self ._headers (content_type = 'application/json' ),
530
- params = query_parameters ,
531
- data = data )
553
+ return self ._session .post (
554
+ f"{ self ._base_url (with_base_path )} { uri } " ,
555
+ auth = CytomineAuth (
556
+ self ._public_key ,
557
+ self ._private_key ,
558
+ self ._base_url (),
559
+ self ._base_path ,
560
+ ),
561
+ headers = self ._headers (content_type = "application/json" ),
562
+ params = query_parameters ,
563
+ data = data ,
564
+ )
532
565
533
566
def post (self , uri , data = None , query_parameters = None ):
534
567
response = self ._post (uri , data = data , query_parameters = query_parameters )
@@ -607,26 +640,31 @@ def upload_file(self, model, filename, query_parameters=None, uri=None):
607
640
uri = model .uri ()
608
641
609
642
m = MultipartEncoder (fields = {"files[]" : (filename , open (filename , 'rb' ))})
610
- response = self ._session .post ("{}{}" .format (self ._base_url (), uri ),
611
- auth = CytomineAuth (
612
- self ._public_key , self ._private_key ,
613
- self ._base_url (), self ._base_path ),
614
- headers = self ._headers (content_type = m .content_type ),
615
- params = query_parameters ,
616
- data = m )
643
+ response = self ._session .post (
644
+ f"{ self ._base_url ()} { uri } " ,
645
+ auth = CytomineAuth (
646
+ self ._public_key ,
647
+ self ._private_key ,
648
+ self ._base_url (),
649
+ self ._base_path ,
650
+ ),
651
+ headers = self ._headers (content_type = m .content_type ),
652
+ params = query_parameters ,
653
+ data = m ,
654
+ )
617
655
618
656
if response .status_code == requests .codes .ok :
619
657
model = model .populate (response .json ()) # [model.callback_identifier.lower()])
620
- self ._logger .info ("File uploaded successfully to {}" . format ( uri ) )
658
+ self ._logger .info ("File uploaded successfully to %s" , uri )
621
659
else :
622
660
model = False
623
- self ._logger .error ("Error during file uploading to {}" . format ( uri ) )
661
+ self ._logger .error ("Error during file uploading to %s" , uri )
624
662
625
663
return model
626
664
627
665
def download_file (self , url , destination , override = False , payload = None ):
628
666
if not url .startswith ("http" ):
629
- url = "{}{}" . format ( self ._base_url (), url )
667
+ url = f" { self ._base_url ()} { url } "
630
668
631
669
if override or not os .path .exists (destination ):
632
670
response = self ._session .get (url ,
@@ -646,7 +684,11 @@ def download_file(self, url, destination, override=False, payload=None):
646
684
shutil .copyfileobj (response .raw , f )
647
685
648
686
parameters = str (dict (filter (lambda item : item [1 ] is not None , payload .items ()))) if payload else {}
649
- self ._logger .info ("File downloaded successfully from {} with parameters {}" .format (url , parameters ))
687
+ self ._logger .info (
688
+ "File downloaded successfully from %s with parameters %s" ,
689
+ url ,
690
+ parameters ,
691
+ )
650
692
return True
651
693
else :
652
694
return True
0 commit comments