diff --git a/osv/ecosystems/_ecosystems.py b/osv/ecosystems/_ecosystems.py index 1ccc811218f..1275090349c 100644 --- a/osv/ecosystems/_ecosystems.py +++ b/osv/ecosystems/_ecosystems.py @@ -47,6 +47,7 @@ 'Go': SemverEcosystem, 'Hackage': Hackage, 'Hex': SemverEcosystem, + 'Julia': SemverEcosystem, 'Mageia': RPM, 'Maven': Maven, 'MinimOS': APK, diff --git a/osv/purl_helpers.py b/osv/purl_helpers.py index ab24e5aebe1..58505f5d4a9 100644 --- a/osv/purl_helpers.py +++ b/osv/purl_helpers.py @@ -57,6 +57,8 @@ EcosystemPURL('hackage', None), 'Hex': EcosystemPURL('hex', None), + 'Julia': + EcosystemPURL('julia', None), # Linux 'Mageia': EcosystemPURL('rpm', 'mageia'), diff --git a/osv/purl_helpers_test.py b/osv/purl_helpers_test.py index 5f7fe8543eb..ba46a537b15 100644 --- a/osv/purl_helpers_test.py +++ b/osv/purl_helpers_test.py @@ -98,6 +98,12 @@ def tests_package_to_purl(self): self.assertEqual('pkg:hex/acme/foo', purl_helpers.package_to_purl('Hex', 'acme/foo')) + self.assertEqual('pkg:julia/Example', + purl_helpers.package_to_purl('Julia', 'Example')) + + self.assertEqual('pkg:julia/Dates', + purl_helpers.package_to_purl('Julia', 'Dates')) + self.assertEqual('pkg:npm/test-package', purl_helpers.package_to_purl('npm', 'test-package')) @@ -204,6 +210,23 @@ def test_parse_purl(self): self.assertEqual(('Hex', 'acme/foo', '2.3.'), purl_helpers.parse_purl('pkg:hex/acme/foo@2.3.')) + self.assertEqual(('Julia', 'Example', None), + purl_helpers.parse_purl('pkg:julia/Example')) + + self.assertEqual( + ('Julia', 'Example', None), + purl_helpers.parse_purl( + 'pkg:julia/Example?uuid=7876af07-990d-54b4-ab0e-23690620f79a')) + + self.assertEqual(('Julia', 'Example', '0.5.5'), + purl_helpers.parse_purl('pkg:julia/Example@0.5.5')) + + self.assertEqual( + ('Julia', 'Example', '0.5.5'), + purl_helpers.parse_purl( + 'pkg:julia/Example@0.5.5?uuid=7876af07-990d-54b4-ab0e-23690620f79a') + ) + self.assertEqual(('Mageia', 'python-aiohttp', None), purl_helpers.parse_purl( 'pkg:rpm/mageia/python-aiohttp?distro=mageia-9'))