def importc(self): datere = re.compile(r"([0-9\-]+) ([0-9:]+)") reports = Report.all() for report in reports: report.delete() imp = csv.reader(open("doc/import.csv", "rb")) boat = None for row in imp: boatid = string.upper(row[1]) if boat == None: boat = Boat.get_by_key_name(boatid, parent=self.dbuser) # logging.error(row[0]) report = Report(parent=boat) parsedate = datere.match(row[0]) date = parsedate.group(1) + " " + parsedate.group(2) tm = time.strptime(date, "%Y-%m-%d %H:%M:%S") report.created = datetime.datetime.utcfromtimestamp(time.mktime(tm)) report.lat = float(row[2]) report.lon = float(row[3]) payload = {"comment": row[4].replace("</b>", "")} # logging.error(payload) report.setPayload(payload) report.put()
def download(self): lines = [] id = string.upper(self.request.get("id")) boat = Boat.get_by_key_name(id, parent=self.dbuser) lines.append('<?xml version="1.0" encoding="utf-8" ?>') lines.append( '<gpx version="1.1" creator="sailtrack" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.topografix.com/GPX/1/1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd">' ) if boat != None: reports = Report.all() reports.ancestor(boat) reports.order("created") for report in reports: comment = "" if report.payload != None and report.payload != "": comment = report.getPayload()["comment"] lines.append(' <wpt lat="%f" lon="%f">' % (report.lat, report.lon)) lines.append(" <time>%s</time>" % (report.created.strftime("%Y-%m-%dT%H:%M:%SZ"))) lines.append(" <name>%s</name>" % (escape(comment))) lines.append(" <sym>circle</sym>") lines.append(" <type>WPT</type>") lines.append(" </wpt>") self.setContentType("text/plain") lines.append("</gpx>") return "\n".join(lines)
def map(self): track=[] marker=None boatid=string.upper(self.request.get('boat')) showmarkers=string.upper(self.request.get('markers')) showinfo=string.upper(self.request.get('popup')) zoom=self.request.get('zoom') #TODO: Validate input if (zoom==''): zoom=6 if (showmarkers==''): showmarkers='true' if (showinfo==''): showinfo='false' boats=Boat.all() # TODO: Is there a better way to filter this? We can't use key_name because we don't know ancestor for boat in boats: logging.error(boat.key().name() + " vs " + boatid) if (boat.key().name()!=boatid): boat=None; else: break if (boats != None and boat!=None): reports=Report.all() reports.ancestor(boat) reports.order("created") for report in reports: #logging.error(report.payload) entry={} entry['date']=report.created.strftime("%Y-%m-%d %H:%M:%S") entry['lat']='%.2f' % (report.lat) entry['lon']='%.2f' % (report.lon) entry['boat']=boat.key().name() comment='' if (report.payload!=None and report.payload!=''): comment=report.getPayload()['comment'] entry['comment']=comment track.append(entry) marker=entry # This is the last one values={} values['marker']=marker values['track']=track values['zoom']=zoom values['showmarkers']=string.lower(showmarkers) values['showinfo']=string.lower(showinfo) return self.render('map',values)