Skip to content

Commit 0800cd8

Browse files
Arsène Voltefwininger
authored andcommitted
Corriger et améliorer la recherches des versions des paquets NPM
1 parent d2de3db commit 0800cd8

2 files changed

Lines changed: 8 additions & 37 deletions

File tree

hashtheplanet/resources/npm_resource.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
import tarfile
77
import tempfile
88
from typing import Dict, List, Set, Tuple
9-
import requests
9+
import json
1010

1111
# third party imports
1212
from loguru import logger
13-
from bs4 import BeautifulSoup
13+
import requests
1414

1515
# project imports
1616
from hashtheplanet.sql.db_connector import Hash
@@ -34,22 +34,8 @@ def retrieve_versions(npm_module_name: str) -> Set[VersionName]:
3434
"""
3535
This method retrieves npm module versions.
3636
"""
37-
page = requests.get(f"https://www.npmjs.com/package/{npm_module_name}?activeTab=versions", timeout=10)
38-
soup = BeautifulSoup(page.content, "html.parser")
39-
versions = set()
40-
41-
table = soup.find('div', attrs={'id':'tabpanel-versions'})
42-
43-
table_body_version_elements = list(table.find_all())[0]
44-
45-
version_rows = table_body_version_elements.find_all("li")
46-
47-
for row in list(version_rows):
48-
version = row.find("a")
49-
if version is None:
50-
continue
51-
versions.add(version.get_text())
52-
return versions
37+
page = requests.get(f"https://registry.npmjs.org/{npm_module_name}", timeout=10)
38+
return set(json.loads(page.content)["versions"])
5339

5440
@staticmethod
5541
def save_tar_to_disk(file_path: str, npm_module_name: str, version: str):

tests/resources/test_npm_resource.py

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,27 +19,12 @@ def test_retrieve_versions():
1919
class MockedPage():
2020
def __init__(self) -> None:
2121
self.content = """
22-
<html>
23-
<head><title></title></head>
24-
<body>
25-
<div id="tabpanel-versions">
26-
<div>
27-
<div></div>
28-
<h3></h3>
29-
<ul><li></li></ul>
30-
<ul>
31-
<li></li>
32-
<li><a>1.0.1</a></li>
33-
<li><a>1.0.2</a></li>
34-
<li><a>1.0.3</a></li>
35-
</ul>
36-
</div>
37-
<div></div>
38-
</div>
39-
</body></html>
22+
{
23+
"versions": ["1.0.1", "1.0.2", "1.0.3"]
24+
}
4025
"""
4126
def mocked_get_request(url: str, *args, **kwargs):
42-
assert url == f"https://www.npmjs.com/package/{npm_module_name}?activeTab=versions"
27+
assert url == f"https://registry.npmjs.org/{npm_module_name}"
4328
return MockedPage()
4429

4530
with mock.patch("requests.get", MagicMock(side_effect=mocked_get_request)):

0 commit comments

Comments
 (0)