Skip to content

Commit a7927a7

Browse files
committed
Fix a npm metadata serialization issue
"dist_tags" -> "dist-tags"
1 parent 281cfd8 commit a7927a7

File tree

7 files changed

+24
-12
lines changed

7 files changed

+24
-12
lines changed

charon/pkgs/npm.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import logging
1717
import os
1818
import sys
19-
from json import load, loads, dump, JSONDecodeError
19+
from json import load, loads, dump, JSONDecodeError, JSONEncoder
2020
import tarfile
2121
from tempfile import mkdtemp
2222
from typing import List, Set, Tuple
@@ -32,7 +32,7 @@
3232
from charon.pkgs.pkg_utils import upload_post_process, rollback_post_process
3333
from charon.utils.strings import remove_prefix
3434
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
3636

3737
logger = logging.getLogger(__name__)
3838

@@ -61,10 +61,15 @@ def __init__(self, metadata, is_version):
6161
self.dist_tags = {'latest': metadata.get('version')}
6262
self.versions = {metadata.get('version'): metadata}
6363
else:
64-
self.dist_tags = metadata.get('dist_tags', None)
64+
self.dist_tags = metadata.get('dist-tags', None)
6565
self.versions = metadata.get('versions', None)
6666

6767

68+
class NPMPackageMetadataEncoder(JSONEncoder):
69+
def default(self, o):
70+
return replace_field(del_none(o.__dict__.copy()), "dist_tags", "dist-tags")
71+
72+
6873
def handle_npm_uploading(
6974
tarball_path: str,
7075
product: str,
@@ -549,7 +554,7 @@ def _write_package_metadata_to_file(package_metadata: NPMPackageMetadata, root='
549554
final_package_metadata_path = os.path.join(root, package_metadata.name, PACKAGE_JSON)
550555
try:
551556
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)
553558
return final_package_metadata_path
554559
except FileNotFoundError:
555560
logger.error(

charon/utils/map.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@ def del_none(d):
55
elif isinstance(value, dict):
66
del_none(value)
77
return d
8+
9+
10+
def replace_field(d, field, new_field):
11+
if d[field]:
12+
d[new_field] = d[field]
13+
del d[field]
14+
return d

tests/test_npm_del.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def __test_prefix(self, prefix: str = None):
8383
self.assertIn("\"versions\": {\"7.15.8\":", meta_content_client)
8484
self.assertNotIn("\"7.14.5\": {\"name\":", meta_content_client)
8585
self.assertIn("\"license\": \"MIT\"", meta_content_client)
86-
self.assertIn("\"dist_tags\": {\"latest\": \"7.15.8\"}", meta_content_client)
86+
self.assertIn("\"dist-tags\": {\"latest\": \"7.15.8\"}", meta_content_client)
8787

8888
test_tgz = os.path.join(INPUTS, "code-frame-7.15.8.tgz")
8989
handle_npm_del(

tests/test_npm_del_multi_tgts.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ def __test_prefix(self, prefix: str = None):
117117
"\"license\": \"MIT\"", meta_content_client, msg=f'{bucket_name}'
118118
)
119119
self.assertIn(
120-
"\"dist_tags\": {\"latest\": \"7.15.8\"}",
120+
"\"dist-tags\": {\"latest\": \"7.15.8\"}",
121121
meta_content_client, msg=f'{bucket_name}'
122122
)
123123

tests/test_npm_meta.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def test_handle_npm_uploading_for_old_version(self):
4848
bucket = self.mock_s3.Bucket(MY_BUCKET)
4949
original_version_0_5_8_package_json = """
5050
{"name": "@redhat/kogito-tooling-workspace",
51-
"dist_tags": {"latest": "0.5.8"}, "versions": {"0.5.8": {"name":
51+
"dist-tags": {"latest": "0.5.8"}, "versions": {"0.5.8": {"name":
5252
"@redhat/kogito-tooling-workspace", "version": "0.5.8", "title": "0.5.8title",
5353
"description": "0.5.8description", "keywords": ["0.5.8"], "maintainers": [
5454
"0.5.8maintainer"], "repository": {"type": "git", "url": "https://github.com/0.5.8.git"},
@@ -98,7 +98,7 @@ def test_handle_npm_uploading_for_old_version(self):
9898
def test_handle_npm_uploading_for_new_version(self):
9999
bucket = self.mock_s3.Bucket(MY_BUCKET)
100100
original_version_1_0_1_package_json = """
101-
{"name": "@redhat/kogito-tooling-workspace", "dist_tags": {"latest": "1.0.1"},
101+
{"name": "@redhat/kogito-tooling-workspace", "dist-tags": {"latest": "1.0.1"},
102102
"versions": {"1.0.1": {"name": "@redhat/kogito-tooling-workspace", "version": "1.0.1",
103103
"title": "1.0.1title", "description": "1.0.1description", "keywords": ["1.0.1"],
104104
"maintainers": ["1.0.1maintainer"], "repository": {"type": "git",

tests/test_npm_upload.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ def test_double_uploads(self):
8686
self.assertIn("\"7.15.8\": {\"name\":", meta_content_client)
8787
self.assertIn("\"7.14.5\": {\"name\":", meta_content_client)
8888
self.assertIn("\"license\": \"MIT\"", meta_content_client)
89-
self.assertIn("\"dist_tags\": {\"latest\": \"7.15.8\"}", meta_content_client)
89+
self.assertIn("\"dist-tags\": {\"latest\": \"7.15.8\"}", meta_content_client)
9090

9191
def __test_prefix(self, prefix: str = None):
9292
test_tgz = os.path.join(INPUTS, "code-frame-7.14.5.tgz")
@@ -131,4 +131,4 @@ def __test_prefix(self, prefix: str = None):
131131
self.assertIn("\"version\": \"7.14.5\"", meta_content_client)
132132
self.assertIn("\"versions\": {\"7.14.5\":", meta_content_client)
133133
self.assertIn("\"license\": \"MIT\"", meta_content_client)
134-
self.assertIn("\"dist_tags\": {\"latest\": \"7.14.5\"}", meta_content_client)
134+
self.assertIn("\"dist-tags\": {\"latest\": \"7.14.5\"}", meta_content_client)

tests/test_npm_upload_multi_tgts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def test_double_uploads(self):
121121
"\"license\": \"MIT\"", meta_content_client, msg=f'{bucket_name}'
122122
)
123123
self.assertIn(
124-
"\"dist_tags\": {\"latest\": \"7.15.8\"}", meta_content_client, msg=f'{bucket_name}'
124+
"\"dist-tags\": {\"latest\": \"7.15.8\"}", meta_content_client, msg=f'{bucket_name}'
125125
)
126126

127127
def __test_prefix(self, prefix: str = None):
@@ -192,6 +192,6 @@ def __test_prefix(self, prefix: str = None):
192192
msg=f'{bucket_name}'
193193
)
194194
self.assertIn(
195-
"\"dist_tags\": {\"latest\": \"7.14.5\"}",
195+
"\"dist-tags\": {\"latest\": \"7.14.5\"}",
196196
meta_content_client, msg=f'{bucket_name}'
197197
)

0 commit comments

Comments
 (0)