19
19
import re
20
20
from warnings import warn
21
21
import gc
22
+ import click
22
23
23
24
from . import validation
24
25
from .certificates import read_certificate_file
@@ -389,6 +390,7 @@ def output_task_log(task_status, last_status, log_callback):
389
390
class RSConnectExecutor :
390
391
def __init__ (
391
392
self ,
393
+ ctx : click .Context = None ,
392
394
name : str = None ,
393
395
url : str = None ,
394
396
api_key : str = None ,
@@ -406,7 +408,9 @@ def __init__(
406
408
self .reset ()
407
409
self ._d = kwargs
408
410
self .logger = logger
411
+ self .ctx = ctx
409
412
self .setup_remote_server (
413
+ ctx = ctx ,
410
414
name = name ,
411
415
url = url or kwargs .get ("server" ),
412
416
api_key = api_key ,
@@ -442,8 +446,31 @@ def drop_context(self):
442
446
gc .collect ()
443
447
return self
444
448
449
+ def output_overlap_header (self , previous ):
450
+ if self .logger and not previous :
451
+ self .logger .warning (
452
+ "\n Connect detected CLI commands and/or environment variables that overlap with stored credential.\n "
453
+ )
454
+ self .logger .warning (
455
+ "Check your environment variables (e.g. CONNECT_API_KEY) to make sure you want them to be used.\n "
456
+ )
457
+ self .logger .warning (
458
+ "Credential parameters are taken with the following precedence: stored > CLI > environment.\n "
459
+ )
460
+ self .logger .warning (
461
+ "To ignore an environment variable, override it in the CLI with an empty string (e.g. -k '').\n \n "
462
+ )
463
+ return True
464
+
465
+ def output_overlap_details (self , cli_param , previous ):
466
+ new_previous = self .output_overlap_header (previous )
467
+ sourceName = validation .get_parameter_source_name_from_ctx (cli_param , self .ctx )
468
+ self .logger .warning (f">> stored { cli_param } value overrides the { cli_param } value from { sourceName } \n " )
469
+ return new_previous
470
+
445
471
def setup_remote_server (
446
472
self ,
473
+ ctx : click .Context ,
447
474
name : str = None ,
448
475
url : str = None ,
449
476
api_key : str = None ,
@@ -455,6 +482,7 @@ def setup_remote_server(
455
482
secret : str = None ,
456
483
):
457
484
validation .validate_connection_options (
485
+ ctx = ctx ,
458
486
url = url ,
459
487
api_key = api_key ,
460
488
insecure = insecure ,
@@ -464,45 +492,37 @@ def setup_remote_server(
464
492
secret = secret ,
465
493
name = name ,
466
494
)
495
+ header_output = False
467
496
468
497
if cacert and not ca_data :
469
498
ca_data = read_certificate_file (cacert )
470
499
471
500
server_data = ServerStore ().resolve (name , url )
472
501
if server_data .from_store :
473
502
url = server_data .url
474
- if (
475
- server_data .api_key
476
- and api_key
477
- or server_data .insecure
478
- and insecure
479
- or server_data .ca_data
480
- and ca_data
481
- or server_data .account_name
482
- and account_name
483
- or server_data .token
484
- and token
485
- or server_data .secret
486
- and secret
487
- ) and self .logger :
488
- self .logger .warning (
489
- "Connect detected CLI commands and/or environment variables that overlap with stored credential.\n "
490
- )
491
- self .logger .warning (
492
- "Check your environment variables (e.g. CONNECT_API_KEY) to make sure you want them to be used.\n "
493
- )
494
- self .logger .warning (
495
- "Credential paremeters are taken with the following precedence: stored > CLI > environment.\n "
496
- )
497
- self .logger .warning (
498
- "To ignore an environment variable, override it in the CLI with an empty string (e.g. -k '').\n "
499
- )
503
+ if self .logger :
504
+ if server_data .api_key and api_key :
505
+ header_output = self .output_overlap_details ("api-key" , header_output )
506
+ if server_data .insecure and insecure :
507
+ header_output = self .output_overlap_details ("insecure" , header_output )
508
+ if server_data .ca_data and ca_data :
509
+ header_output = self .output_overlap_details ("cacert" , header_output )
510
+ if server_data .account_name and account_name :
511
+ header_output = self .output_overlap_details ("account" , header_output )
512
+ if server_data .token and token :
513
+ header_output = self .output_overlap_details ("token" , header_output )
514
+ if server_data .secret and secret :
515
+ header_output = self .output_overlap_details ("secret" , header_output )
516
+ if header_output :
517
+ self .logger .warning ("\n " )
518
+
500
519
api_key = server_data .api_key or api_key
501
520
insecure = server_data .insecure or insecure
502
521
ca_data = server_data .ca_data or ca_data
503
522
account_name = server_data .account_name or account_name
504
523
token = server_data .token or token
505
524
secret = server_data .secret or secret
525
+
506
526
self .is_server_from_store = server_data .from_store
507
527
508
528
if api_key :
@@ -571,7 +591,7 @@ def validate_connect_server(
571
591
:param url: the URL, if any, specified by the user.
572
592
:param api_key: the API key, if any, specified by the user.
573
593
:param insecure: a flag noting whether TLS host/validation should be skipped.
574
- :param cacert: the file object of a CA certs file containing certificates to use.
594
+ :param cacert: the file path of a CA certs file containing certificates to use.
575
595
:param api_key_is_required: a flag that notes whether the API key is required or may
576
596
be omitted.
577
597
:param token: The shinyapps.io authentication token.
0 commit comments