Skip to content

Commit 313b39e

Browse files
committed
[colic] Add category reference implementation and corresponding tests
Signed-off-by: inishchith <[email protected]>
1 parent e0430d1 commit 313b39e

File tree

3 files changed

+199
-9
lines changed

3 files changed

+199
-9
lines changed

grimoire_elk/enriched/colic.py

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@ def extract_modules(self, file_path):
167167
return modules
168168

169169
@metadata
170-
def get_rich_item(self, file_analysis):
171-
# TODO: requires adjustments regarding category of backend used
170+
def __get_rich_scancode(self, file_analysis):
171+
# Scancode and Scancode-CLI Implementation
172172

173173
eitem = {}
174174
eitem["file_path"] = file_analysis["file_path"]
@@ -192,14 +192,43 @@ def get_rich_item(self, file_analysis):
192192

193193
return eitem
194194

195+
@metadata
196+
def __get_rich_nomossa(self, file_analysis):
197+
# NOMOS analyzer implementation
198+
199+
eitem = {}
200+
eitem["file_path"] = file_analysis["file_path"]
201+
eitem["modules"] = self.extract_modules(eitem["file_path"])
202+
eitem["license_name"] = []
203+
eitem["has_license"] = 0
204+
205+
if file_analysis["licenses"] != "No_license_found":
206+
eitem["has_license"] = 1
207+
for _license in file_analysis["licenses"]:
208+
eitem["licenses"].append(_license)
209+
eitem["license_name"].append(_license)
210+
211+
# NOMOS doesn't provide copyright information.
212+
eitem["copyrights"] = []
213+
eitem["has_copyright"] = 0
214+
215+
return eitem
216+
195217
def get_rich_items(self, item):
196-
# The real data
197-
entry = item['data']
218+
"""
219+
:category: code_license_scancode_cli(default)
220+
"""
198221

222+
if item["category"] == "code_license_nomos":
223+
get_rich_item = self.__get_rich_nomossa
224+
else:
225+
get_rich_item = self.__get_rich_scancode
226+
227+
entry = item['data']
199228
enriched_items = []
200229

201230
for file_analysis in entry["analysis"]:
202-
eitem = self.get_rich_item(file_analysis)
231+
eitem = get_rich_item(file_analysis)
203232

204233
for f in self.RAW_FIELDS_COPY:
205234
if f in item:
@@ -208,13 +237,14 @@ def get_rich_items(self, item):
208237
eitem[f] = None
209238

210239
# common attributes
211-
eitem['commit_sha'] = entry['commit']
212240
eitem['author'] = entry['Author']
213-
eitem['committer'] = entry['Commit']
214-
eitem['commit'] = entry['commit']
215-
eitem['message'] = entry['message']
216241
eitem['author_date'] = fix_field_date(entry['AuthorDate'])
242+
eitem["category"] = item["category"]
243+
eitem['commit'] = entry['commit']
244+
eitem['committer'] = entry['Commit']
217245
eitem['commit_date'] = fix_field_date(entry['CommitDate'])
246+
eitem['commit_sha'] = entry['commit']
247+
eitem['message'] = entry['message']
218248

219249
if self.prjs_map:
220250
eitem.update(self.get_item_project(eitem))

tests/data/colic.json

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,5 +185,135 @@
185185
"timestamp": 1562563562.34835,
186186
"updated_on": 1525607811.0,
187187
"uuid": "ce7c47568fd87100aff497dd7677b0736d85db1e"
188+
},
189+
{
190+
"backend_name": "CoLic",
191+
"backend_version": "0.5.0",
192+
"category": "code_license_scancode",
193+
"data": {
194+
"Author": "Valerio Cosentino <[email protected]>",
195+
"AuthorDate": "Sun May 6 13:56:51 2018 +0200",
196+
"Commit": "Valerio Cosentino <[email protected]>",
197+
"CommitDate": "Sun May 6 13:56:51 2018 +0200",
198+
"analysis": [{
199+
"copyrights": [{
200+
"end_line": 3,
201+
"start_line": 3,
202+
"value": "Copyright (c) 2015-2018 Bitergia"
203+
}],
204+
"file_path": "graal/codecomplexity.py",
205+
"licenses": [{
206+
"category": "Copyleft",
207+
"end_line": 17,
208+
"homepage_url": "http://www.gnu.org/licenses/gpl-3.0-standalone.html",
209+
"is_exception": false,
210+
"key": "gpl-3.0-plus",
211+
"matched_rule": {
212+
"identifier": "gpl-3.0-plus_117.RULE",
213+
"is_license_notice": true,
214+
"is_license_reference": false,
215+
"is_license_tag": false,
216+
"is_license_text": false,
217+
"license_expression": "gpl-3.0-plus",
218+
"licenses": [
219+
"gpl-3.0-plus"
220+
],
221+
"match_coverage": 97.35,
222+
"matched_length": 110,
223+
"matcher": "3-seq",
224+
"rule_length": 113,
225+
"rule_relevance": 100.0
226+
},
227+
"name": "GNU General Public License 3.0 or later",
228+
"owner": "Free Software Foundation (FSF)",
229+
"reference_url": "https://enterprise.dejacode.com/urn/urn:dje:license:gpl-3.0-plus",
230+
"score": 97.35,
231+
"short_name": "GPL 3.0 or later",
232+
"spdx_license_key": "GPL-3.0-or-later",
233+
"spdx_url": "https://spdx.org/licenses/GPL-3.0-or-later",
234+
"start_line": 5,
235+
"text_url": "http://www.gnu.org/licenses/gpl-3.0-standalone.html"
236+
}]
237+
}],
238+
"analyzer": "scancode",
239+
"commit": "a957488c9bd95e3b72a30611edc61496ee152430",
240+
"message": "[codecomplexity] Enable analysis with no file filtering\n\nThis patch allows to handle analysis without file filtering."
241+
},
242+
"graal_version": "0.2.1",
243+
"origin": "https://github.com/chaoss/grimoirelab-graal",
244+
"tag": "https://github.com/chaoss/grimoirelab-graal",
245+
"timestamp": 1565108843.015344,
246+
"updated_on": 1525607811.0,
247+
"uuid": "ce7c47568fd87100aff497dd7677b0736d85db1e"
248+
},
249+
{
250+
"backend_name": "CoLic",
251+
"backend_version": "0.5.0",
252+
"category": "code_license_scancode",
253+
"data": {
254+
"Author": "valerio <[email protected]>",
255+
"AuthorDate": "Sun May 6 14:02:36 2018 +0200",
256+
"Commit": "GitHub <[email protected]>",
257+
"CommitDate": "Sun May 6 14:02:36 2018 +0200",
258+
"analysis": [{
259+
"copyrights": [],
260+
"file_path": "README.md",
261+
"licenses": []
262+
}],
263+
"analyzer": "scancode",
264+
"commit": "8aedf09e36008fee19192985c0eb51879c6c61e4",
265+
"message": "Create README.md"
266+
},
267+
"graal_version": "0.2.1",
268+
"origin": "https://github.com/chaoss/grimoirelab-graal",
269+
"tag": "https://github.com/chaoss/grimoirelab-graal",
270+
"timestamp": 1565108866.965087,
271+
"updated_on": 1525608156.0,
272+
"uuid": "856beb87d6b324b136e718295cc6ad69343a1066"
273+
},
274+
{
275+
"backend_name": "CoLic",
276+
"backend_version": "0.5.0",
277+
"category": "code_license_nomos",
278+
"data": {
279+
"Author": "inishchith <[email protected]>",
280+
"AuthorDate": "Mon Feb 25 21:44:23 2019 +0530",
281+
"Commit": "Valerio Cosentino <[email protected]>",
282+
"CommitDate": "Tue Feb 26 16:24:43 2019 +0100",
283+
"analysis": [{
284+
"file_path": "tests/test_colic.py",
285+
"licenses": [
286+
"GPL-3.0"
287+
]
288+
},
289+
{
290+
"file_path": "tests/test_nomos.py",
291+
"licenses": [
292+
"GPL-3.0"
293+
]
294+
},
295+
{
296+
"file_path": "tests/test_scancode.py",
297+
"licenses": [
298+
"GPL-3.0"
299+
]
300+
},
301+
{
302+
"file_path": "tests/utils.py",
303+
"licenses": [
304+
"GPL-3.0"
305+
]
306+
}
307+
],
308+
"analyzer": "nomos",
309+
"commit": "dda651a12eb05b2d604522b4fbdbf07d3e213eff",
310+
"message": "[tests] Move executable path to utils.py\n\nMove executable paths - NOMOS_PATH and SCANCODE_PATH to utils.py"
311+
},
312+
"graal_version": "0.2.1",
313+
"origin": "https://github.com/chaoss/grimoirelab-graal",
314+
"tag": "https://github.com/chaoss/grimoirelab-graal",
315+
"timestamp": 1565204679.302685,
316+
"updated_on": 1551194683.0,
317+
"uuid": "79a561015d5d49c3ec6754a05db24735f957814e"
188318
}
189319
]

tests/test_colic.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,36 @@ def test_raw_to_enrich(self):
8282
self.assertEqual(eitem['modules'], ["graal"])
8383
self.assertEqual(eitem['file_path'], "graal/codecomplexity.py")
8484

85+
item = self.items[2]
86+
eitem = enrich_backend.get_rich_items(item)[0]
87+
self.assertEqual(eitem['licenses'], ["gpl-3.0-plus"])
88+
self.assertEqual(eitem['has_license'], 1)
89+
self.assertEqual(eitem['license_name'], ["GNU General Public License 3.0 or later"])
90+
self.assertEqual(eitem['copyrights'], ["Copyright (c) 2015-2018 Bitergia"])
91+
self.assertEqual(eitem['has_copyright'], 1)
92+
self.assertEqual(eitem['modules'], ["graal"])
93+
self.assertEqual(eitem['file_path'], "graal/codecomplexity.py")
94+
95+
item = self.items[3]
96+
eitem = enrich_backend.get_rich_items(item)[0]
97+
self.assertEqual(eitem['licenses'], [])
98+
self.assertEqual(eitem['has_license'], 0)
99+
self.assertEqual(eitem['license_name'], [])
100+
self.assertEqual(eitem['copyrights'], [])
101+
self.assertEqual(eitem['has_copyright'], 0)
102+
self.assertEqual(eitem['modules'], [])
103+
self.assertEqual(eitem['file_path'], "README.md")
104+
105+
item = self.items[4]
106+
eitem = enrich_backend.get_rich_items(item)[0]
107+
self.assertEqual(eitem['licenses'], ["GPL-3.0"])
108+
self.assertEqual(eitem['has_license'], 1)
109+
self.assertEqual(eitem['license_name'], ["GPL-3.0"])
110+
self.assertEqual(eitem['copyrights'], [])
111+
self.assertEqual(eitem['has_copyright'], 0)
112+
self.assertEqual(eitem['modules'], ["tests"])
113+
self.assertEqual(eitem['file_path'], "tests/test_colic.py")
114+
85115
def test_colic_analysis_study(self):
86116
""" Test that the colic analysis study works correctly """
87117

0 commit comments

Comments
 (0)