Esempio n. 1
0
	def post(self):
		track = self.request.get('track')
		bestlaps = {}
		for bl in BestLap.all().filter('track =', track):
			if bl.isBest is True:
				bestlaps[bl.raceclass.name] = bl

		upload_files = self.get_uploads('file')[0]
		blob_key = upload_files.key()
		blob_info = upload_files
		record = Record(csv=str(blob_info)).put()
		blob_reader = blobstore.BlobReader(blob_key)
		reader = csv.DictReader(blob_reader)
		lapsToUpload = []

		for row in reader:
			#row = row.replace('"','').replace(', ', ' ').strip()
			if 'Best Tm' in row:
				time = row['Best Tm']
			else:
				time = row['Overall BestTm']
			
			if 'Laps' in row:
				laps = row['Laps']
			else:
				laps = row['Appeared']

			position = row['Pos']
			point_in_class = row['PIC']
			carnum = row['No.']
			racer_name = normalize_string(row['Name'])
			racer_class = normalize_string(row['Class'])
			diff = row['Diff']
			gap = row['Gap']
			points = row['Points']
			car_make = normalize_string(row['Make'])
			car_model = normalize_string(row['Model'])
			car_year = row['Year']
			car_color = row['Color']
			city = row['City']
			state = row['State']
			sponsor = normalize_string(row['Sponsor'])
			email = row['Email']

			if time.count(':') == 0 and time:
				time = '0:' + time
			
			if validLap(racer_class, point_in_class):
				pt = process_time(time)
				t = track #Track.get_or_insert(key_name=self.request.get('track'), name=self.request.get('track'), lap_distance=1.02)
				g = self.request.get('group')
				sd = self.request.get('date')
				dt = datetime.strptime(sd, '%Y-%m-%d')
				tr = Track.get_or_insert(key_name=t, name=t)
				e = Event.get_or_insert(key_name=g+t+sd, name=g+t, track=tr, date=dt)
				c = Car.get_or_insert(key_name=carnum+car_make+car_model+car_color+car_year, make=car_make, model=car_model,year=car_year,color=car_color,number=carnum)
				cl = RaceClass.get_or_insert(key_name=racer_class, name=racer_class)
				if email:
					email
				else:
					email = racer_name.split()[0].lower() + racer_name.split()[1].lower()+'@gmail.com'
				r = Racer.get_or_insert(key_name=racer_name.split()[0][0:1].lower() + racer_name.split()[1].lower(), email=email,name=racer_name, driver=users.User(email), points=int(points), car=c, raceclass=cl)
				if sponsor:
					r.sponsor=Sponsor.get_or_insert(key_name=sponsor, name=sponsor)

				r.put()
				best = BestLap.get_or_insert(key_name=sd+t+g+cl.name+racer_name.replace(' ','.'), driver=r, raceclass=cl, track=t, time=pt, event=e, isBest=False, date=dt)

				if cl.name in bestlaps:
					if pt < bestlaps[cl.name].time and pt != 0.0:
						print str(pt) + ' is better than ' + bestlaps[cl.name].driver.name + 's time of ' + str(bestlaps[cl.name].time)
						best.isBest = True					#Mark current record as best
						bestlaps[cl.name].isBest = False	#Mark old record as not best
						bestlaps[cl.name].put()				#Commit old record to db
						bestlaps[cl.name] = best 			#Replace record in local dictionary with new best record for class
				elif pt != 0.0:
					best.isBest = True
					bestlaps[cl.name] = best
				lapsToUpload.append(best)
		db.put(lapsToUpload)
		self.redirect('/')