initializing
This commit is contained in:
		
							
								
								
									
										35
									
								
								layout.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								layout.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					table {
 | 
				
			||||||
 | 
					    border-collapse: collapse;
 | 
				
			||||||
 | 
					    margin-bottom: 10px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					th {
 | 
				
			||||||
 | 
					    background-color: #185886;
 | 
				
			||||||
 | 
					    color: white;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					th, td {
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    border: 1px solid #ccc;
 | 
				
			||||||
 | 
					    font-size: 10pt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					body {
 | 
				
			||||||
 | 
					    font-family: 'Ubuntu';
 | 
				
			||||||
 | 
					    font-size: 10pt;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tr:nth-child(2n) {
 | 
				
			||||||
 | 
					    background-color: #f5f5f5;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.abbreviations {
 | 
				
			||||||
 | 
					    margin-top: 5px;
 | 
				
			||||||
 | 
					    margin-right: 5px;
 | 
				
			||||||
 | 
					    float: left;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.colwidth {
 | 
				
			||||||
 | 
					    width: 80px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										52
									
								
								sched.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								sched.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					from vatsched import *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stations = [
 | 
				
			||||||
 | 
					    "EDWW_CTR",
 | 
				
			||||||
 | 
					    "EDWW_A_CTR",
 | 
				
			||||||
 | 
					    "EDWW_B_CTR",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDUU_O_CTR",
 | 
				
			||||||
 | 
					    "EDUU_E_CTR",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDBB_S_APP",
 | 
				
			||||||
 | 
					    "EDBB_U_APP",
 | 
				
			||||||
 | 
					    "EDBB_S_DEP",
 | 
				
			||||||
 | 
					    "EDBB_N_APP",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDDB_N_TWR",
 | 
				
			||||||
 | 
					    "EDDB_S_TWR",
 | 
				
			||||||
 | 
					    "EDDB_A_GND",
 | 
				
			||||||
 | 
					    "EDDB_E_GND",
 | 
				
			||||||
 | 
					    "EDDB_N_GND",
 | 
				
			||||||
 | 
					    "EDDB_S_GND",
 | 
				
			||||||
 | 
					    "EDDB_DEL",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDMM_CTR",
 | 
				
			||||||
 | 
					    "EDMM_M_CTR",
 | 
				
			||||||
 | 
					    "EDMM_G_CTR",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDDP_S_APP",
 | 
				
			||||||
 | 
					    "EDDP_F_APP",
 | 
				
			||||||
 | 
					    "EDDP_N_APP",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDDP_N_TWR",
 | 
				
			||||||
 | 
					    "EDDP_S_TWR",
 | 
				
			||||||
 | 
					    "EDDP_GND",
 | 
				
			||||||
 | 
					    "EDDP_DEL",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDDC_APP",
 | 
				
			||||||
 | 
					    "EDDC_TWR",
 | 
				
			||||||
 | 
					    "EDDC_GND",
 | 
				
			||||||
 | 
					    "EDDC_A_GND",
 | 
				
			||||||
 | 
					    "--",
 | 
				
			||||||
 | 
					    "EDDE_TWR",
 | 
				
			||||||
 | 
					    "EDDE_GND",
 | 
				
			||||||
 | 
					    "EDDE_A_GND"
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					displaydates = EveryXWeeksFromStartdate("26.02.2021", 4, 2)
 | 
				
			||||||
 | 
					#displaydates = EveryWeekday(1,2) # MONDAY = 0
 | 
				
			||||||
 | 
					#displaydates = WholeWeek()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					createImage(displaydates, stations, 'test.jpg')
 | 
				
			||||||
							
								
								
									
										96
									
								
								vatsched.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								vatsched.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					import imgkit, requests
 | 
				
			||||||
 | 
					from dateutil.parser import parse
 | 
				
			||||||
 | 
					from datetime import datetime, timedelta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					abbreviations = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def EveryXWeeksFromStartdate(startdate, x, numberofdates = 1):
 | 
				
			||||||
 | 
					    startdate = parse(startdate)
 | 
				
			||||||
 | 
					    days = []
 | 
				
			||||||
 | 
					    while (len(days) < numberofdates):
 | 
				
			||||||
 | 
					        startdate += timedelta(days=x*7)
 | 
				
			||||||
 | 
					        if(datetime.today() <= startdate):
 | 
				
			||||||
 | 
					            days.append(startdate)
 | 
				
			||||||
 | 
					    return days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def EveryWeekday(weekday, numberofdates=1):
 | 
				
			||||||
 | 
					    startdate = datetime.today() + timedelta((weekday - datetime.today().weekday()) % 7)
 | 
				
			||||||
 | 
					    days = []
 | 
				
			||||||
 | 
					    while(len(days) < numberofdates):
 | 
				
			||||||
 | 
					        days.append(startdate)
 | 
				
			||||||
 | 
					        startdate += timedelta(7)
 | 
				
			||||||
 | 
					    return days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def WholeWeek(shift = 0):
 | 
				
			||||||
 | 
					    days=[]
 | 
				
			||||||
 | 
					    startdate = datetime.today() + timedelta(shift)
 | 
				
			||||||
 | 
					    for i in range(0,7):
 | 
				
			||||||
 | 
					        days.append(startdate + timedelta(i))
 | 
				
			||||||
 | 
					    return days
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def getDatePositionData(station, date, bookings):
 | 
				
			||||||
 | 
					    global abbreviations
 | 
				
			||||||
 | 
					    text = []
 | 
				
			||||||
 | 
					    for booking in bookings[station]:
 | 
				
			||||||
 | 
					        if date.date() == booking['starts_at'].date():
 | 
				
			||||||
 | 
					            abbr = booking['firstname'][:2] + booking['lastname'].split(" ")[-1][:2]
 | 
				
			||||||
 | 
					            abbreviations[abbr] = booking['firstname'] + " " + booking['lastname']
 | 
				
			||||||
 | 
					            text.append(abbr + " " + booking['starts_at'].strftime("%H") + "-" + booking['ends_at'].strftime("%H"))
 | 
				
			||||||
 | 
					    if len(text) < 1:
 | 
				
			||||||
 | 
					        text.append("--")
 | 
				
			||||||
 | 
					    return "<br>".join(text)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def maketable(stations, displaydates, bookings):
 | 
				
			||||||
 | 
					    global abbreviations
 | 
				
			||||||
 | 
					    text = "<table><tr><th>Stationen</th>"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for date in displaydates:
 | 
				
			||||||
 | 
					        text += "<th class="">%s</th>" % (date.strftime("%a %d.%m."))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    text += "</tr>"
 | 
				
			||||||
 | 
					    text += "<tr><td colspan='%d'></td></tr>" % (len(displaydates) + 1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for station in stations:
 | 
				
			||||||
 | 
					        if station == "--":
 | 
				
			||||||
 | 
					            text += "<tr><td colspan='%d' style='border-bottom: 0'></td></tr>" % (len(displaydates) + 1)
 | 
				
			||||||
 | 
					            text += "<tr><td colspan='%d' style='border-top: 0'></td></tr>" % (len(displaydates) + 1)
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					        datestext = ""
 | 
				
			||||||
 | 
					        for date in displaydates:
 | 
				
			||||||
 | 
					            datestext += "<td>%s</td>" % (getDatePositionData(station, date, bookings))
 | 
				
			||||||
 | 
					        text += "<tr><td style='text-align: left'>%s</td>%s</tr>" % (station, datestext)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    text += "</table> <div class='abbreviations'>"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    i = 0
 | 
				
			||||||
 | 
					    for key in sorted(abbreviations.keys()):
 | 
				
			||||||
 | 
					        text += "<div class='abbrv'><span>%s:</span> %s</div>" % (key, abbreviations[key])
 | 
				
			||||||
 | 
					        i += 1
 | 
				
			||||||
 | 
					        if i > 4:
 | 
				
			||||||
 | 
					            text += "</div><div class='abbreviations'>"
 | 
				
			||||||
 | 
					            i = 0
 | 
				
			||||||
 | 
					    return text + "</div>"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def createImage(displaydates, stations, filename): 
 | 
				
			||||||
 | 
					    rawdata = fetchData(displaydates[0], displaydates[-1])
 | 
				
			||||||
 | 
					    relbookings = {}
 | 
				
			||||||
 | 
					    for station in stations:
 | 
				
			||||||
 | 
					        relbookings[station] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for datum in rawdata:
 | 
				
			||||||
 | 
					        if datum['station']['ident'] in stations:
 | 
				
			||||||
 | 
					            relbookings[datum['station']['ident']].append({'starts_at': parse(datum['starts_at']), 'ends_at': parse(datum['ends_at']), 'lastname': datum['controller']['lastname'], 'firstname': datum['controller']['firstname']})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    text = maketable(stations, displaydates, relbookings)
 | 
				
			||||||
 | 
					    css = 'layout.css'
 | 
				
			||||||
 | 
					    config = imgkit.config(wkhtmltoimage='C:/Program Files/wkhtmltopdf/bin/wkhtmltoimage.exe')
 | 
				
			||||||
 | 
					    options = {'width': (100 + 75 * len(displaydates)), 'disable-smart-width': ''}
 | 
				
			||||||
 | 
					    imgkit.from_string(text, filename, css=css, config=config, options=options)
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def fetchData(startdate = datetime.today(), enddate = (datetime.today() + timedelta(1))):
 | 
				
			||||||
 | 
					    url = 'https://vatsim-germany.org/api/booking/atc/daterange/%s/%s' % (startdate.strftime("%d.%m.%Y"), enddate.strftime("%d.%m.%Y"))
 | 
				
			||||||
 | 
					    r  = requests.get(url=url,headers={'X-Requested-With': 'XMLHttpRequest'})
 | 
				
			||||||
 | 
					    return r.json()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user