forked from rmeloca/EcosystemsAnalysis
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgenerateCSVLicensesChanges.py
More file actions
78 lines (77 loc) · 2.6 KB
/
generateCSVLicensesChanges.py
File metadata and controls
78 lines (77 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
from ecosystemDataManager.ecosystemDataManager import EcosystemDataManager
from ecosystemDataManager.group import Group
import csv
import sys
"""
Generate a list of licenses changes to CSV formats
"""
if __name__ == '__main__':
if len(sys.argv) < 2:
print("Usage:", sys.argv[0], "<ecosystem> [<file>]")
sys.exit(1)
if len(sys.argv) > 2:
file = sys.argv[2]
else:
print("file not provided. using default.")
file = "licensesChanges.csv"
try:
open(file)
print("file loaded")
file = open(file, "a")
file = csv.writer(file, delimiter = ';')
except Exception as e:
file = open(file, "w")
file = csv.writer(file, delimiter = ';')
file.writerow(["ecosystem","package","versions","unknownTOknown", "knownTOunknown", "latestGroup"])
print("file not loaded. initialized.")
ecosystem = sys.argv[1]
ecosystemDataManager = EcosystemDataManager(ecosystem)
for package in ecosystemDataManager.getPackages():
unknownTOknown = 0
knownTOunknown = 0
history = package.getHistory()
for i in range(len(history) - 1):
versionFrom = history[i]
versionTo = history[i + 1]
if not versionFrom.getDatetime():
continue
if not versionTo.getDatetime():
continue
licensesFrom = versionFrom.getLicenses()
licensesTo = versionTo.getLicenses()
if not licensesFrom:
if licensesTo:
for licenseTo in licensesTo:
groupTo = licenseTo.getGroup()
if groupTo == Group.KNOWN:
unknownTOknown += 1
elif not licensesTo:
for licenseFrom in licensesFrom:
groupFrom = licenseFrom.getGroup()
if groupFrom == Group.KNOWN:
knownTOunknown += 1
else:
groupsFrom = [license.getGroup().value for license in licensesFrom]
groupsTo = [license.getGroup().value for license in licensesFrom]
if groupsFrom == groupsTo:
continue
for licenseFrom in licensesFrom:
for licenseTo in licensesTo:
groupFrom = licenseFrom.getGroup()
groupTo = licenseTo.getGroup()
if groupFrom == Group.KNOWN:
if groupTo == Group.NONE or groupTo == Group.UNDEFINED:
knownTOunknown += 1
if groupFrom == Group.NONE or groupFrom == Group.UNDEFINED:
if groupTo == Group.KNOWN:
unknownTOknown += 1
try:
if unknownTOknown > 0 or knownTOunknown > 0:
versions = len(package)
if package.getLatestVersion().getLicenses():
latestGroup = ",".join([license.getGroup().name for license in package.getLatestVersion().getLicenses()])
else:
latestGroup = Group.NONE.name
file.writerow([ecosystem, package, versions, unknownTOknown, knownTOunknown, latestGroup])
except Exception as e:
print(package, len(package), "discarted")