示例#1
0
    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()
示例#2
0
 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)
示例#3
0
    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)