def get(self, entity_id=None): """HTML GET handler. Check the query parameters for the ID of the monster to be displayed. If found, disply that monster using the standard template.""" template_values = self.build_template_values() if entity_id: try: monster = Monster.get_by_id_safe(int(entity_id), template_values[handlers.base.PROFILE_KEY]) except ValueError: return self.not_found() if not monster: self.not_found() return template_values['monster'] = monster else: self.redirect("/view/"+str(Monster.all().order("-creation_time").get().key().id())) return if handlers.base.PROFILE_KEY in template_values: template_values['vote'] = Vote.all().filter("monster = ", template_values['monster']).filter("voter = ", template_values[handlers.base.PROFILE_KEY]).get() template_values['edit_url'] = self.uri_for('monster.edit', entity_id=r'%s') template_values['delete_url'] = self.uri_for('monster.delete', entity_id=entity_id) template_values['profile_url'] = self.uri_for('profile', profile_id=monster.creator.key().id()) template = configuration.site.jinja_environment.get_template('monster/view.html') self.response.write(template.render(template_values))
def test_get(self): creator = Profile().put() monster = Monster() monster.creator = creator monster.put_unsearchable() response = main.app.get_response('/monster/'+str(monster.key().id())+'/delete') self.assert200(response)
def get(self): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them to the index.html template. Does not accept any query parameters""" template_values = self.build_template_values() template_values["popular_monsters"] = Monster.get_top_rated(5, user=template_values[handlers.base.PROFILE_KEY]) template_values["recent_monsters"] = Monster.get_recent(5, user=template_values[handlers.base.PROFILE_KEY]) template = configuration.site.jinja_environment.get_template("index.html") self.response.write(template.render(template_values))
def get(self, profile_id=None): """HTML GET handler. Check the query parameters for the ID of the profile to be displayed. If found, display the user. Otherwise display current user""" template_values = self.build_template_values() if profile_id and template_values[handlers.base.PROFILE_KEY] and int(profile_id) == template_values[handlers.base.PROFILE_KEY].key().id(): template_values['viewed_profile'] = template_values[handlers.base.PROFILE_KEY] elif profile_id: template_values['viewed_profile'] = Profile.get_by_id(int(profile_id)) elif template_values[handlers.base.PROFILE_KEY]: return self.redirect(self.uri_for("profile", profile_id=template_values[handlers.base.PROFILE_KEY].key().id())) else: return self.forbidden() favorites = Vote.all().filter("voter = ", template_values['viewed_profile']).filter("is_up = ", True).fetch(1) if favorites: template_values['recent_up_monster'] = favorites[0].monster created = Monster.get_recent(1, creator=template_values['viewed_profile'], user=template_values[handlers.base.PROFILE_KEY]) if created: template_values['recent_monster'] = created[0] template = configuration.site.jinja_environment.get_template('profile/view.html') return self.response.write(template.render(template_values))
def get(self): """HTML GET handler. Just show a template with the normal template values.""" template_values = self.build_template_values() template_values['monsters'] = Monster.get_most_recent(10, user=template_values[handlers.base.PROFILE_KEY]) template = configuration.site.jinja_environment.get_template('monster/landing.html') self.response.write(template.render(template_values))
def post(self, entity_id=None): """HTML POST handler. Save changes to the given monster.""" template_values = self.build_template_values() if entity_id: monster = Monster.get_by_id_safe(int(entity_id), template_values[handlers.base.PROFILE_KEY]) if monster: user = users.get_current_user() if monster.creator.account == user: monster.name = self.request.get('name') monster.hp = self.request.get('hp') monster.armor = self.request.get('armor') monster.damage = self.request.get('damage') monster.instinct = self.request.get('instinct') monster.description = self.request.get('description') nextindex = 0 monster.tags = [] while self.request.get('tag-'+str(nextindex)): monster.tags.append(self.request.get('tag-'+str(nextindex))) nextindex += 1 nextindex = 0 monster.special_qualities = [] while self.request.get('specialquality-'+str(nextindex)): monster.special_qualities.append(self.request.get('specialquality-'+str(nextindex))) nextindex += 1 nextindex = 0 monster.damage_tags = [] while self.request.get('damagetag-'+str(nextindex)): monster.damage_tags.append(self.request.get('damagetag-'+str(nextindex))) nextindex += 1 nextindex = 0 monster.moves = [] while self.request.get('move-'+str(nextindex)): monster.moves.append(self.request.get('move-'+str(nextindex))) nextindex += 1 monster.edited = True monster.put() return self.redirect(self.uri_for("monster", entity_id=monster.key().id())) else: return self.forbidden() else: return self.not_found() else: return self.not_found() template = configuration.site.jinja_environment.get_template('monster/edit.html') self.response.write(template.render(template_values))
def get(self): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them to the index.html template. Does not accept any query parameters""" template_values = self.build_template_values() query = cgi.escape(self.request.get('q')) if query: template_values['results'] = Monster.search(query) if len(template_values['results']) == 0: template_values['results'] = 1 template = configuration.site.jinja_environment.get_template('search.html') self.response.write(template.render(template_values))
def get(self, entity_id=None): """HTML GET handler. Check if the user has already voted. If they haven't, -1 the monster. Otherwise, error.""" user = users.get_current_user() profile = Profile.all().filter("account = ", user).get() monster = Monster.get_by_id_safe(int(entity_id), profile) if (not monster) or (not profile): return self.forbidden() previous_vote = Vote.all().filter("voter = ", profile).filter("monster = ",monster).get() if previous_vote and previous_vote.is_up: previous_vote.is_up = False previous_vote.put() if monster.downs: monster.downs += 1 else: monster.downs = 1 if monster.ups: monster.ups -= 1 else: monster.ups = 0 monster.compute_score() monster.put() elif previous_vote: return self.response_set_status(500) else: vote = Vote() vote.voter = profile vote.monster = monster vote.is_up = False vote.put() if monster.downs: monster.downs += 1 else: monster.downs = 1 monster.compute_score() monster.put()
def get(self): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them. Easy enough, right?""" template_values = self.build_template_values() skip = int(self.request.get("skip", default_value=0)) template_values['monsters'] = Monster.get_recent_public(skip=skip) if len(template_values['monsters']) >= 10: template_values['next'] = str(self.uri_for('monster.all'))+"?skip="+str(skip+10) if skip >= 10: template_values['prev'] = str(self.uri_for('monster.all'))+"?skip="+str(skip-10) template = configuration.site.jinja_environment.get_template('monster/all.html') self.response.write(template.render(template_values))
def get(self, entity_id=None): """HTML GET handler. Check the query parameters for the ID of the monster to be displayed. If found, disply that monster using the standard template.""" template_values = self.build_template_values() if entity_id: monster = Monster.get_by_id_safe(int(entity_id), template_values[handlers.base.PROFILE_KEY]) if monster: if monster.creator.account == template_values[handlers.base.USER_KEY]: monster.delete() else: return self.forbidden() else: return self.not_found() else: return self.not_found() template = configuration.site.jinja_environment.get_template('monster/delete.html') self.response.write(template.render(template_values))
def get(self, profile_id=None): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them. Easy enough, right?""" template_values = self.build_template_values() skip = int(self.request.get("skip", default_value=0)) creator = Profile.get_by_id(int(profile_id)) template_values['creator'] = creator template_values['monsters'] = Monster.get_recent( 10, creator=creator, user=template_values[handlers.base.PROFILE_KEY], skip=skip) if len(template_values['monsters']) >= 10: template_values['next'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip+10) if skip >= 10: template_values['prev'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip-10) template = configuration.site.jinja_environment.get_template('monster/all.html') self.response.write(template.render(template_values))
def post(self, entity_id=None): """HTML POST handler. Save changes to the given monster.""" template_values = self.build_template_values() if not template_values[handlers.base.PROFILE_KEY].is_publisher: return self.forbidden() monster = Monster() monster.product = int(self.request.get('product')) monster.creator = template_values[handlers.base.PROFILE_KEY] if monster.product == -1: monster.is_core = True license = self.request.get('license') if license: monster.license = configuration.site.licenses[license] else: return self.error() name = self.request.get('name') if name: monster.name = name else: return self.error() tags = self.request.get('tags') if tags: for tag in tags.split(", "): monster.tags.append(tag) else: return self.error() damage = self.request.get('damage') if damage: monster.damage = damage else: return self.error() hp = self.request.get('hp') if hp: monster.hp = hp else: return self.error() armor = self.request.get('armor') if armor: monster.armor = armor else: return self.error() damage_tags = self.request.get('damage_tags') if damage_tags: for tag in damage_tags.split(", "): monster.damage_tags.append(tag) else: return self.error() special_qualities = self.request.get('special_qualities') if special_qualities: for sq in special_qualities.split(", "): monster.special_qualities.append(sq) else: return self.error() description = self.request.get('description') if armor: monster.description = description else: return self.error() instinct = self.request.get('instinct') if instinct: monster.instinct = instinct else: return self.error() moves = self.request.get('moves') if moves: for move in moves.split("\n"): monster.moves.append(move) else: return self.error() monster.put() return self.redirect(self.uri_for("monster", entity_id=monster.key().id()))
def post(self): """HTML POST handler. Parse ALL THE MONSTERS.""" template_values = self.build_template_values() if not template_values[handlers.base.PROFILE_KEY].is_publisher: return self.forbidden() upload_files = self.get_uploads('file_upload') blob_info = upload_files[0] blob_key = blob_info.key() blob_reader = blobstore.BlobReader(blob_key) root = ET.parse(blob_reader) product = int(self.request.get('product')) for upload_monster in root.iter('monster'): monster = Monster() if product == -1: monster.is_core = True else: monster.product = product monster.creator = template_values[handlers.base.PROFILE_KEY] monster.name = upload_monster.findtext('name') monster.description = upload_monster.findtext('description') monster.instinct = upload_monster.findtext('instinct') tags = upload_monster.find('tags') if tags and len(tags): for tag in tags: monster.tags.append(tag.text.encode('utf-8')) monster.damage = upload_monster.findtext('damage') monster.hp = upload_monster.findtext('hp') monster.armor = upload_monster.findtext('armor') damage_tags = upload_monster.find('damage_tags') if damage_tags and len(damage_tags): for tag in damage_tags: monster.damage_tags.append(tag.text) special_qualities = upload_monster.find('special_qualities') if special_qualities and len(special_qualities): for special_quality in special_qualities: monster.special_qualities.append(special_quality.text) for move in upload_monster.find('moves'): monster.moves.append(move.text) try: monster.put() except: print monster raise if product == -1: return self.redirect(self.uri_for('home')) self.redirect(self.uri_for('product', entity_id=product))