Skip to content

Commit 46f4b69

Browse files
Restore summarycode and API changes
Restores previously made changes in summarycode, and deprecates package API with a warning, and adds other small bugfixes. Signed-off-by: Ayan Sinha <ayansmahapatra@gmail.com>
1 parent 42ddba4 commit 46f4b69

29 files changed

Lines changed: 457 additions & 7107 deletions

src/packagedcode/plugin_package.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ def get_scanner(self, **kwargs):
8080
"""
8181
Return a scanner callable to scan a Resource for packages.
8282
"""
83-
from scancode.api import get_package_manifest_info
84-
return get_package_manifest_info
83+
from scancode.api import get_package_manifests
84+
return get_package_manifests
8585

8686
def process_codebase(self, codebase, **kwargs):
8787
"""
@@ -94,12 +94,12 @@ def process_codebase(self, codebase, **kwargs):
9494
for resource in codebase.walk(topdown=False):
9595
set_packages_root(resource, codebase)
9696

97-
summarize_codebase_package_manifests(codebase, **kwargs)
97+
create_packages_from_manifests(codebase, **kwargs)
9898

9999

100-
def summarize_codebase_package_manifests(codebase, **kwargs):
100+
def create_packages_from_manifests(codebase, **kwargs):
101101
"""
102-
Summarize codebase by package manifests.
102+
Create package instances from package manifests present in the codebase.
103103
"""
104104
package_manifests = []
105105

src/scancode/api.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,43 @@ def _licenses_data_from_match(
287287
SCANCODE_DEBUG_PACKAGE_API = os.environ.get('SCANCODE_DEBUG_PACKAGE_API', False)
288288

289289

290-
def get_package_manifest_info(location, **kwargs):
290+
def get_package_info(location, **kwargs):
291+
"""
292+
Return a mapping of package information detected in the
293+
file at `location`.
294+
295+
Note that all exceptions are caught if there are any errors while parsing a
296+
package.
297+
"""
298+
import warnings
299+
warnings.warn(
300+
"`get_package_info` is deprecated. Use `get_package_manifests` instead.",
301+
DeprecationWarning,
302+
stacklevel=1
303+
)
304+
305+
from packagedcode.recognize import recognize_package_manifests
306+
try:
307+
recognized_package_manifests = recognize_package_manifests(location)
308+
if recognized_package_manifests:
309+
return dict(package_manifests=[
310+
package_manifest.to_dict()
311+
for package_manifest in recognized_package_manifests
312+
])
313+
except Exception as e:
314+
if TRACE:
315+
logger.error('get_package_info: {}: Exception: {}'.format(location, e))
316+
317+
if SCANCODE_DEBUG_PACKAGE_API:
318+
raise
319+
else:
320+
# attention: we are swallowing ALL exceptions here!
321+
pass
322+
323+
return dict(package_manifests=[])
324+
325+
326+
def get_package_manifests(location, **kwargs):
291327
"""
292328
Return a mapping of package manifest information detected in the
293329
file at `location`.
@@ -305,7 +341,7 @@ def get_package_manifest_info(location, **kwargs):
305341
])
306342
except Exception as e:
307343
if TRACE:
308-
logger.error('get_package_info: {}: Exception: {}'.format(location, e))
344+
logger.error('get_package_manifests: {}: Exception: {}'.format(location, e))
309345

310346
if SCANCODE_DEBUG_PACKAGE_API:
311347
raise

src/summarycode/plugin_consolidate.py

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -98,21 +98,21 @@ def to_dict(self, **kwargs):
9898

9999

100100
@attr.s
101-
class ConsolidatedPackageManifest(object):
102-
package_manifest = attr.ib()
101+
class ConsolidatedPackage(object):
102+
package = attr.ib()
103103
consolidation = attr.ib()
104104

105105
def to_dict(self, **kwargs):
106-
package_manifest = self.package_manifest.to_dict()
107-
package_manifest.update(self.consolidation.to_dict())
108-
return package_manifest
106+
package = self.package.to_dict()
107+
package.update(self.consolidation.to_dict())
108+
return package
109109

110110

111111
@post_scan_impl
112112
class Consolidator(PostScanPlugin):
113113
"""
114114
A ScanCode post-scan plugin to return consolidated components and consolidated
115-
package_manifests for different types of codebase summarization.
115+
packages for different types of codebase summarization.
116116
117117
A consolidated component is a group of Resources that have the same origin.
118118
Currently, a ConsolidatedComponent is created for each detected copyright holder
@@ -127,7 +127,7 @@ class Consolidator(PostScanPlugin):
127127
"""
128128
codebase_attributes = dict(
129129
consolidated_components=attr.ib(default=attr.Factory(list)),
130-
consolidated_package_manifests=attr.ib(default=attr.Factory(list))
130+
consolidated_packages=attr.ib(default=attr.Factory(list))
131131
)
132132

133133
resource_attributes = dict(
@@ -140,10 +140,9 @@ class Consolidator(PostScanPlugin):
140140
PluggableCommandLineOption(('--consolidate',),
141141
is_flag=True, default=False,
142142
help='Group resources by Packages or license and copyright holder and '
143-
'return those groupings as a list of consolidated package_manifests and '
143+
'return those groupings as a list of consolidated packages and '
144144
'a list of consolidated components. '
145-
'This requires the scan to have/be run with the copyright, license, and '
146-
'package options active',
145+
'This requires the scan to have/be run with the copyright, license, and package options active',
147146
help_group=POST_SCAN_GROUP
148147
)
149148
]
@@ -152,12 +151,12 @@ def is_enabled(self, consolidate, **kwargs):
152151
return consolidate
153152

154153
def process_codebase(self, codebase, **kwargs):
155-
# Collect ConsolidatedPackageManifests and ConsolidatedComponents
154+
# Collect ConsolidatedPackages and ConsolidatedComponents
156155
# TODO: Have a "catch-all" Component for the things that we haven't grouped
157156
consolidations = []
158157
root = codebase.root
159-
if hasattr(root, 'package_manifests') and hasattr(root, 'copyrights') and hasattr(root, 'licenses'):
160-
consolidations.extend(get_consolidated_package_manifests(codebase))
158+
if hasattr(root, 'packages') and hasattr(root, 'copyrights') and hasattr(root, 'licenses'):
159+
consolidations.extend(get_consolidated_packages(codebase))
161160
if hasattr(root, 'copyrights') and hasattr(root, 'licenses'):
162161
consolidations.extend(get_holders_consolidated_components(codebase))
163162

@@ -167,24 +166,24 @@ def process_codebase(self, codebase, **kwargs):
167166
# Sort consolidations by holders for consistent ordering before enumeration
168167
consolidations = sorted(consolidations, key=lambda c: '_'.join(h.key for h in c.consolidation.core_holders))
169168

170-
# Add ConsolidatedPackageManifests and ConsolidatedComponents to top-level codebase attributes
171-
codebase.attributes.consolidated_package_manifests = consolidated_package_manifests = []
169+
# Add ConsolidatedPackages and ConsolidatedComponents to top-level codebase attributes
170+
codebase.attributes.consolidated_packages = consolidated_packages = []
172171
codebase.attributes.consolidated_components = consolidated_components = []
173172
identifier_counts = Counter()
174173
for index, c in enumerate(consolidations, start=1):
175174
# Skip consolidation if it does not have any Files
176175
if c.consolidation.files_count == 0:
177176
continue
178-
if isinstance(c, ConsolidatedPackageManifest):
177+
if isinstance(c, ConsolidatedPackage):
179178
# We use the purl as the identifier for ConsolidatedPackages
180-
purl = c.package_manifest.purl
179+
purl = c.package.purl
181180
identifier_counts[purl] += 1
182181
identifier = python_safe_name('{}_{}'.format(purl, identifier_counts[purl]))
183182
c.consolidation.identifier = identifier
184183
for resource in c.consolidation.resources:
185184
resource.consolidated_to.append(identifier)
186185
resource.save(codebase)
187-
consolidated_package_manifests.append(c.to_dict())
186+
consolidated_packages.append(c.to_dict())
188187
elif isinstance(c, ConsolidatedComponent):
189188
consolidation_identifier = c.consolidation.identifier
190189
if consolidation_identifier:
@@ -219,20 +218,20 @@ def process_codebase(self, codebase, **kwargs):
219218
resource.save(codebase)
220219

221220

222-
def get_consolidated_package_manifests(codebase):
221+
def get_consolidated_packages(codebase):
223222
"""
224-
Yield a ConsolidatedPackageManifest for each detected package_manifest in the codebase
223+
Yield a ConsolidatedPackage for each detected package in the codebase
225224
"""
226225
for resource in codebase.walk(topdown=False):
227-
for package_manifest_data in resource.package_manifests:
228-
package_manifest = get_package_instance(package_manifest_data)
229-
package_root = package_manifest.get_package_root(resource, codebase)
226+
for package_data in resource.packages:
227+
package = get_package_instance(package_data)
228+
package_root = package.get_package_root(resource, codebase)
230229
package_root.extra_data['package_root'] = True
231230
package_root.save(codebase)
232-
is_build_file = isinstance(package_manifest, BaseBuildManifestPackage)
233-
package_resources = list(package_manifest.get_package_resources(package_root, codebase))
234-
package_license_expression = package_manifest.license_expression
235-
package_copyright = package_manifest.copyright
231+
is_build_file = isinstance(package, BaseBuildManifestPackage)
232+
package_resources = list(package.get_package_resources(package_root, codebase))
233+
package_license_expression = package.license_expression
234+
package_copyright = package.copyright
236235

237236
package_holders = []
238237
if package_copyright:
@@ -274,14 +273,14 @@ def get_consolidated_package_manifests(codebase):
274273
resources=package_resources,
275274
)
276275
if is_build_file:
277-
c.identifier = package_manifest.name
276+
c.identifier = package.name
278277
yield ConsolidatedComponent(
279278
type='build',
280279
consolidation=c
281280
)
282281
else:
283-
yield ConsolidatedPackageManifest(
284-
package_manifest=package_manifest,
282+
yield ConsolidatedPackage(
283+
package=package,
285284
consolidation=c
286285
)
287286

src/summarycode/score.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -166,31 +166,31 @@ def compute_license_score(codebase):
166166

167167
def get_declared_license_keys(codebase):
168168
"""
169-
Return a list of declared license keys found in package_manifests and key files.
169+
Return a list of declared license keys found in packages and key files.
170170
"""
171171
return (
172172
get_declared_license_keys_in_key_files(codebase) +
173-
get_declared_license_keys_in_package_manifests(codebase)
173+
get_declared_license_keys_in_packages(codebase)
174174
)
175175

176176

177-
def get_declared_license_keys_in_package_manifests(codebase):
177+
def get_declared_license_keys_in_packages(codebase):
178178
"""
179-
Return a list of declared license keys found in package_manifests.
179+
Return a list of declared license keys found in packages.
180180
181181
A package manifest (such as Maven POM file or an npm package.json file)
182182
contains structured declared license information. This is further normalized
183183
as a license_expression. We extract the list of licenses from the normalized
184184
license expressions.
185185
"""
186-
package_manifests = chain.from_iterable(
187-
getattr(res, 'package_manifests', []) or []
186+
packages = chain.from_iterable(
187+
getattr(res, 'packages', []) or []
188188
for res in codebase.walk(topdown=True))
189189

190190
licensing = Licensing()
191191
detected_good_licenses = []
192-
for package_manifest in package_manifests:
193-
expression = package_manifest.get('license_expression')
192+
for package in packages:
193+
expression = package.get('license_expression')
194194
if expression:
195195
exp = licensing.parse(
196196
expression, validate=False, strict=False, simple=True)

src/summarycode/summarizer.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ def summarize_codebase(codebase, keep_details, **kwargs):
112112
('holders', holder_summarizer),
113113
('authors', author_summarizer),
114114
('programming_language', language_summarizer),
115-
('package_manifests', package_summarizer),
115+
('packages', package_summarizer),
116116
]
117117

118118
# find which attributes are available for summarization by checking the root
@@ -232,7 +232,7 @@ def summarize_languages(languages):
232232
'holders',
233233
'authors',
234234
'programming_language',
235-
# 'package_manifests',
235+
# 'packages',
236236
])
237237

238238

@@ -293,7 +293,7 @@ def summarize_codebase_key_files(codebase, **kwargs):
293293
summarizables = codebase.attributes.summary.keys()
294294
if TRACE: logger_debug('summarizables:', summarizables)
295295

296-
# TODO: we cannot summarize package_manifests with "key files" for now
296+
# TODO: we cannot summarize packages with "key files" for now
297297
summarizables = [k for k in summarizables if k in SUMMARIZABLE_ATTRS]
298298

299299
# create one counter for each summarized attribute
@@ -408,53 +408,53 @@ def summarize_codebase_by_facet(codebase, **kwargs):
408408
if TRACE: logger_debug('codebase summary_by_facet:', final_summaries)
409409

410410

411-
def add_files(package_manifests, resource):
411+
def add_files(packages, resource):
412412
"""
413-
Update in-place every package mapping in the `package_manifests` list
414-
by updating or creatig the the "files" attribute from the `resource`.
415-
Yield back the package_manifests.
413+
Update in-place every package mapping in the `packages` list by updating or
414+
creating the the "files" attribute from the `resource`. Yield back the
415+
packages.
416416
"""
417-
for package_manifest in package_manifests:
418-
files = package_manifest['files'] = package_manifest.get('files') or []
417+
for package in packages:
418+
files = package['files'] = package.get('files') or []
419419
fil = resource.to_dict(skinny=True)
420420
if fil not in files:
421421
files.append(fil)
422-
yield package_manifest
422+
yield package
423423

424424

425425
def package_summarizer(resource, children, keep_details=False):
426426
"""
427-
Populate a package_manifests summary list of package_manifests mappings.
427+
Populate a packages summary list of packages mappings.
428428
429429
Note: `keep_details` is never used, as we are not keeping details of
430-
package_manifests as this has no value.
430+
packages as this has no value.
431431
"""
432-
package_manifests = []
432+
packages = []
433433

434434
# Collect current data
435-
current_package_manifests = getattr(resource, 'package_manifests') or []
435+
current_packages = getattr(resource, 'packages') or []
436436

437-
if TRACE_LIGHT and current_package_manifests:
437+
if TRACE_LIGHT and current_packages:
438438
from packagedcode.models import Package
439-
packs = [Package.create(**p) for p in current_package_manifests]
439+
packs = [Package.create(**p) for p in current_packages]
440440
logger_debug('package_summarizer: for:', resource,
441-
'current_package_manifests are:', packs)
441+
'current_packages are:', packs)
442442

443-
current_package_manifests = add_files(current_package_manifests, resource)
444-
package_manifests.extend(current_package_manifests)
443+
current_packages = add_files(current_packages, resource)
444+
packages.extend(current_packages)
445445

446-
if TRACE_LIGHT and package_manifests:
446+
if TRACE_LIGHT and packages:
447447
logger_debug()
448448
from packagedcode.models import Package # NOQA
449-
packs = [Package.create(**p) for p in package_manifests]
449+
packs = [Package.create(**p) for p in packages]
450450
logger_debug('package_summarizer: for:', resource,
451-
'package_manifests are:', packs)
451+
'packages are:', packs)
452452

453-
# Collect direct children package_manifests summary
453+
# Collect direct children packages summary
454454
for child in children:
455-
child_summaries = get_resource_summary(child, key='package_manifests', as_attribute=False) or []
456-
package_manifests.extend(child_summaries)
455+
child_summaries = get_resource_summary(child, key='packages', as_attribute=False) or []
456+
packages.extend(child_summaries)
457457

458458
# summarize proper
459-
set_resource_summary(resource, key='package_manifests', value=package_manifests, as_attribute=False)
460-
return package_manifests
459+
set_resource_summary(resource, key='packages', value=packages, as_attribute=False)
460+
return packages

0 commit comments

Comments
 (0)