-
Notifications
You must be signed in to change notification settings - Fork 10
/
svg.py
66 lines (59 loc) · 2.46 KB
/
svg.py
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
# This program tries to parse distrowatch and create a svg graph simliar to: <https://en.wikipedia.org/wiki/Linux_distribution#/media/File:Linux_Distribution_Timeline_with_Android.svg>
# Copyright (C) 2016 Jappe Klooster
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.If not, see <http://www.gnu.org/licenses/>.
"""
This file flattens the graph back into a csv structure
"""
def csv(name,parent,start,stop,icon,description):
import random
r = lambda: random.randint(0,255)
color = '#%02X%02X%02X' % (r(),r(),r())
return "\"N\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\",\"%s\"\n" % (
name,color,parent,start,stop,icon,description
)
def toCSV(distributions, parent):
def sortDates(datearray):
return list(
sorted(
map(
lambda x: datetime.strptime(x,"%Y-%m-%d"),
datearray
)
)
)
from datetime import datetime, MAXYEAR
lowestStartdate = datetime(MAXYEAR,1,1)
result = ""
for distro in distributions:
import strings
dates = sortDates(distro[strings.dates])
enddate = ""
dateformat = "%Y.%m.%d"
if not distro[strings.status] == strings.active:
enddate = dates[-1].strftime(dateformat)
retuple = toCSV(distro[strings.children],distro[strings.name])
startdate = dates[0]
if retuple.lowestStartdate < startdate:
startdate = retuple.lowestStartdate
if startdate < lowestStartdate:
lowestStartdate = startdate
result += retuple.result +csv(
distro[strings.name],
parent,
startdate.strftime(dateformat),
enddate,
distro[strings.image] if len(distro[strings.children]) > 1 else ""
,""
)
from collections import namedtuple
retuple = namedtuple('Retuple', ['result', 'lowestStartdate'])
return retuple(result, lowestStartdate)