import json import logging from typing import List from . import Render, Result from .. import LocationAnalyzer log = logging.getLogger(__name__) class PrintRender(Render): def render(self, results: List[Result]): print("\t" + "\n\t".join([str(r) for r in results])) class JSONRender(Render): def render(self, results: List[Result]): print(json.dumps([r.get() for r in self.filter(results)], indent=1)) class TrackRender(Render): result_types = [LocationAnalyzer] def render(self, results: List[Result]): data = [] log.debug(results) for result in self.filter(results): if len(result.get()) > 0: data.append( [[entry['location']['coordinates'][1], entry['location']['coordinates'][0]] for entry in # TODO: configurable result.get()]) dumps = json.dumps(data) with open("track_data.js", "w") as out: out.write("tracks=" + dumps + ";") return dumps class HeatMapRender(TrackRender): weight = 0.01 def render(self, results: List[Result]): raw = super(HeatMapRender, self).render(results) data = [] for session in json.loads(raw): data += [(entry[0], entry[1], self.weight) for entry in session] dumps = json.dumps(data) with open('heat_data.js', 'w') as out: out.write("coords = " + dumps + ";") return dumps