Это, вероятно, будет проще в узле, поскольку пакет semver
. Я нашел пакет semantic_version
python, но он не работает на всех диапазонах (т.е. 1.x
), но, похоже, охватывает большинство из них, включая caret и тильда диапазоны.
import requests
from semantic_version import Spec, Version
def get_npm_versions(package, range):
# Make get request to npm registry for given package
response = requests.get('https://registry.npmjs.org/%s'%(package))
# Check for good response
if response.status_code == 200:
# Parse response
data = response.json()
# Convert unicode to strings
versions = map(str, data['versions'].keys())
# Convert strings to `Version`s
versions = map(Version, versions)
# Create range `Spec`
range_spec = Spec(range)
return range_spec.filter(versions)
else:
raise Exception('NPM registry not reachable :(')
# Use function with to get `tape@~2.10.1`
versions = get_npm_versions('tape', '~2.10.1')
for v in versions:
print v