Skip to content

Commit 8ea739a

Browse files
committed
Normalize parse function names
Signed-off-by: Jono Yang <jyang@nexb.com>
1 parent 85db3d4 commit 8ea739a

File tree

5 files changed

+84
-101
lines changed

5 files changed

+84
-101
lines changed

src/packagedcode/freebsd.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,13 @@ class CompactManifestHandler(models.DatafileHandler):
4242
documentation_url = 'https://www.freebsd.org/cgi/man.cgi?pkg-create(8)#MANIFEST_FILE_DETAILS'
4343

4444
@classmethod
45-
def _parse_freebsd_manifest_data(cls, location):
46-
with io.open(location, encoding='utf-8') as loc:
47-
freebsd_manifest = saneyaml.load(loc)
48-
45+
def _parse(cls, yaml_data):
4946
package_data = models.PackageData(
5047
datasource_id=cls.datasource_id,
5148
type=cls.default_package_type,
5249
qualifiers=dict(
53-
arch=freebsd_manifest.get('arch'),
54-
origin=freebsd_manifest.get('origin'),
50+
arch=yaml_data.get('arch'),
51+
origin=yaml_data.get('origin'),
5552
)
5653
)
5754

@@ -65,7 +62,7 @@ def _parse_freebsd_manifest_data(cls, location):
6562
]
6663

6764
for source, target in plain_fields:
68-
value = freebsd_manifest.get(source)
65+
value = yaml_data.get(source)
6966
if value:
7067
if isinstance(value, str):
7168
value = value.strip()
@@ -83,12 +80,12 @@ def _parse_freebsd_manifest_data(cls, location):
8380

8481
for source, func in field_mappers:
8582
logger.debug('parse: %(source)r, %(func)r' % locals())
86-
value = freebsd_manifest.get(source) or None
83+
value = yaml_data.get(source) or None
8784
if value:
8885
func(value, package_data)
8986

9087
# license_mapper needs multiple fields
91-
license_mapper(freebsd_manifest, package_data)
88+
license_mapper(yaml_data, package_data)
9289

9390
if package_data.declared_license:
9491
package_data.license_expression = cls.compute_normalized_license(package_data)
@@ -101,11 +98,10 @@ def parse(cls, location):
10198
Yield one or more Package manifest objects given a file ``location`` pointing to a
10299
package archive, manifest or similar.
103100
"""
104-
yield cls._parse_freebsd_manifest_data(
105-
location=location,
106-
datasource_id=cls.datasource_id,
107-
default_package_type=cls.default_package_type,
108-
)
101+
with io.open(location, encoding='utf-8') as loc:
102+
yaml_data = saneyaml.load(loc)
103+
104+
yield cls._parse(yaml_data)
109105

110106
@classmethod
111107
def compute_normalized_license(cls, package):

src/packagedcode/haxe.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class HaxelibJsonHandler(models.DatafileHandler):
4545
documentation_url = 'https://lib.haxe.org/documentation/creating-a-haxelib-package/'
4646

4747
@classmethod
48-
def _parse_haxelib_json_data(cls, json_data):
48+
def _parse(cls, json_data):
4949
name = json_data.get('name')
5050
version = json_data.get('version')
5151

@@ -114,4 +114,4 @@ def parse(cls, location):
114114
with io.open(location, encoding='utf-8') as loc:
115115
json_data = json.load(loc)
116116

117-
yield cls._parse_haxelib_json_data(json_data)
117+
yield cls._parse(json_data)

src/packagedcode/maven.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,28 +1095,26 @@ def get_urls(namespace, name, version, qualifiers, base_url='https://repo1.maven
10951095

10961096

10971097
def parse(
1098+
location,
10981099
datasource_id,
10991100
package_type,
11001101
primary_language,
1101-
location=None,
1102-
text=None,
11031102
base_url='https://repo1.maven.org/maven2',
11041103
):
11051104
"""
11061105
Yield Packagedata objects from parsing a Maven pom file at `location` or
11071106
using the provided `text` (one or the other but not both).
11081107
"""
1109-
yield parse_pom(
1108+
yield _parse(
11101109
datasource_id=datasource_id,
11111110
package_type=package_type,
11121111
primary_language=primary_language,
11131112
location=location,
1114-
text=text,
11151113
base_url=base_url
11161114
)
11171115

11181116

1119-
def parse_pom(
1117+
def _parse(
11201118
datasource_id,
11211119
package_type,
11221120
primary_language,

src/packagedcode/models.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,6 @@ class Dependency(DependentPackage):
413413

414414
def __attrs_post_init__(self, *args, **kwargs):
415415
if not self.dependency_uid:
416-
print(self.purl)
417416
self.dependency_uid = build_package_uid(self.purl)
418417

419418
@classmethod

src/packagedcode/npm.py

Lines changed: 69 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -163,95 +163,85 @@ class NpmPackageJsonHandler(BaseNpmHandler):
163163
documentation_url = 'https://docs.npmjs.com/cli/v8/configuring-npm/package-json'
164164

165165
@classmethod
166-
def parse(cls, location):
167-
with io.open(location, encoding='utf-8') as loc:
168-
package_data = json.load(loc)
166+
def _parse(cls, json_data):
167+
name = json_data.get('name')
168+
version = json_data.get('version')
169+
homepage_url = json_data.get('homepage', '')
170+
171+
# a package.json without name and version can be a private package
172+
173+
if homepage_url and isinstance(homepage_url, list):
174+
# TODO: should we keep other URLs
175+
homepage_url = homepage_url[0]
176+
homepage_url = homepage_url.strip() or None
177+
178+
namespace, name = split_scoped_package_name(name)
169179

170-
yield parse_npm_package_json(
171-
package_data,
180+
urls = get_urls(namespace, name, version)
181+
package = models.PackageData(
172182
datasource_id=cls.datasource_id,
173-
default_package_type=cls.default_package_type,
174-
default_primary_language=cls.default_primary_language
183+
type=cls.default_package_type,
184+
primary_language=cls.default_primary_language,
185+
namespace=namespace or None,
186+
name=name,
187+
version=version or None,
188+
description=json_data.get('description', '').strip() or None,
189+
homepage_url=homepage_url,
190+
**urls,
175191
)
192+
vcs_revision = json_data.get('gitHead') or None
193+
194+
# mapping of top level package.json items to a function accepting as
195+
# arguments the package.json element value and returning an iterable of (key,
196+
# values) to update on a package
197+
field_mappers = [
198+
('author', partial(party_mapper, party_type='author')),
199+
('contributors', partial(party_mapper, party_type='contributor')),
200+
('maintainers', partial(party_mapper, party_type='maintainer')),
201+
202+
('dependencies', partial(deps_mapper, field_name='dependencies')),
203+
('devDependencies', partial(deps_mapper, field_name='devDependencies')),
204+
('peerDependencies', partial(deps_mapper, field_name='peerDependencies')),
205+
('optionalDependencies', partial(deps_mapper, field_name='optionalDependencies')),
206+
('bundledDependencies', bundle_deps_mapper),
207+
('repository', partial(vcs_repository_mapper, vcs_revision=vcs_revision)),
208+
('keywords', keywords_mapper,),
209+
('bugs', bugs_mapper),
210+
('dist', dist_mapper),
211+
]
212+
213+
for source, func in field_mappers:
214+
value = json_data.get(source) or None
215+
if value:
216+
if isinstance(value, str):
217+
value = value.strip()
218+
if value:
219+
func(value, package)
176220

177-
@classmethod
178-
def compute_normalized_license(cls, package):
179-
return compute_normalized_license(package.declared_license)
221+
if not package.download_url:
222+
# Only add a synthetic download URL if there is none from the dist mapping.
223+
package.download_url = npm_download_url(package.namespace, package.name, package.version)
180224

225+
# licenses are a tad special with many different data structures
226+
lic = json_data.get('license')
227+
lics = json_data.get('licenses')
228+
package = licenses_mapper(lic, lics, package)
181229

182-
def parse_npm_package_json(
183-
package_data,
184-
datasource_id='npm_package_json',
185-
default_package_type='npm',
186-
default_primary_language='Javascript'
187-
):
188-
name = package_data.get('name')
189-
version = package_data.get('version')
190-
homepage_url = package_data.get('homepage', '')
191-
192-
# a package.json without name and version can be a private package
193-
194-
if homepage_url and isinstance(homepage_url, list):
195-
# TODO: should we keep other URLs
196-
homepage_url = homepage_url[0]
197-
homepage_url = homepage_url.strip() or None
198-
199-
namespace, name = split_scoped_package_name(name)
200-
201-
urls = get_urls(namespace, name, version)
202-
package = models.PackageData(
203-
datasource_id=datasource_id,
204-
type=default_package_type,
205-
primary_language=default_primary_language,
206-
namespace=namespace or None,
207-
name=name,
208-
version=version or None,
209-
description=package_data.get('description', '').strip() or None,
210-
homepage_url=homepage_url,
211-
**urls,
212-
)
213-
vcs_revision = package_data.get('gitHead') or None
214-
215-
# mapping of top level package.json items to a function accepting as
216-
# arguments the package.json element value and returning an iterable of (key,
217-
# values) to update on a package
218-
field_mappers = [
219-
('author', partial(party_mapper, party_type='author')),
220-
('contributors', partial(party_mapper, party_type='contributor')),
221-
('maintainers', partial(party_mapper, party_type='maintainer')),
222-
223-
('dependencies', partial(deps_mapper, field_name='dependencies')),
224-
('devDependencies', partial(deps_mapper, field_name='devDependencies')),
225-
('peerDependencies', partial(deps_mapper, field_name='peerDependencies')),
226-
('optionalDependencies', partial(deps_mapper, field_name='optionalDependencies')),
227-
('bundledDependencies', bundle_deps_mapper),
228-
('repository', partial(vcs_repository_mapper, vcs_revision=vcs_revision)),
229-
('keywords', keywords_mapper,),
230-
('bugs', bugs_mapper),
231-
('dist', dist_mapper),
232-
]
233-
234-
for source, func in field_mappers:
235-
value = package_data.get(source) or None
236-
if value:
237-
if isinstance(value, str):
238-
value = value.strip()
239-
if value:
240-
func(value, package)
230+
if not package.license_expression and package.declared_license:
231+
package.license_expression = compute_normalized_license(package.declared_license)
241232

242-
if not package.download_url:
243-
# Only add a synthetic download URL if there is none from the dist mapping.
244-
package.download_url = npm_download_url(package.namespace, package.name, package.version)
233+
return package
245234

246-
# licenses are a tad special with many different data structures
247-
lic = package_data.get('license')
248-
lics = package_data.get('licenses')
249-
package = licenses_mapper(lic, lics, package)
235+
@classmethod
236+
def parse(cls, location):
237+
with io.open(location, encoding='utf-8') as loc:
238+
json_data = json.load(loc)
250239

251-
if not package.license_expression and package.declared_license:
252-
package.license_expression = compute_normalized_license(package.declared_license)
240+
yield cls._parse(json_data)
253241

254-
return package
242+
@classmethod
243+
def compute_normalized_license(cls, package):
244+
return compute_normalized_license(package.declared_license)
255245

256246

257247
class BaseNpmLockHandler(BaseNpmHandler):

0 commit comments

Comments
 (0)