|
16 | 16 | import logging |
17 | 17 | import os |
18 | 18 | import sys |
19 | | -from json import load, loads, dump, JSONDecodeError |
| 19 | +from json import load, loads, dump, JSONDecodeError, JSONEncoder |
20 | 20 | import tarfile |
21 | 21 | from tempfile import mkdtemp |
22 | 22 | from typing import List, Set, Tuple |
|
32 | 32 | from charon.pkgs.pkg_utils import upload_post_process, rollback_post_process |
33 | 33 | from charon.utils.strings import remove_prefix |
34 | 34 | from charon.utils.files import write_manifest |
35 | | -from charon.utils.map import del_none |
| 35 | +from charon.utils.map import del_none, replace_field |
36 | 36 |
|
37 | 37 | logger = logging.getLogger(__name__) |
38 | 38 |
|
@@ -61,10 +61,15 @@ def __init__(self, metadata, is_version): |
61 | 61 | self.dist_tags = {'latest': metadata.get('version')} |
62 | 62 | self.versions = {metadata.get('version'): metadata} |
63 | 63 | else: |
64 | | - self.dist_tags = metadata.get('dist_tags', None) |
| 64 | + self.dist_tags = metadata.get('dist-tags', None) |
65 | 65 | self.versions = metadata.get('versions', None) |
66 | 66 |
|
67 | 67 |
|
| 68 | +class NPMPackageMetadataEncoder(JSONEncoder): |
| 69 | + def default(self, o): |
| 70 | + return replace_field(del_none(o.__dict__.copy()), "dist_tags", "dist-tags") |
| 71 | + |
| 72 | + |
68 | 73 | def handle_npm_uploading( |
69 | 74 | tarball_path: str, |
70 | 75 | product: str, |
@@ -549,7 +554,7 @@ def _write_package_metadata_to_file(package_metadata: NPMPackageMetadata, root=' |
549 | 554 | final_package_metadata_path = os.path.join(root, package_metadata.name, PACKAGE_JSON) |
550 | 555 | try: |
551 | 556 | with open(final_package_metadata_path, mode='w', encoding='utf-8') as f: |
552 | | - dump(del_none(package_metadata.__dict__.copy()), f) |
| 557 | + dump(obj=package_metadata, cls=NPMPackageMetadataEncoder, fp=f) |
553 | 558 | return final_package_metadata_path |
554 | 559 | except FileNotFoundError: |
555 | 560 | logger.error( |
|
0 commit comments