3030from charon .pkgs .pkg_utils import upload_post_process , rollback_post_process
3131from charon .utils .strings import remove_prefix
3232from charon .utils .files import write_manifest
33+ from charon .utils .map import del_none
3334
3435logger = logging .getLogger (__name__ )
3536
@@ -65,7 +66,7 @@ def __init__(self, metadata, is_version):
6566def handle_npm_uploading (
6667 tarball_path : str ,
6768 product : str ,
68- targets : List [Tuple [str , str , str ]] = None ,
69+ targets : List [Tuple [str , str , str , str ]] = None ,
6970 aws_profile = None ,
7071 dir_ = None ,
7172 do_index = True ,
@@ -86,48 +87,45 @@ def handle_npm_uploading(
8687
8788 Returns the directory used for archive processing and if uploading is successful
8889 """
89- target_dir , valid_paths , package_metadata = _scan_metadata_paths_from_archive (
90- tarball_path , prod = product , dir__ = dir_
91- )
92- if not os .path .isdir (target_dir ):
93- logger .error ("Error: the extracted target_dir path %s does not exist." , target_dir )
94- sys .exit (1 )
90+ client = S3Client (aws_profile = aws_profile , dry_run = dry_run )
91+ for target in targets :
92+ bucket_ = target [1 ]
93+ prefix__ = remove_prefix (target [2 ], "/" )
94+ registry__ = target [3 ]
95+ target_dir , valid_paths , package_metadata = _scan_metadata_paths_from_archive (
96+ tarball_path , registry__ , prod = product , dir__ = dir_
97+ )
98+ if not os .path .isdir (target_dir ):
99+ logger .error ("Error: the extracted target_dir path %s does not exist." , target_dir )
100+ sys .exit (1 )
101+ valid_dirs = __get_path_tree (valid_paths , target_dir )
95102
96- valid_dirs = __get_path_tree (valid_paths , target_dir )
103+ logger .info ("Start uploading files to s3 buckets: %s" , bucket_ )
104+ failed_files = client .upload_files (
105+ file_paths = valid_paths ,
106+ targets = [(bucket_ , prefix__ )],
107+ product = product ,
108+ root = target_dir
109+ )
110+ logger .info ("Files uploading done\n " )
97111
98- # main_target = targets[0]
99- client = S3Client (aws_profile = aws_profile , dry_run = dry_run )
100- targets_ = [(target [1 ], remove_prefix (target [2 ], "/" )) for target in targets ]
101- logger .info (
102- "Start uploading files to s3 buckets: %s" ,
103- [target [1 ] for target in targets ]
104- )
105- failed_files = client .upload_files (
106- file_paths = valid_paths ,
107- targets = targets_ ,
108- product = product ,
109- root = target_dir
110- )
111- logger .info ("Files uploading done\n " )
112+ succeeded = True
112113
113- succeeded = True
114- for target in targets :
115114 if not manifest_bucket_name :
116115 logger .warning (
117116 'Warning: No manifest bucket is provided, will ignore the process of manifest '
118117 'uploading\n ' )
119118 else :
120119 logger .info ("Start uploading manifest to s3 bucket %s" , manifest_bucket_name )
121- manifest_folder = target [ 1 ]
120+ manifest_folder = bucket_
122121 manifest_name , manifest_full_path = write_manifest (valid_paths , target_dir , product )
122+
123123 client .upload_manifest (
124124 manifest_name , manifest_full_path ,
125125 manifest_folder , manifest_bucket_name
126126 )
127127 logger .info ("Manifest uploading is done\n " )
128128
129- bucket_ = target [1 ]
130- prefix__ = remove_prefix (target [2 ], "/" )
131129 logger .info (
132130 "Start generating package.json for package: %s in s3 bucket %s" ,
133131 package_metadata .name , bucket_
@@ -178,7 +176,7 @@ def handle_npm_uploading(
178176def handle_npm_del (
179177 tarball_path : str ,
180178 product : str ,
181- targets : List [Tuple [str , str , str ]] = None ,
179+ targets : List [Tuple [str , str , str , str ]] = None ,
182180 aws_profile = None ,
183181 dir_ = None ,
184182 do_index = True ,
@@ -381,11 +379,11 @@ def _gen_npm_package_metadata_for_del(
381379 return meta_files
382380
383381
384- def _scan_metadata_paths_from_archive (path : str , prod = "" , dir__ = None ) -> Tuple [ str , list ,
385- NPMPackageMetadata ]:
382+ def _scan_metadata_paths_from_archive (path : str , registry : str , prod = "" , dir__ = None ) -> \
383+ Tuple [ str , list , NPMPackageMetadata ]:
386384 tmp_root = mkdtemp (prefix = f"npm-charon-{ prod } -" , dir = dir__ )
387385 try :
388- _ , valid_paths = extract_npm_tarball (path , tmp_root , True )
386+ _ , valid_paths = extract_npm_tarball (path , tmp_root , True , registry )
389387 if len (valid_paths ) > 1 :
390388 version = _scan_for_version (valid_paths [1 ])
391389 package = NPMPackageMetadata (version , True )
@@ -502,23 +500,14 @@ def _write_package_metadata_to_file(package_metadata: NPMPackageMetadata, root='
502500 final_package_metadata_path = os .path .join (root , package_metadata .name , PACKAGE_JSON )
503501 try :
504502 with open (final_package_metadata_path , mode = 'w' , encoding = 'utf-8' ) as f :
505- dump (_del_none (package_metadata .__dict__ .copy ()), f )
503+ dump (del_none (package_metadata .__dict__ .copy ()), f )
506504 return final_package_metadata_path
507505 except FileNotFoundError :
508506 logger .error (
509507 'Can not create file %s because of some missing folders' , final_package_metadata_path
510508 )
511509
512510
513- def _del_none (d ):
514- for key , value in list (d .items ()):
515- if value is None :
516- del d [key ]
517- elif isinstance (value , dict ):
518- _del_none (value )
519- return d
520-
521-
522511def __get_path_tree (paths : str , prefix : str ) -> Set [str ]:
523512 valid_dirs = set ()
524513 for f in paths :
0 commit comments