def post(self): map_id = self.request.get("map_id") user_maps = UserMaps.all().filter("visible =", True).filter("map_id =", map_id).get() if user_maps is None: logging.error("map_id not found.") return user_activity_list = UserActivity.all().filter("user_maps =", user_maps.key()).fetch(100) if len(user_activity_list) > 0: index = {} for user_activity in user_activity_list: if user_activity.tags is not None: for tag in user_activity.tags.split(","): if len(tag) > 0: # logging.info('Tag: %s' % tag) if tag in index: activity_id_list = index[tag] activity_id_list.append(str(user_activity.key().id())) else: activity_id_list = [] activity_id_list.append(str(user_activity.key().id())) index[tag] = activity_id_list user_activity_tag_index_list = UserActivityTagIndex.all().filter("user_maps =", user_maps.key()).fetch(500) if len(user_activity_tag_index_list) > 0: logging.info("Clear Index: %d" % len(user_activity_tag_index_list)) for user_activity_tag_index in user_activity_tag_index_list: memcache.delete("tag_id_list_%f" % user_activity_tag_index.key().id()) user_activity_tag_index.delete() memcache.delete("tag_index_%s" % map_id) for tag, activity_id_list in index.items(): user_activity_tag_index_list = UserActivityTagIndex() user_activity_tag_index_list.user_maps = user_maps.key() user_activity_tag_index_list.tag = tag user_activity_tag_index_list.user_activity_id_list = ",".join(activity_id_list) user_activity_tag_index_list.count = len(activity_id_list) user_activity_tag_index_list.put() logging.info("Add Index: %d" % len(index))
def get(self, map_id): user_maps = UserMaps.all().filter('map_id =', map_id).filter('visible =', True).get() if user_maps is None: return self.error(404) map_title = user_maps.map_title lat = '' lng = '' if user_maps.home_geo is not None: lat = user_maps.home_geo.lat lng = user_maps.home_geo.lon user_activity_list = UserActivity.all().filter('user_maps =', user_maps.key()).order('-created_at').fetch(200) activity_list = [] activity_id_list = [] available_icon_list = [] for user_activity in user_activity_list: icon_id = '' if user_activity.icon is not None: icon_id = user_activity.icon.key().id() available_icon_list.append({'id': icon_id, 'name': user_activity.icon.name}) created_at = user_activity.created_at + datetime.timedelta(hours=9) activity_list.append({'id': user_activity.key().id(), 'name': user_activity.name, 'tags': user_activity.tags, 'icon': icon_id, 'lat': user_activity.geo.lat, 'lng': user_activity.geo.lon, 'created_at': created_at.strftime('%Y-%m-%d %H:%M:%S (JST)')}) activity_id_list.append(str(user_activity.key().id())) user = users.get_current_user() if user: url = users.create_logout_url('/map/%s' % map_id) else: url = users.create_login_url('/map/%s' % map_id) icon_list = None map_owner = False if user is not None: user_prefs = UserPrefs.all().filter('google_account =', user).get() if user_prefs is not None: user_maps = UserMaps.all().filter('map_id =', map_id).filter('user_prefs =', user_prefs.key()).get() if user_maps is not None: map_owner = True marker_icon_list = MarkerIcon.all().filter('user_prefs =', user_prefs.key()).filter('visible =', True).fetch(100) icon_list = [] for marker_icon in marker_icon_list: icon_list.append({'id': marker_icon.key().id(), 'name': marker_icon.name}) mode = self.request.get('mode') template_values = { 'map_title': map_title, 'map_id': map_id, 'lat': lat, 'lng': lng, 'activity_list': activity_list, 'activity_id_list': ','.join(activity_id_list), 'icon_list': icon_list, 'available_icon_list': available_icon_list, 'map_owner': map_owner, 'login': user and True or False, 'url': url, 'mode': mode } path = os.path.join(os.path.dirname(__file__), 'templates/map/map.html') self.response.out.write(template.render(path, template_values))