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,60 @@ 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 )
95-
96- valid_dirs = __get_path_tree (valid_paths , target_dir )
97-
98- # main_target = targets[0]
9990 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-
113- succeeded = True
11491 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 )
102+
103+ logger .info ("Start uploading files to s3 buckets: %s" , bucket_ )
104+ failed_files = client .upload_files (
105+ file_paths = [valid_paths [0 ]],
106+ targets = [(bucket_ , prefix__ )],
107+ product = product ,
108+ root = target_dir
109+ )
110+ logger .info ("Files uploading done\n " )
111+
112+ succeeded = True
113+
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 ], "/" )
129+ logger .info (
130+ "Start generating version-level package.json for package: %s in s3 bucket %s" ,
131+ package_metadata .name , bucket_
132+ )
133+ failed_metas = []
134+ _version_metadata_path = valid_paths [1 ]
135+ _failed_metas = client .upload_metadatas (
136+ meta_file_paths = [_version_metadata_path ],
137+ target = (bucket_ , prefix__ ),
138+ product = product ,
139+ root = target_dir
140+ )
141+ failed_metas .extend (_failed_metas )
142+ logger .info ("version-level package.json uploading done" )
143+
131144 logger .info (
132145 "Start generating package.json for package: %s in s3 bucket %s" ,
133146 package_metadata .name , bucket_
@@ -137,7 +150,6 @@ def handle_npm_uploading(
137150 )
138151 logger .info ("package.json generation done\n " )
139152
140- failed_metas = []
141153 if META_FILE_GEN_KEY in meta_files :
142154 _failed_metas = client .upload_metadatas (
143155 meta_file_paths = [meta_files [META_FILE_GEN_KEY ]],
@@ -178,7 +190,7 @@ def handle_npm_uploading(
178190def handle_npm_del (
179191 tarball_path : str ,
180192 product : str ,
181- targets : List [Tuple [str , str , str ]] = None ,
193+ targets : List [Tuple [str , str , str , str ]] = None ,
182194 aws_profile = None ,
183195 dir_ = None ,
184196 do_index = True ,
@@ -381,11 +393,11 @@ def _gen_npm_package_metadata_for_del(
381393 return meta_files
382394
383395
384- def _scan_metadata_paths_from_archive (path : str , prod = "" , dir__ = None ) -> Tuple [ str , list ,
385- NPMPackageMetadata ]:
396+ def _scan_metadata_paths_from_archive (path : str , registry : str , prod = "" , dir__ = None ) -> \
397+ Tuple [ str , list , NPMPackageMetadata ]:
386398 tmp_root = mkdtemp (prefix = f"npm-charon-{ prod } -" , dir = dir__ )
387399 try :
388- _ , valid_paths = extract_npm_tarball (path , tmp_root , True )
400+ _ , valid_paths = extract_npm_tarball (path , tmp_root , True , registry )
389401 if len (valid_paths ) > 1 :
390402 version = _scan_for_version (valid_paths [1 ])
391403 package = NPMPackageMetadata (version , True )
@@ -502,23 +514,14 @@ def _write_package_metadata_to_file(package_metadata: NPMPackageMetadata, root='
502514 final_package_metadata_path = os .path .join (root , package_metadata .name , PACKAGE_JSON )
503515 try :
504516 with open (final_package_metadata_path , mode = 'w' , encoding = 'utf-8' ) as f :
505- dump (_del_none (package_metadata .__dict__ .copy ()), f )
517+ dump (del_none (package_metadata .__dict__ .copy ()), f )
506518 return final_package_metadata_path
507519 except FileNotFoundError :
508520 logger .error (
509521 'Can not create file %s because of some missing folders' , final_package_metadata_path
510522 )
511523
512524
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-
522525def __get_path_tree (paths : str , prefix : str ) -> Set [str ]:
523526 valid_dirs = set ()
524527 for f in paths :
0 commit comments