Skip to content

Commit a866432

Browse files
Create PackageManifest class for readme manifests
Creates PackageManifest class for readme manifests and overrides the methods for detection and PackageManifest creation. Signed-off-by: Ayan Sinha Mahapatra <ayansmahapatra@gmail.com>
1 parent 54e3d20 commit a866432

17 files changed

Lines changed: 570 additions & 535 deletions

File tree

src/packagedcode/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@
100100
build.AutotoolsPackage,
101101
conda.Condayml,
102102
win_pe.WindowsExecutable,
103-
readme.ReadmePackage,
103+
readme.ReadmeManifest,
104104
build.MetadataBzl,
105105
msi.MsiInstallerPackage,
106106
windows.MicrosoftUpdateManifestPackage,

src/packagedcode/readme.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -39,30 +39,34 @@
3939

4040

4141
@attr.s()
42-
class ReadmePackage(models.Package, models.PackageManifest):
43-
file_patterns = (
44-
'README.android',
45-
'README.chromium',
46-
'README.facebook',
47-
'README.google',
48-
'README.thirdparty',
49-
)
42+
class ReadmePackage(models.Package):
5043
default_type = 'readme'
5144

52-
@classmethod
53-
def recognize(cls, location):
54-
yield parse(location)
55-
5645
@classmethod
5746
def get_package_root(cls, manifest_resource, codebase):
5847
return manifest_resource.parent(codebase)
5948

6049
def compute_normalized_license(self):
6150
return models.compute_normalized_license(self.declared_license)
6251

52+
@attr.s()
53+
class ReadmeManifest(ReadmePackage, models.PackageManifest):
6354

64-
def is_readme_manifest(location):
65-
return (filetype.is_file(location)
55+
file_patterns = (
56+
'README.android',
57+
'README.chromium',
58+
'README.facebook',
59+
'README.google',
60+
'README.thirdparty',
61+
)
62+
manifest_type = 'readmemanifest'
63+
64+
@classmethod
65+
def is_manifest(cls, location):
66+
"""
67+
Return True if the file at ``location`` is likely a manifest of this type.
68+
"""
69+
return (filetype.is_file(location)
6670
and fileutils.file_name(location).lower() in [
6771
'readme.android',
6872
'readme.chromium',
@@ -71,35 +75,33 @@ def is_readme_manifest(location):
7175
'readme.thirdparty'
7276
])
7377

78+
@classmethod
79+
def recognize(cls, location):
80+
"""
81+
Yield one or more Package manifest objects given a file ``location`` pointing to a
82+
package archive, manifest or similar.
83+
"""
84+
with open(location, encoding='utf-8') as loc:
85+
readme_manifest = loc.read()
7486

75-
def parse(location):
76-
"""
77-
Return a Package object from a README manifest file or None.
78-
"""
79-
if not is_readme_manifest(location):
80-
return
81-
82-
with open(location, encoding='utf-8') as loc:
83-
readme_manifest = loc.read()
84-
85-
package = build_package(readme_manifest)
87+
package = build_package(cls, readme_manifest)
8688

87-
if not package.name:
88-
# If no name was detected for the Package, then we use the basename of
89-
# the parent directory as the Package name
90-
parent_dir = fileutils.parent_directory(location)
91-
parent_dir_basename = fileutils.file_base_name(parent_dir)
92-
package.name = parent_dir_basename
89+
if not package.name:
90+
# If no name was detected for the Package, then we use the basename of
91+
# the parent directory as the Package name
92+
parent_dir = fileutils.parent_directory(location)
93+
parent_dir_basename = fileutils.file_base_name(parent_dir)
94+
package.name = parent_dir_basename
9395

94-
return package
96+
yield package
9597

9698

97-
def build_package(readme_manifest):
99+
def build_package(cls, readme_manifest):
98100
"""
99101
Return a Package object from a readme_manifest mapping (from a
100102
README.chromium file or similar) or None.
101103
"""
102-
package = ReadmePackage()
104+
package = cls()
103105

104106
for line in readme_manifest.splitlines():
105107
key, sep, value = line.partition(':')

tests/packagedcode/data/plugin/help.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ Package: pypi
346346

347347
--------------------------------------------
348348
Package: readme
349-
class: packagedcode.readme:ReadmePackage
349+
class: packagedcode.readme:ReadmeManifest
350350
file_patterns: README.android, README.chromium, README.facebook, README.google, README.thirdparty
351351

352352
--------------------------------------------
Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1-
{
2-
"type": "readme",
3-
"namespace": null,
4-
"name": "libaom",
5-
"version": "v1.0.0",
6-
"qualifiers": {},
7-
"subpath": null,
8-
"primary_language": null,
9-
"description": null,
10-
"release_date": null,
11-
"parties": [],
12-
"keywords": [],
13-
"homepage_url": "https://aomedia.org",
14-
"download_url": null,
15-
"size": null,
16-
"sha1": null,
17-
"md5": null,
18-
"sha256": null,
19-
"sha512": null,
20-
"bug_tracking_url": null,
21-
"code_view_url": null,
22-
"vcs_url": null,
23-
"copyright": null,
24-
"license_expression": "unknown",
25-
"declared_license": "BSD",
26-
"notice_text": null,
27-
"root_path": null,
28-
"dependencies": [],
29-
"contains_source_code": null,
30-
"source_packages": [],
31-
"extra_data": {},
32-
"purl": "pkg:readme/libaom@v1.0.0",
33-
"repository_homepage_url": null,
34-
"repository_download_url": null,
35-
"api_data_url": null
36-
}
1+
[
2+
{
3+
"type": "readme",
4+
"namespace": null,
5+
"name": "libaom",
6+
"version": "v1.0.0",
7+
"qualifiers": {},
8+
"subpath": null,
9+
"primary_language": null,
10+
"description": null,
11+
"release_date": null,
12+
"parties": [],
13+
"keywords": [],
14+
"homepage_url": "https://aomedia.org",
15+
"download_url": null,
16+
"size": null,
17+
"sha1": null,
18+
"md5": null,
19+
"sha256": null,
20+
"sha512": null,
21+
"bug_tracking_url": null,
22+
"code_view_url": null,
23+
"vcs_url": null,
24+
"copyright": null,
25+
"license_expression": "unknown",
26+
"declared_license": "BSD",
27+
"notice_text": null,
28+
"root_path": null,
29+
"dependencies": [],
30+
"contains_source_code": null,
31+
"source_packages": [],
32+
"extra_data": {},
33+
"purl": "pkg:readme/libaom@v1.0.0",
34+
"repository_homepage_url": null,
35+
"repository_download_url": null,
36+
"api_data_url": null
37+
}
38+
]
Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1-
{
2-
"type": "readme",
3-
"namespace": null,
4-
"name": "tsproxy",
5-
"version": "a2f578febcd79b751d948f615bbde8f6189fbeed (commit hash)",
6-
"qualifiers": {},
7-
"subpath": null,
8-
"primary_language": null,
9-
"description": null,
10-
"release_date": null,
11-
"parties": [],
12-
"keywords": [],
13-
"homepage_url": "https://github.com/WPO-Foundation/tsproxy",
14-
"download_url": null,
15-
"size": null,
16-
"sha1": null,
17-
"md5": null,
18-
"sha256": null,
19-
"sha512": null,
20-
"bug_tracking_url": null,
21-
"code_view_url": null,
22-
"vcs_url": null,
23-
"copyright": null,
24-
"license_expression": "unknown",
25-
"declared_license": "Apache",
26-
"notice_text": null,
27-
"root_path": null,
28-
"dependencies": [],
29-
"contains_source_code": null,
30-
"source_packages": [],
31-
"extra_data": {},
32-
"purl": "pkg:readme/tsproxy@a2f578febcd79b751d948f615bbde8f6189fbeed%20%28commit%20hash%29",
33-
"repository_homepage_url": null,
34-
"repository_download_url": null,
35-
"api_data_url": null
36-
}
1+
[
2+
{
3+
"type": "readme",
4+
"namespace": null,
5+
"name": "tsproxy",
6+
"version": "a2f578febcd79b751d948f615bbde8f6189fbeed (commit hash)",
7+
"qualifiers": {},
8+
"subpath": null,
9+
"primary_language": null,
10+
"description": null,
11+
"release_date": null,
12+
"parties": [],
13+
"keywords": [],
14+
"homepage_url": "https://github.com/WPO-Foundation/tsproxy",
15+
"download_url": null,
16+
"size": null,
17+
"sha1": null,
18+
"md5": null,
19+
"sha256": null,
20+
"sha512": null,
21+
"bug_tracking_url": null,
22+
"code_view_url": null,
23+
"vcs_url": null,
24+
"copyright": null,
25+
"license_expression": "unknown",
26+
"declared_license": "Apache",
27+
"notice_text": null,
28+
"root_path": null,
29+
"dependencies": [],
30+
"contains_source_code": null,
31+
"source_packages": [],
32+
"extra_data": {},
33+
"purl": "pkg:readme/tsproxy@a2f578febcd79b751d948f615bbde8f6189fbeed%20%28commit%20hash%29",
34+
"repository_homepage_url": null,
35+
"repository_download_url": null,
36+
"api_data_url": null
37+
}
38+
]
Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1-
{
2-
"type": "readme",
3-
"namespace": null,
4-
"name": "setuptools",
5-
"version": "18.5",
6-
"qualifiers": {},
7-
"subpath": null,
8-
"primary_language": null,
9-
"description": null,
10-
"release_date": null,
11-
"parties": [],
12-
"keywords": [],
13-
"homepage_url": "https://pypi.python.org/packages/source/s/setuptools/setuptools-18.5.tar.gz#md5=533c868f01169a3085177dffe5e768bb",
14-
"download_url": null,
15-
"size": null,
16-
"sha1": null,
17-
"md5": null,
18-
"sha256": null,
19-
"sha512": null,
20-
"bug_tracking_url": null,
21-
"code_view_url": null,
22-
"vcs_url": null,
23-
"copyright": null,
24-
"license_expression": "unknown",
25-
"declared_license": "PSF or ZPL",
26-
"notice_text": null,
27-
"root_path": null,
28-
"dependencies": [],
29-
"contains_source_code": null,
30-
"source_packages": [],
31-
"extra_data": {},
32-
"purl": "pkg:readme/setuptools@18.5",
33-
"repository_homepage_url": null,
34-
"repository_download_url": null,
35-
"api_data_url": null
36-
}
1+
[
2+
{
3+
"type": "readme",
4+
"namespace": null,
5+
"name": "setuptools",
6+
"version": "18.5",
7+
"qualifiers": {},
8+
"subpath": null,
9+
"primary_language": null,
10+
"description": null,
11+
"release_date": null,
12+
"parties": [],
13+
"keywords": [],
14+
"homepage_url": "https://pypi.python.org/packages/source/s/setuptools/setuptools-18.5.tar.gz#md5=533c868f01169a3085177dffe5e768bb",
15+
"download_url": null,
16+
"size": null,
17+
"sha1": null,
18+
"md5": null,
19+
"sha256": null,
20+
"sha512": null,
21+
"bug_tracking_url": null,
22+
"code_view_url": null,
23+
"vcs_url": null,
24+
"copyright": null,
25+
"license_expression": "unknown",
26+
"declared_license": "PSF or ZPL",
27+
"notice_text": null,
28+
"root_path": null,
29+
"dependencies": [],
30+
"contains_source_code": null,
31+
"source_packages": [],
32+
"extra_data": {},
33+
"purl": "pkg:readme/setuptools@18.5",
34+
"repository_homepage_url": null,
35+
"repository_download_url": null,
36+
"api_data_url": null
37+
}
38+
]

0 commit comments

Comments
 (0)