def update_map_file(): # really there should be a flag in the user object to indicate the map needs updating, but for that to be reliable that needs to put with each new checkin, so these need to have the user as the parent so the transaction works, and that's just a nightmare. mapimages = MapImage.all().order('last_updated').fetch(10) for mapimage in mapimages: if not mapimage.update_count: mapimage.update_count = 0 mapimage.put() userinfo = UserInfo.all().filter('user = '******'s no userinfo mapimage.put() logging.warning("No userinfo found for mapimage with user %s" % mapimage.user) continue try: if userinfo.last_updated > mapimage.last_updated or mapimage.update_count == 0: google_data = { 'key': constants.get_google_maps_apikey(), 'zoom': mapimage.zoom, 'center': str(mapimage.centerlat) + "," + str(mapimage.centerlng), 'size': str(mapimage.width) + "x" + str(mapimage.height), 'sensor':'false', 'format':'png', } img = update_map_image(mapimage.user, mapimage.zoom, mapimage.width, mapimage.height, mapimage.northlat, mapimage.westlng) mapimage.img = db.Blob(img) mapimage.last_updated = datetime.now() mapimage.static_url = "http://maps.google.com/maps/api/staticmap?" + urllib.urlencode(google_data) mapimage.update_count += 1 mapimage.put() logging.info("Updated user map for %s" % mapimage.user) return # only update one map else: # so that we don't get stuck on the same maps forever mapimage.last_updated = datetime.now() mapimage.put() logging.debug("Did not need to update map for %s" % mapimage.user) except DeadlineExceededError, err: logging.error("Ran out of time before updating a map! %s" % err) mapimage.last_updated = datetime.now() # put it at the end of the queue anyway, in case we always fail on this map for some reason mapimage.put()
def get(self): welcome_data = { 'user': '', 'userinfo': '', 'url': users.create_login_url(self.request.uri), 'real_name': '', 'photo_url': constants.default_photo, 'is_ready': False } sidebar_data = { 'color_scheme_dict': color_scheme.color_schemes, 'color_scheme': constants.default_color, } map_data = { 'citylat': constants.default_lat, 'citylng': constants.default_lng, 'zoom': constants.default_zoom, 'width': constants.default_dimension, 'height': constants.default_dimension, } user = users.get_current_user() if user: welcome_data['user'] = user welcome_data['url'] = users.create_logout_url(self.request.uri) userinfo = UserInfo.all().filter('user ='******'-created').get() if userinfo: fetch_foursquare_data.update_user_info(userinfo) welcome_data['userinfo'] = userinfo welcome_data['real_name'] = userinfo.real_name welcome_data['photo_url'] = userinfo.photo_url welcome_data['is_ready'] = userinfo.is_ready sidebar_data['color_scheme'] = userinfo.color_scheme map_data['citylat'] = userinfo.citylat map_data['citylng'] = userinfo.citylng os_path = os.path.dirname(__file__) self.response.out.write(template.render(os.path.join(os_path, 'templates/header.html'), {'key': constants.get_google_maps_apikey()})) self.response.out.write(template.render(os.path.join(os_path, 'templates/private_welcome.html'), welcome_data)) if user and userinfo: self.response.out.write(template.render(os.path.join(os_path, 'templates/private_sidebar.html'), sidebar_data)) else: self.response.out.write(template.render(os.path.join(os_path, 'templates/information.html'), None)) self.response.out.write(template.render(os.path.join(os_path, 'templates/private_map.html'), map_data)) self.response.out.write(template.render(os.path.join(os_path, 'templates/all_footer.html'), None))
width, height = widthxheight.split('x') width, height = int(width), int(height) assert zoom.isdigit(), "not digits" zoom = int(zoom) assert centerpoint.count(',') == 1, "%d ,'s" % centerpoint.count(',') centerlat, centerlng = centerpoint.split(',') centerlat, centerlng = float(centerlat), float(centerlng) assert northwest.count(',') == 1, "%d ,'s" % northwest.count(',') northlat, westlng = northwest.split(',') northlat, westlng = float(northlat), float(westlng) except AssertionError, err: logging.error(err.args[0]) return try: google_data = { 'key': constants.get_google_maps_apikey(), 'zoom': zoom, 'center': centerpoint, 'size': widthxheight, 'sensor':'false', 'format':'png', } mapimage = MapImage.all().filter('user =', user).get() if not mapimage: mapimage = MapImage() mapimage.user = user def reset_map_image(mapimage_param, centerlat_param, centerlng_param, northlat_param, westlng_param, zoom_param, height_param, width_param, google_data_param): mapimage_param.tiles_remaining = len(range(0, width_param, 256)) * len(range(0, height_param, 256)) mapimage_param.centerlat = centerlat_param mapimage_param.centerlng = centerlng_param mapimage_param.northlat = northlat_param
pass # raise err #TODO keep this error, but removing it now so that you can log in welcome_data['userinfo'] = userinfo welcome_data['real_name'] = userinfo.real_name welcome_data['photo_url'] = userinfo.photo_url welcome_data['is_ready'] = userinfo.is_ready sidebar_data['color_scheme'] = userinfo.color_scheme map_data['citylat'] = userinfo.citylat map_data['citylng'] = userinfo.citylng else: # make a default map_data object if user is not logged in, see is_logged_in JS variable, sorry this is so hacky map_data = { 'domain': environ['HTTP_HOST'], 'static_url': 'http://maps.google.com/maps/api/staticmap?center=40.7427050566%2C-73.9888000488&format=png&zoom=13&key=ABQIAAAAwA6oEsCLgzz6I150wm3ELBQO7aMTgd18mR6eRdj9blrVCeGU7BS14EnkGH_2LpNpZ8DJW0u7G5ocLQ&sensor=false&size=640x640', 'mapimage_url': 'map/%s.png' % 'ag93aGVyZS1kby15b3UtZ29yEAsSCE1hcEltYWdlGM2LRgw', } os_path = os.path.dirname(__file__) self.response.out.write(template.render(os.path.join(os_path, 'templates/header.html'), {'key': constants.get_google_maps_apikey()})) self.response.out.write(template.render(os.path.join(os_path, 'templates/private_welcome.html'), welcome_data)) if not foursquare_is_happy: self.response.out.write(template.render(os.path.join(os_path, 'templates/private_forbidden.html'), None)) elif user and userinfo: if userinfo.is_authorized: self.response.out.write(template.render(os.path.join(os_path, 'templates/private_sidebar.html'), sidebar_data)) else: self.response.out.write(template.render(os.path.join(os_path, 'templates/private_unauthorized.html'), None)) else: self.response.out.write(template.render(os.path.join(os_path, 'templates/information.html'), {'user': user })) self.response.out.write(template.render(os.path.join(os_path, 'templates/private_map.html'), map_data)) self.response.out.write(template.render(os.path.join(os_path, 'templates/all_footer.html'), None)) class AuthHandler(webapp.RequestHandler): def get(self):