# Export poor man's flight log from collections import defaultdict import errno import os from os.path import join from sys import platform import time from config import config from companion import ship_map, commodity_map logfile = None def openlog(): global logfile if logfile: return try: logfile = open(join(config.get('outdir'), 'Flight Log.csv'), 'a+b') if platform != 'win32': # open for writing is automatically exclusive on Windows from fcntl import lockf, LOCK_SH, LOCK_NB lockf(logfile, LOCK_SH|LOCK_NB) logfile.seek(0, os.SEEK_END) if not logfile.tell(): logfile.write('Date,Time,System,Station,Ship,Cargo\r\n') except EnvironmentError as e: logfile = None if e.errno in [errno.EACCES, errno.EAGAIN]: raise Exception('Can\'t write "Flight Log.csv". Are you editing it in another app?') else: raise except: logfile = None raise def export(data): def elapsed(game_time): return '%3d:%02d:%02d' % ((game_time // 3600) % 3600, (game_time // 60) % 60, game_time % 60) querytime = config.getint('querytime') or int(time.time()) openlog() commodities = defaultdict(int) for item in data['ship'].get('cargo',{}).get('items',[]): if item['commodity'] != 'drones': commodities[commodity_map.get(item['commodity'], item['commodity'])] += item['qty'] logfile.write('%s,%s,%s,%s,%s,%s\r\n' % ( time.strftime('%Y-%m-%d', time.localtime(querytime)), time.strftime('%H:%M:%S', time.localtime(querytime)), data['lastSystem']['name'], data['commander']['docked'] and data['lastStarport']['name'] or '', ship_map.get(data['ship']['name'], data['ship']['name']), ','.join([('%d %s' % (commodities[k], k)) for k in sorted(commodities)]))) logfile.flush()